Intel® Quartus® Prime Pro Edition用户指南: 设计建议

ID 683082
日期 9/28/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

2.3.1.2. 使用异步复位

异步复位是电路设计中最常见的复位形式,并且最容易实现。通常,您可以将异步复位插入到器件中,打开全局缓冲器,然后连接到器件中每个寄存器的异步复位管脚。

此方法仅在某些情况下才有优势—您无需始终复位寄存器。与同步复位不同,异步复位不会插入到数据路径中,并且不会对寄存器之间的数据到达时间产生负面影响。复位立即生效,并且一旦寄存器收到复位脉冲,寄存器就会复位。异步复位不依赖于时钟。

但是,当取消置位复位并且未通过恢复(µtSU)或移除(µtH)时间检查(Timing Analyzer恢复和移除分析均检查这两个时间)时,那么边沿被认为进入亚稳区域。需要额外的时间来确定正确的状态,并且延迟可能导致设置时间无法在下游寄存,从而导致系统故障。为避免这种情况的发生,请在具有异步复位的寄存器之后添加一些跟随器寄存器,并在设计中使用这些寄存器的输出。使用从动(follower)寄存器将数据与时钟同步,以消除亚稳性问题。您应将这些寄存器彼此靠近地布局在器件中,以使布线延迟最小,从而减少数据到达时间并增加MTBF。确保这些从动(follower)寄存器本身不被复位,但通过“flushing out”(刷新)这些寄存器的当前或初始状态在几个时钟周期内进行初始化。

图 19. 使用从动寄存器的异步复位(Asynchronous Reset with Follower Registers)

以下示例显示了等效的Verilog HDL代码。复位的有效边沿现在位于程序块的敏感度列表中,该列表将根据与时钟使能连接的复位信号的反相来推断从动寄存器上的时钟使能。从动寄存器应位于单独的程序块中,如使用non-blocking assignment所示。

使用从动寄存器的异步复位的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]

异步复位容易受到噪声的影响,嘈杂的异步复位会导致伪复位。您必须确保对异步复位进行去抖动和过滤。您可以轻松地异步进入复位,但是异步释放复位会导致潜在的亚稳定问题(也称为“复位移除”),包括带有反馈的同步电路的不良情况的危害。