我在 verilog 上做 mux 4:1,但输出不是预期的
I am doing a mux 4:1 on verilog, but the output is not the expeted
我在 Internet 上看到了一些关于 verilog 上的多路复用器 4:1 的示例。我试图做一些事情,但输出不是预期的。这是来源:
module mux41 (a, b, c, d,select,z);
input a,b,c,d;
input [1:0]select;
output reg z;
always@(select )
begin
case (select)
2'b00: assign z=a;
2'b01: assign z=b;
2'b10: assign z=c;
2'b11: assign z=d;
endcase
end
endmodule
这是测试平台:
module mux41_tb;
reg at,bt,ct,dt;
reg [1:0] selectt;
wire zt;
mux41 test(.a(at),.b(bt),.c(ct),.d(dt),.select(selectt),
.z(zt));
initial
begin
$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
"d=%b","select=%b",selectt,"z=%z",zt);
selectt =2'b00;
#5
selectt =2'b01;
#5
selectt =2'b10;
#5
selectt =2'b11;
#5;
end
endmodule
但输出如下:
我的问题是我应该在两个代码(源代码和测试平台)中尝试什么。
真诚的,
NIN.
你得到
a=xb=xc=x
因为您从未给 a、b 或 c 任何值。例如,您将 z
分配给 a
,但是 a
没有值,因为 at
没有值,所以您只是得到 x。
至于
d = 0111...
是因为你的监控线
$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
"d=%b","select=%b",selectt,"z=%z",zt);
你忘了dt
$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
"d=%b",dt,"select=%b",selectt,"z=%z",zt);
我在 Internet 上看到了一些关于 verilog 上的多路复用器 4:1 的示例。我试图做一些事情,但输出不是预期的。这是来源:
module mux41 (a, b, c, d,select,z);
input a,b,c,d;
input [1:0]select;
output reg z;
always@(select )
begin
case (select)
2'b00: assign z=a;
2'b01: assign z=b;
2'b10: assign z=c;
2'b11: assign z=d;
endcase
end
endmodule
这是测试平台:
module mux41_tb;
reg at,bt,ct,dt;
reg [1:0] selectt;
wire zt;
mux41 test(.a(at),.b(bt),.c(ct),.d(dt),.select(selectt),
.z(zt));
initial
begin
$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
"d=%b","select=%b",selectt,"z=%z",zt);
selectt =2'b00;
#5
selectt =2'b01;
#5
selectt =2'b10;
#5
selectt =2'b11;
#5;
end
endmodule
但输出如下:
我的问题是我应该在两个代码(源代码和测试平台)中尝试什么。
真诚的, NIN.
你得到
a=xb=xc=x
因为您从未给 a、b 或 c 任何值。例如,您将 z
分配给 a
,但是 a
没有值,因为 at
没有值,所以您只是得到 x。
至于
d = 0111...
是因为你的监控线
$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
"d=%b","select=%b",selectt,"z=%z",zt);
你忘了dt
$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
"d=%b",dt,"select=%b",selectt,"z=%z",zt);