Verilog HDL实验重要电路模块代码

注:仿真测试时使用的软件为Modelsim或Vivado,操作类似。

一、1位2选1数据选择器(MUX21)

①电路模块(mux21.v)

module mux21(in0,in1,sel,out);
	input in0;
	input in1;
	input sel;
	output reg out;
	always@(*)
		case(sel)
			1'b0: out = in0;
			1'b1: out = in1;
			default: out = 1'b0;
		endcase
endmodule

②测试模块(mux21_tb.v)

module mux21_tb;
	reg a,b;
	reg sel;
	wire out;
	mux21 u1(a,b,sel,out);
	initial
		begin
			a = 0;
			b = 0;

			sel = 1'b0;
			#10 a = 1;
			#10 a = 0;
			#10 a = 1;			
			#10 a = 0;

			sel = 1'b1;
			#10 b = 1;
			#10 b = 0;
			#10 b = 1;			
			#10 b = 0;	
		end
endmodule
				

③仿真波形

在这里插入图片描述

二、1位4选1数据选择器(MUX41)

①电路模块(mux41.v)

module mux41(in0,in1,in2,in3,sel,out);
	input in0;
	input in1;
	input in2;
	input in3;
	input [1:0] sel;
	output reg out;
	always@(*)
		case(sel)
			2'b00: out = in0;
			2'b01: out = in1;
			2'b10: out = in2;
			2'b11: out = in3;
			default: out = 1'b0;
		endcase
endmodule

②测试模块(mux41_tb.v)

module mux41_tb;
	reg a,b,c,d;
	reg [1:0] sel;
	wire out;
	mux41 u1(a,b,c,d,sel,out);
	initial
		begin
			a = 0;
			b = 0;
			c = 0;
			d = 0;

			sel = 2'b00;
			#10 a = 1;
			#10 a = 0;
			#10 a = 1;			
			#10 a = 0;

			sel = 2'b01;
			#10 b = 1;
			#10 b = 0;
			#10 b = 1;			
			#10 b = 0;

			sel = 2'b10;
			#10 c = 1;
			#10 c = 0;
			#10 c = 1;			
			#10 c = 0;	

			sel = 2'b11;
			#10 d = 1;
			#10 d = 0;
			#10 d = 1;			
			#10 d = 0;	
		end
endmodule
				

③仿真波形

在这里插入图片描述

三、1位D触发器(DFF)

①电路模块(dff.v)

module dff(din,clk,q);
   input din,clk;
   output reg q;
   always @(posedge clk) 
      q <= din;
endmodule

②测试模块(dff_tb.v)

`timescale 1ns/1ns  
module dff_tb;
	reg clk,data_in;
	wire data_out;
	dff U1(data_in,clk,data_out);
	
	always #5 clk = ~clk;	//T = 10
	initial
		begin
			clk = 0;
			data_in = 0;
			#20 data_in = 1;
			#20 data_in = 0;
			#20 data_in = 1;
			#15 data_in = 0;
			#15 data_in = 1;
		end
endmodule

③仿真波形在这里插入图片描述

四、4位2选1数据选择器(MUX21_4)

①电路模块(mux21_4.v)

module mux21_4(in0,in1,sel,out);
	input [3:0] in0;
	input [3:0] in1;
	input sel;
	output reg[3:0] out;
	always@(*)
		case(sel)
			1'b0: out = in0;
			1'b1: out = in1;
			default: out = 4'b0000;
		endcase
endmodule

②测试模块(mux21_4_tb.v)

module mux21_4_tb;
	reg [3:0] a;
	reg [3:0] b;
	reg sel;
	wire [3:0] out;
	mux21_4 u1(a,b,sel,out);

	initial
		begin
			a = 4'b0000;
			b = 4'b0000;

			sel = 1'b0;
			#10 a = 4'b1111;
			#10 a = 4'b0000;
			#10 a = 4'b1111;			
			#10 a = 4'b0000;

			sel = 1'b1;
			#10 b = 4'b1111;
			#10 b = 4'b0000;
			#10 b = 4'b1111;			
			#10 b = 4'b0000;
		end
endmodule

③仿真波形

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值