我们制造集成电路(我指硬件上的物理设计)。据我所知,输入重置总是不同步的。我想知道,如果我使用异步复位,是否应该将其转换为同步?或者我们可以只使用异步重置吗?
发布于 2015-02-11 17:19:21
事实上,如果您有触发器,并且是以异步方式重新检查的,那么您可以在任何时候异步地启动重置,但是您应该同步结束它。原因很简单:想象一下真正的异步。重置与时钟边缘同时结束。您可以很容易地在这里获得亚稳态,或者,例如,一半的触发器将接受时钟边缘,而另一半将仍然在重置和错过相同的时钟边缘,从而潜在地破坏您的设计。
因此,基本上您需要同步外部异步重置,如下所示:
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这样,您仍然可以在任何时候重新设置您的设计,甚至在时钟的意义上(就像任何异步复位一样),但是内部重置将同步结束。
https://stackoverflow.com/questions/28381719
复制相似问题