注:仿真测试时使用的软件为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