相关重要概念:建立时间,保持时间;同步时序,异步时序;亚稳态;
时序电路里面需要复位,异步复位相比于同步复位最大的优点就是可以节约资源。
但是异步复位在上升沿时如果同时遇到时钟的上升沿,会不满足建立时间和保持时间的要求,从而使电路进入亚稳态。
为了避免亚稳态,采用同步释放的解决方法。
verilog代码:
module ASRSR(
input clk, rst, out
);
reg out1;
reg out2;
always@(posedge clk, negedge rst)
begin
if(rst==0)
begin
out1 <= 0;
out2 <= 0;
end
else
begin
out1 <= 1'b1;
out2 <= out1;
end
end
assign out = out2;
endmodule
testbench:
`timescale 1ns/1ns
module ASRSR_TB;
reg CLK,RST;
wire OUT;
integer i;
ASRSR asrsr1(.clk(CLK),.rst(RST),.out(OUT));
initial
begin
CLK = 0;
for(i=0;i<10000;i=i+1)
begin
#2 CLK = ~CLK;
end
end
initial
begin
RST = 1;
#5 RST = 0;
#7 RST = 1;
end
endmodule
仿真波形:
可以从波形中看到,输出信号OUT是在复位信号变成1之后,时钟信号的第二个上升沿才开始变化的,这样的结构就是把时钟信号的第二个上升沿和复位信号的上升沿分开,从而避免了亚稳态的产生。(如果没有同步释放功能,输出信号OUT应该是在14ns、第一个时钟信号的上升沿处发生变化)