异步复位同步释放


异步复位
当rst_async_n有效时,第一个D触发器的输出是低电平,第二个D触发器的输出rst_sync_n也是低电平,方框2中的异步复位端口有效,输出被复位。
同步释放
假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件。加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D触发器1可能输出高电平,也可能输出亚稳态,也可能输出低电平。但此时第二级触发器不会立刻变高,它要么复位为0,要么跟随前一级触发器的输出Q1,而前一级触发器的输出Q1为0,因此,无论如何第二级触发器的输出都为0,而触发器1的输出,若稳定后Q1为1,那么rst_sync_n在下一个周期被拉高,实现同步释放;如果稳定后的Q1为0,那么下个周期rst_sync_n仍为0,但此时由于rst_async_n已经为高,所以Q1在下一个周期必为1,那么rst_sync_n在下一个时钟上升沿到来时被拉高,也实现了同步释放,只是晚了一个周期而已。

module dff_sync(
	input clk,
	input rst_async_n,
	output rst_sync_n
);   
reg rst_s1;
reg rst_s2;
always @ (posedge clk, negedge rst_async_n)
if (!rst_async_n) begin
    rst_s1 <= 1'b0;
    rst_s2 <= 1'b0;
end
else begin
    rst_s1 <= 1'b1;
    rst_s2 <= rst_s1;
end
assign rst_sync_n = rst_s2;
endmodule
posted @ 2025-02-26 11:12  心随鸥鹭齐舒羽  阅读(151)  评论(0)    收藏  举报