题解 | #异步复位同步释放#
异步复位同步释放
https://www.nowcoder.com/practice/9b892b6f75954267b4574b042f8a8d6a
`timescale 1ns/1ns
module ali16(
input clk,
input rst_n,
input d,
output reg dout
);
//*************code***********//
//异步复位:复位信号不受系统时钟的控制,可以在任何时候使电路的状态复位
//异步复位信号有效时,第一级触发器会立即复位
reg rst0,rst1;
always@(posedge clk or negedge rst_n)
if(!rst_n) begin
rst0 <= 0;
rst1 <= 0;
end
else begin
rst0 <= 1;
rst1 <= rst0;
end
//同步释放:复位信号撤销(有效变无效)时,与系统时钟同步进行。避免复位信号的撤销导致电路出现亚稳态。
//异步复位信号撤销时,第一级触发器的输出会在时钟的上升沿(假设是上升沿触发的系统)将这个变化同步到第二级触发器。第二级触发器的输出才是最终用于电路复位后的正常工作状态。
wire rst2=rst1;
always@(posedge clk or negedge rst2)
if(!rst2)
dout <= 0;
else
dout <= d;
//*************code***********//
endmodule

