用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、第一个时钟信号的上升沿处发生变化)

 

 

 

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