用verilog實現異步復位、同步釋放電路

相關重要概念:建立時間,保持時間;同步時序,異步時序;亞穩態;

時序電路里面需要復位,異步復位相比於同步復位最大的優點就是可以節約資源。

但是異步復位在上升沿時如果同時遇到時鐘的上升沿,會不滿足建立時間保持時間的要求,從而使電路進入亞穩態

爲了避免亞穩態,採用同步釋放的解決方法。

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、第一個時鐘信號的上升沿處發生變化)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章