verilog语言的八路选择器
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
module mux8_to_1(out,i1,i2,i3,i4,i5,i6,i7,i8,s0,s1,s2);
input[3:0]i1,i2,i3,i4,i5,i6,i7,i8;
input s0,s1,s2;
output out;
reg[3:0] out;
always @(i1 or i2 or i3 or i4 ori5 or i6 or i7 or i8 or s0 or s1 or s2)
begin
case({s2,s1,s0})
3'b000: out=i1;
3'b001: out=i2;
3'b010: out=i3;
3'b011: out=i4;
3'b100: out=i5;
3'b101: out=i6;
3'b110: out=i7;
3'b111: out=i8;
default: out=3'bx;
endcase
end
endmodule
测试程序
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
module test_8;
// Inputs
reg [3:0] i1;
reg [3:0] i2;
reg [3:0] i3;
reg [3:0] i4;
reg [3:0] i5;
reg [3:0] i6;
reg [3:0] i7;
reg [3:0] i8;
reg s0;
reg s1;
reg s2;
// Outputs
wire [3:0] out;
// Instantiate the Unit UnderTest (UUT)
mux8_to_1 uut (
.out(out),
.i1(i1),
.i2(i2),
.i3(i3),
.i4(i4),
.i5(i5),
.i6(i6),
.i7(i7),
.i8(i8),
.s0(s0),
.s1(s1),
.s2(s2)
);
initial begin
// Initialize Inputs
i1 = 0;
i2 = 0;
i3 = 0;
i4 = 0;
i5 = 0;
i6 = 0;
i7 = 0;
i8 = 0;
s0 = 0;
s1 = 0;
s2 = 0;
// Wait 100 ns for globalreset to finish
#100;
#20 i1 = 4'b0001;
i2 = 0;
i3 = 0;
i4 = 0;
i5 = 0;
i6 = 0;
i7 = 0;
i8 = 0;
s0 = 0;
s1 = 0;
s2 = 0;
#20 i1 = 0;
i2 = 4'b0011;
i3 = 0;
i4 = 0;
i5 = 0;
i6 = 0;
i7 = 0;
i8 = 0;
s0 = 1;
s1 = 0;
s2 = 0;
#20 i1 = 0;
i2 = 0;
i3 = 4'b0101;
i4 = 0;
i5 = 0;
i6 = 0;
i7 = 0;
i8 = 0;
s0 = 0;
s1 = 1;
s2 = 0;
#20 i1 = 0;
i2 = 0;
i3 = 0;
i4 = 4'b0111;
i5 = 0;
i6 = 0;
i7 = 0;
i8 = 0;
s0 = 1;
s1 = 1;
s2 = 0;
#20i1 = 0;
i2 = 0;
i3 = 0;
i4 = 0;
i5 = 4'b0111;
i6 = 0;
i7 = 0;
i8 = 0;
s0 = 0;
s1 = 0;
s2 = 1;
#20i1 = 0;
i2 = 0;
i3 = 0;
i4 = 0;
i5 = 0;
i6 = 4'b1010;
i7 = 0;
i8 = 0;
s0 = 1;
s1 = 0;
s2 = 1;
#20 i1 = 0;
i2 = 0;
i3 = 0;
i4 = 0;
i5 = 0;
i6 = 0;
i7 = 4'b0101;
i8 = 0;
s0 = 0;
s1 = 1;
s2 = 1;
#20 i1 = 0;
i2 = 0;
i3 = 0;
i4 = 0;
i5 = 0;
i6 = 0;
i7 = 0;
i8 = 4'b1000;
s0 = 1;
s1 = 1;
s2 = 1;
// Add stimulus here
end
endmodule