我们制造IC(我的意思是硬件中的物理设计)。 据我所知,输入复位始终是异步的。我想知道如果我使用异步复位,我应该进入同步吗?或者我们可以只使用异步复位吗?
答案 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
这样,您仍然可以随时重置您的设计,甚至可以在没有时钟的情况下(如任何异步复位那样),但内部复位将与时钟同步结束。