仅对英特尔可见 — GUID: mwh1409959563610
Ixiasoft
2.3.1.2. 使用异步复位
此方法仅在某些情况下才有优势—您无需始终复位寄存器。与同步复位不同,异步复位不会插入到数据路径中,并且不会对寄存器之间的数据到达时间产生负面影响。复位立即生效,并且一旦寄存器收到复位脉冲,寄存器就会复位。异步复位不依赖于时钟。
但是,当取消置位复位并且未通过恢复(µtSU)或移除(µtH)时间检查(Timing Analyzer恢复和移除分析均检查这两个时间)时,那么边沿被认为进入亚稳区域。需要额外的时间来确定正确的状态,并且延迟可能导致设置时间无法在下游寄存,从而导致系统故障。为避免这种情况的发生,请在具有异步复位的寄存器之后添加一些跟随器寄存器,并在设计中使用这些寄存器的输出。使用从动(follower)寄存器将数据与时钟同步,以消除亚稳性问题。您应将这些寄存器彼此靠近地布局在器件中,以使布线延迟最小,从而减少数据到达时间并增加MTBF。确保这些从动(follower)寄存器本身不被复位,但通过“flushing out”(刷新)这些寄存器的当前或初始状态在几个时钟周期内进行初始化。
使用从动寄存器的异步复位的Verilog HDL代码
module async_reset ( input clock, input reset_n, input data_a, output out_a, ); reg reg1, reg2, reg3; assign out_a = reg3; always @ (posedge clock, negedge reset_n) begin if (!reset_n) reg1 <= 1’b0; else reg1 <= data_a; end always @ (posedge clock) begin reg2 <= reg1; reg3 <= reg2; end endmodule // async_reset
您可以轻松地限制异步复位。根据定义,异步复位与它们正在复位的寄存器的时钟域具有不确定的关系。因此,无法对这些复位进行静态时序分析,您可以使用set_false_path命令从时序分析中排除路径。因为不知道复位与寄存器时钟之间的关系,所以您不能在Timing Analyzer中为此路径运行恢复和删除分析。即使没有错误的路径语句,尝试这样做也不会产生报告要恢复和删除的路径。
异步复位的SDC约束
# Input clock - 100 MHz create_clock [get_ports {clock}] \ -name {clock} \ -period 10.0 \ -waveform {0.0 5.0} # Input constraints on data set_input_delay 7.0 \ -max \ -clock [get_clocks {clock}]\ [get_ports {data_a}] set_input_delay 1.0 \ -min \ -clock [get_clocks {clock}] \ [get_ports {data_a}] # Cut the asynchronous reset input set_false_path \ -from [get_ports {reset_n}] \ -to [all_registers]
异步复位容易受到噪声的影响,嘈杂的异步复位会导致伪复位。您必须确保对异步复位进行去抖动和过滤。您可以轻松地异步进入复位,但是异步释放复位会导致潜在的亚稳定问题(也称为“复位移除”),包括带有反馈的同步电路的不良情况的危害。