计算verilog事件之间的时间

时间:2014-12-18 14:10:10

标签: verilog

我想捕捉事件之间的时间。然后我必须将此值用于另一个事件。 我的问题是我的程序中time_2的单位是多少。我如何在if循环中使用此值。我认为这个值不是实际值。

`timescale 1ns / 1ps

module time_control( input clk  );
  reg [7:0] memory [0:15] ;
  integer k=0;

  realtime time_1 =0;
  realtime time_2 =0;

  always @ ( posedge clk)
  begin 

    time_2=time_1 ;
    time_1 = $realtime ;

     if( time_2 < 500) //Comparison Not working
     begin 
       memory[k] <=k;
       k         <=k+1 ;
     end     

  end
endmodule

在启动中的编程部分不起作用。我的问题是使用tine_2的值,我可以填补内存。只要time_2的值大于500 ns,它就不应该将值放在内存中。我不想存储时间的价值。

这仅用于模拟。

1 个答案:

答案 0 :(得分:1)

如果您的数组要存储实时,或者基于实时的时间差异,则需要使用适当的类型。

reg [7:0] memory [0:15] ;

应该是

realtime memory [0:15];

为了比较时间,请使用时间:

if( time_2 < 500) begin

成为:

if( time_2 < 500ns ) begin

注意:第一个版本对我来说很好,因为默认的时间单位通常是'ns',或者使用`timescale指定为'ns'。

你的例子将成为:

module time_control( input clk  );
  realtime memory [0:15] ;
  integer k=0;

  realtime time_1 =0;
  realtime time_2 =0;

  always @( posedge clk) begin 
    time_2 = time_1 ;
    time_1 = $realtime ;

    if( time_2 < 500ns ) begin 
      memory[k] <=k;
      k         <=k+1 ;
    end   
  end
endmodule