ASYNC_REG属性通常应用在跨时钟域的数据同步上。
它有如下特性:
1)在仿真过程中发生时序违规时,寄存器会输出一个’X’,或未知状态(不是0或1)。当发生这种情况时,该元素驱动的任何东西都会在其输入上看到一个’X’,然后进入未知状态,这种情况会在整个设计中传播。这种情况下会导致设计的大部分变的未知,有时无法从这种状态中恢复。被ASYNC_REG约束的寄存器在这种情况下会输出最后的已知状态。
2) ASYNC_REG约束的寄存器如同DONT_TOUCH约束的寄存器一样,不会被优化。
3) 指定ASYNC_REG的寄存器还会影响优化、放置和路由,以提高可能会变成亚稳态的寄存器的平均故障间隔时间(MTBF)。
4) 如果应用ASYNC_REG,放置器将确保同步链上的触发器紧密地放置在一起,以最大化MTBF。
5) 假设被ASYNC_REG约束的寄存器有相同控制信号且寄存器总量不超过SLICE/CLB可用资源,则被约束的寄存器会放在单个SLICE/CLB中。
例:
\qquad (ASYNC_