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 的初始块之前对 xy 中的变化做出反应。