ASYNC_REG属性一般用于跨时钟域的数据同步上,该属性指定:寄存器可以接受异步数据或者该寄存器是一个位于同步链上的同步寄存器。
这条命令可以放在任何寄存器上,防止综合器对打拍寄存器进行优化,类似DONT_TOUCH。
在仿真过程中,当发生时序违例时,寄存器默认行为会输出X或不定态,从而进可能在多个路径上传输不定态。ASYNC_REG能够使得在发生时许违例时输出上次已知值。
在附加了ASYNCREG属性后,在综合的过程中将不会优化该寄存器及其周边逻辑,同时也影响optimization,place&routing以提高MTBF(mean time between failure)。在布局时,将会确保同步链上的寄存器摆放尽可能接近一最大化MTBF,直接相连的带有该属性的寄存器将会直接放进单个SLICE/CLB(如果寄存器同时带有ASYNC_REG和IOB属性,IOB将优先于ASYNC_REG,寄存器将会被存放至ILOGIC block)。
如下例所示,,sync_0,sync_1将会被放至同一个SLICE/CLB内:
(ASYNC_REG=“TRUE”)reg sync_0,sync_1;
always @(posedge clk)
begin
sync_1<=sync_0;
sync_0<=en;
其电路图及布局图分别如下图所示:
没有回复内容