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

ID 683082
日期 9/28/2020
Public

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

文档目录

2.3.1.3. 使用同步的异步复位

为了避免与纯同步复位和纯异步复位相关的潜在问题,可以使用同步异步复位。同步的异步复位结合了同步复位和异步复位的优点。

这些复位被异步置位和同步置低,能够立即生效,并确保不包含速度的数据路径。而且,对于时序分析,此电路是同步的,并且抗噪声。

以下示例显示了一种用于实现同步的异步复位的方法。您应该以与同步复位类似的方式使用synchronizer寄存器。但是,异步复位输入直接选通(gated)到synchronizer寄存器的CLRN管脚,并立即置位所产生的复位。当复位置低时,逻辑“1”通过synchronizer进行同步来同步地置低所生成的复位。

图 20. 同步的异步复位原理图

以下示例显示了等效的Verilog HDL代码。在模块的灵敏度列表中使用复位的有效边沿。

同步的异步复位的Verilog HDL代码


module sync_async_reset (
        input    clock,
        input    reset_n,
        input    data_a,
        input    data_b,
        output   out_a,
        output   out_b
        );
reg     reg1, reg2;
reg     reg3, reg4;
assign  out_a    = reg1;
assign  out_b    = reg2;
assign  rst_n    = reg4;
always @ (posedge clock, negedge reset_n)
begin
    if (!reset_n)
    begin
       reg3     <= 1’b0;
       reg4     <= 1’b0;
    end
    else
    begin
       reg3     <= 1’b1;
       reg4     <= reg3;
    end
end
always @ (posedge clock, negedge rst_n)
begin
    if (!rst_n)
    begin
       reg1     <= 1’b0;
       reg2     <= 1;b0;
    end
    else
    begin
       reg1     <= data_a;
       reg2     <= data_b;
    end
end
endmodule  // sync_async_reset

为了最大程度地减少两个同步寄存器之间的亚稳效应,并增加MTBF,这些寄存器应该布局在器件中尽可能靠近的位置,以最小化布线延迟。如果可能,请将寄存器布局在同一逻辑阵列模块(LAB)中。必须使用set_false_path命令排除输入复位信号(reset_n):

set_false_path -from [get_ports {reset_n}] -to [all_registers]

与指定约束一起使用的set_false_path命令排除了不必要的输入时序报告,否则在复位管脚上指定输入延迟可能会生成这些报告。

同步异步复位的瞬时置位容易受到噪声和欠幅脉冲的影响。如果可能,您应该对异步复位进行去抖(debounce),并在复位进入器件之前对其进行过滤。电路确保同步的异步复位的长度至少为一个完整的时钟周期。要将此时间扩大到n个时钟周期,则必须将synchronizer寄存器的数量增加到n + 1。您必须将异步输入复位(reset_n)连接到所有synchronizer 寄存器的CLRN管脚,以维持同步的异步复位的异步置位。