FPGA Verilog寄存器模块及testbench代码

异步清零寄存器

工作原理:

  • CP 不为上升沿,且 RD=1 时,寄存器输出保持不变。
  • CP 上升沿,且 RD=1 时,输入端 D0-D3 送寄存器,Q0-Q3 输出等于输入,并 保持此数据直到下一个时钟沿到来。
  • RD=0 时, 异步清零。

寄存器模块代码:

module hardreg(d,clk,clrb,q);
	
	input clk,clrb;
	input[3:0] d;
	output reg [3:0] q;
	
	always@(posedge clk or  negedge clrb)
	begin
		if(!clrb)
			q<=0;// 如果clrb=0就异步清零
		else
			q<=d;      
	end
	
endmodule

testbench代码:

`timescale 1 ns/ 1 ps

`define clock_period 20
module hardreg_tb;

	reg clk;
	reg clrb;
	reg [3:0] din;

	wire [3:0] dout;
                     
	hardreg hardreg0 (
	din,
	clk,
	clrb,
	dout
	);
	
	initial clk =1'b1;
	always#(`clock_period/2) clk=~clk;
	initial begin                                                  
         clrb=1'b0;
			din=4'b1111;
			#100
			clrb=1'b1;
			#100
			clrb=1'b0;
			#50 
			din =4'b0001;
			#100 
			clrb =1;
			#100 
			din =4'b0010;
			#100 
			din =4'b0011;
			#100 
			din =4'b0011;			
         #100
			clrb =0;
			#35
			din =4'b0101;			
         #100
         $stop;
            
		end
		                                                    
endmodule

功能仿真结果图:
FPGA Verilog寄存器模块及testbench代码_第1张图片
时序仿真结果图:
FPGA Verilog寄存器模块及testbench代码_第2张图片

你可能感兴趣的:(fpga)