相關重要概念:建立時間,保持時間;同步時序,異步時序;亞穩態;
時序電路里面需要復位,異步復位相比於同步復位最大的優點就是可以節約資源。
但是異步復位在上升沿時如果同時遇到時鐘的上升沿,會不滿足建立時間和保持時間的要求,從而使電路進入亞穩態。
爲了避免亞穩態,採用同步釋放的解決方法。
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、第一個時鐘信號的上升沿處發生變化)