1

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

4

1 回答 1

1

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

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

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

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

于 2015-02-11T17:19:21.170 回答