如果我使用异步复位怎么办,我是否必须同步转动呢?

时间:2015-02-07 11:45:21

标签: vlsi asic

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

1 个答案:

答案 0 :(得分: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

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