如果我使用异步复位怎么办,我是否必须将其设为同步?

What if I used Asynchronous reset, Should I have to make as synchronous turned it?

我们制造 IC(我指的是硬件中的物理设计)。 据我所知,输入重置始终是异步的。我想知道如果我使用异步复位怎么办,我应该变成同步的吗?或者我们可以只使用异步复位吗?

事实上,如果你有触发器,它是定时和异步复位的,你可以在任何时候异步启动复位,但你应该同步结束它。原因很简单:想象一下真正的异步。复位与时钟边沿同时结束。您可以在这里轻松获得亚稳态,或者,例如,一半的触发器会接受时钟边沿,而另一半仍处于复位状态并错过相同的时钟边沿,因此可能会破坏您的设计。

所以基本上你需要像这样同步外部异步复位:

module rst_resync
(
    input  wire clk,
    input  wire ext_rst_n,
    output wire rst_n
);

    reg [1:0] rst_resync;

    always @(posedge clk, negedge ext_rst_n)
    if( !ext_rst_n )
        rst_resync[1:0] <= 2'b00;
    else
        rst_resync[1:0] <= { rst_resync[0], 1'b1 };

    assign rst_n = rst_resync[1];

endmodule

这样,您仍然可以随时重置您的设计,甚至在没有时钟的情况下(就像任何异步重置一样),但内部重置将与时钟同步结束。