我试图将参数和模块与两个数字组合在一起并返回结果。但是,我似乎遇到了麻烦。我的代码如下:
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);
它似乎显示得很好。
任何建议?欢呼声
答案 0 :(得分:2)
在int main (void)
{
system("cmd /c start app1");
system("cmd /c start app2");
}
$display
Verilog一次只进行一次操作。当在程序块内部时,它将执行块内的每个操作,直到它到达阻塞语句或结束。在您的情况下,initial begin
x = 4'b0111;
y = 4'b1110;
#1; // <-- Add a little delay
$display("%b", out1);
$finish;
end
语句在assign
和x
的初始块之前没有时间对y
和$display
中的更改作出反应}。
答案 1 :(得分:1)
如果您想要确定性输出,请在$display
:
initial begin
x = 4'b0111;
y = 4'b1110;
#1;
$display("%b", out1);
$finish;
end
这会打印0110
。