为什么 4 位多路复用器测试平台代码给出 x?
Why does 4-bit mux test bench code give x?
我不知道为什么它不起作用。我 运行 在 edaplayground
上进行模拟,每次 select 更改为 0 时,我都会在输出中得到一个 "x"。当 sel 为“1”时,我正确地得到“1” " 虽然。
代码:
module mux8_2(input [3:0]a,[3:0]b,sel,output [3:0]out);
assign out=(sel)?a:b;
endmodule
和测试平台:
module mux8_2_tb;
reg [3:0]A;
reg [3:0]B;
reg SEL;
wire [3:0]OUT;
mux8_2 UUT(A,B,SEL,OUT);
initial
begin
$dumpfile("dump.vcd");
$dumpvars(1);
A=4'b1; B=4'b0; SEL=1'b1;
#1 SEL=1'b0;
#1 SEL=1'b1;
#1 SEL=1'b0;
#1 SEL=1'b1;
#1 SEL=1'b0;
#1 SEL=1'b1;
#1;
end
endmodule
我无法重现你的结果; OUT
信号总是为我所知。
但是,我确实收到编译警告:
The following 1-bit expression is connected to 4-bit port "sel" of module
"mux8_2", instance "UUT"
这可以解决:
module mux8_2(input [3:0]a,[3:0]b, input sel,output [3:0]out);
在您的代码中 sel
继承了前一个信号 ([3:0]b
) 的宽度。您的代码相当于:
module mux8_2(input [3:0]a,[3:0]b,[3:0]sel,output [3:0]out);
在 sel
之前添加另一个 input
关键字强制它使用 1 位的默认宽度。
我不知道为什么它不起作用。我 运行 在 edaplayground
上进行模拟,每次 select 更改为 0 时,我都会在输出中得到一个 "x"。当 sel 为“1”时,我正确地得到“1” " 虽然。
代码:
module mux8_2(input [3:0]a,[3:0]b,sel,output [3:0]out);
assign out=(sel)?a:b;
endmodule
和测试平台:
module mux8_2_tb;
reg [3:0]A;
reg [3:0]B;
reg SEL;
wire [3:0]OUT;
mux8_2 UUT(A,B,SEL,OUT);
initial
begin
$dumpfile("dump.vcd");
$dumpvars(1);
A=4'b1; B=4'b0; SEL=1'b1;
#1 SEL=1'b0;
#1 SEL=1'b1;
#1 SEL=1'b0;
#1 SEL=1'b1;
#1 SEL=1'b0;
#1 SEL=1'b1;
#1;
end
endmodule
我无法重现你的结果; OUT
信号总是为我所知。
但是,我确实收到编译警告:
The following 1-bit expression is connected to 4-bit port "sel" of module
"mux8_2", instance "UUT"
这可以解决:
module mux8_2(input [3:0]a,[3:0]b, input sel,output [3:0]out);
在您的代码中 sel
继承了前一个信号 ([3:0]b
) 的宽度。您的代码相当于:
module mux8_2(input [3:0]a,[3:0]b,[3:0]sel,output [3:0]out);
在 sel
之前添加另一个 input
关键字强制它使用 1 位的默认宽度。