以下代码的输出是意外的:

时间:2018-12-19 09:32:36

标签: verilog

我正在尝试显示时间。但是它返回值0。怎么了?

代码:

module hello_world;
integer in_reg;
initial
begin
  in_reg = 3'd2;
  $monitor($time, " In register value = %b\n",in_reg[2:0]);
end
endmodule

输出:

  

0在寄存器值= 010

2 个答案:

答案 0 :(得分:2)

没有错。当$monitor语句输出其行时,模拟时间为0。

我猜您知道,$monitor会在任何输入更改时输出一行。但是,它不会在$ time内执行此操作,因为这样做没有任何意义。 (何时输出一条线?每隔ns?每隔ps?每隔fs?)

因此,您的代码将in_reg设置为3'd2,然后$monitor进行显示。然后模拟完成。什么也没发生。

答案 1 :(得分:0)

尝试一下,下面的代码每10ns会打印10次in_reg内容,模拟时间将显示为10,20,...等

`timecale 1ns/1ps
module hello_world;
integer in_reg;  
initial
begin
  in_reg = 3'd2;
 repeat(10)
 begin
  #10;
  $display($time, " In register value = %b\n",in_reg); 
 end
end
endmodule