verilog 和模块输出 z
verilog and module outputs z's
我正在尝试将参数和模块与两个数字组合在一起,然后 return 结果。但是,我似乎遇到了麻烦。我的代码如下:
module main;
reg signed [3:0] x;
reg signed [3:0] y;
wire [3:0] out1;
ander #(.L1(4)) andd(.in1(x), .in2(y), .out(out1));
initial begin
x = 4'b0111;
y = 4'b1110;
$display("%b", out1);
$finish;
end
endmodule
module ander #(parameter L1 = 8)
(input [L1-1:0] in1,
input [L1-1:0] in2,
output wire [L1-1:0] out);
assign out = in2&in1;
endmodule
当我尝试 运行 时,输出是 "zzzz." 我做错了什么吗?
当我把它改成
$display("%b", x&y);
好像显示的还不错
有什么建议吗?干杯
如果您想要确定性输出,请在 $display
:
之前添加一些延迟
initial begin
x = 4'b0111;
y = 4'b1110;
#1;
$display("%b", out1);
$finish;
end
这会打印 0110
.
在 $display
之前添加一点延迟
initial begin
x = 4'b0111;
y = 4'b1110;
#1; // <-- Add a little delay
$display("%b", out1);
$finish;
end
Verilog 一次执行一项操作。在程序块内时,它将执行块内的每个操作,直到它遇到阻塞语句或完成。在你的例子中,assign
语句没有时间在调用 $display
和 $finish
的初始块之前对 x
和 y
中的变化做出反应。
我正在尝试将参数和模块与两个数字组合在一起,然后 return 结果。但是,我似乎遇到了麻烦。我的代码如下:
module main;
reg signed [3:0] x;
reg signed [3:0] y;
wire [3:0] out1;
ander #(.L1(4)) andd(.in1(x), .in2(y), .out(out1));
initial begin
x = 4'b0111;
y = 4'b1110;
$display("%b", out1);
$finish;
end
endmodule
module ander #(parameter L1 = 8)
(input [L1-1:0] in1,
input [L1-1:0] in2,
output wire [L1-1:0] out);
assign out = in2&in1;
endmodule
当我尝试 运行 时,输出是 "zzzz." 我做错了什么吗?
当我把它改成
$display("%b", x&y);
好像显示的还不错
有什么建议吗?干杯
如果您想要确定性输出,请在 $display
:
initial begin
x = 4'b0111;
y = 4'b1110;
#1;
$display("%b", out1);
$finish;
end
这会打印 0110
.
在 $display
initial begin
x = 4'b0111;
y = 4'b1110;
#1; // <-- Add a little delay
$display("%b", out1);
$finish;
end
Verilog 一次执行一项操作。在程序块内时,它将执行块内的每个操作,直到它遇到阻塞语句或完成。在你的例子中,assign
语句没有时间在调用 $display
和 $finish
的初始块之前对 x
和 y
中的变化做出反应。