verilog和模块输出z' s

时间:2015-10-08 00:13:23

标签: bit-manipulation verilog

我试图将参数和模块与两个数字组合在一起并返回结果。但是,我似乎遇到了麻烦。我的代码如下:

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);

它似乎显示得很好。

任何建议?欢呼声

2 个答案:

答案 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 语句在assignx的初始块之前没有时间对y$display中的更改作出反应}。

答案 1 :(得分:1)

如果您想要确定性输出,请在$display

之前添加一些延迟
   initial begin
       x = 4'b0111;
       y = 4'b1110;
       #1;
       $display("%b", out1);
       $finish;
   end

这会打印0110