1、编写4选1数据选择器模块代码:
module mux4_1(out,in0,in1,in2,in3,sel);
output out;
input in0,in1,in2,in3;
input[1:0] sel;
reg out;
always @(in0 or in1 or in2 or in3 or sel)//??????
case(sel)
2'b00: out=in0;
2'b01: out=in1;
2'b10: out=in2;
2'b11: out=in3;
default: out=2'bx;
endcase
endmodule
2、写测试文件tmux4_1.v代码:
`timescale 1ns/1ns
module tmux4_1;
reg in0, in1, in2, in3;
reg [1:0] sel;
wire out;
initial
begin
in0 = 1; in1 = 0; in2 = 0; in3 = 0; sel = 2'b00;
#20 sel = 2'b01; #10 sel = 2'b10; #10 sel = 2'b11; //stay 20ns when out=1
#10 in0 = 0; in1 = 1; in2 = 0; in3 = 0; sel = 2'b01;
#20 sel = 2'b00; #10 sel = 2'b10; #10 sel = 2'b11;
#10 in0 = 0; in1 = 0; in2 = 1; in3 = 0; sel = 2'b10;
#20 sel = 2'b00; #10 sel = 2'b11; #10 sel = 2'b01;
#10 in0 = 0; in1 = 0; in2 = 0; in3 = 1; sel = 2'b11;
#20 sel = 2'b00; #10 sel = 2'b01; #10 sel = 2'b10;
#200 $stop;
end
//exemplify
mux4_1 u0_mux4_1(
.in0 (in0),
.in1 (in1),
.in2 (in2),
.in3 (in3),
.sel (sel),
.out (out)
);
endmodule
测试代码解读:
测试代码的输出分四个周期,在每个周期内,控制sel值分别选择4个输入in值。以第一周期为例,持续时间为50ns,in0输出1,in1-3输出都为0,sel在前20ns片选in0,然后每隔10ns挨个选择in1-3,其他周期类似。第二周期的时候,in1=1,in0、in2和in3都为0,sel选择in1输出持续20ns,然后选择in0、in2和in3输出各10ns。
3、仿真结果:
4、仿真结果分析:
仿真波形从上到下分别是in0-3、sel和out。in0、in1、in2、in3轮流输出50ns的1,除了输出1的输入在当前时刻其余3个输入全部输出0,在每一个输入1的周期内通过sel轮流选择20ns输出1,选择其他几个输入各自输出10ns,实验结果完全正确。