异步复位,同步复位,异步复位同步释放

1.异步复位

异步复位:异步复位是指无论时钟是否到来,只要复位信号有效,就对系统进行复位。

代码如下:

module asy(clk,rst_n,d,q);
input wire clk;
input wire rst_n;
input wire d;

output reg q;

always@(posedge clk or negedge rst_n)//�첽��λ
	begin
		if(!rst_n)
			q<=0;
		else
			q<=d;
	end
endmodule 

RTL图如下:

异步复位的优缺点:(优点:占用较少逻辑单元。缺点:可能会产生竞争冒险)

testbench如下:

`timescale 1ns/1ns  
module tb_asy;

reg clk;
reg rst_n;
reg d;

wire q;


initial
	begin
		clk=0;
		rst_n=0;
		#55 rst_n=1;
		#55 rst_n=0;
	    #55 rst_n=1;
		#55 rst_n=0;
	end
always #10 clk=~clk;

asy asy(
	.clk(clk),
	.rst_n(rst_n),
    .d(d),
	.q(q)
	);
endmodule 

仿真结果如下:

2.同步复位

同步复位:复位信号只有在时钟上升沿到来时才有效。

代码如下:

module syn(clk,rst_n,d,q);
input wire clk;
input wire rst_n;
input wire d;

output reg q;

always@(posedge clk)
	begin
		if(!rst_n)  //同步复位
			q<=0;
		else
			q<=d;
	end
endmodule 

RTL图如下:

同步复位的优缺点:(优点:可以尽量点少竞争冒险的可能。缺点:会占用更多的逻辑单元)

testbench如下:

`timescale 1ns/1ns  
module tb_syn;
reg clk;
reg rst_n;
reg d;
wire q;

initial
	begin
		clk=0;
		rst_n=0;
		#55 rst_n=1;
		#55 rst_n=0;
	    #55 rst_n=1;
		#55 rst_n=0;
	end
always #10 clk=~clk;

syn syn(
	.clk(clk),
	.rst_n(rst_n),
    .d(d),
	.q(q)
	);
endmodule 

仿真结果如下:

3.异步复位同步释放

猜你喜欢

转载自blog.csdn.net/u013273161/article/details/83515368