【问题标题】:'last_event VHDL equivalent in verilog'last_event VHDL 等效于 verilog
【发布时间】:2014-12-04 15:20:34
【问题描述】:

我在 Verilog 中搜索与 VHDL 属性 my_signal'last_event 等效的 verilog。我用谷歌搜索它没有成功。有人知道怎么做吗?

'last_event 属性用于了解自信号上次事件以来的时间。 例如,如果在 15us 时间,信号 toto 从 0 变为 1。 然后在 20us 时,toto'last_event 返回 5us。

【问题讨论】:

  • 尝试从一种语言翻译成另一种语言时,通常有助于对您正在尝试做的事情有一个更大的了解。例如,Verilog 具有 VHDL 所没有的内置时序检查,这可能会消除这样做的需要。
  • @dave_59,是的,我知道我以前用 VHDL 编写测试的方式对 verilog 来说效率不高。我已经更改了这个测试以避免搜索最后一个事件时间。
  • @dave_59,“Verilog 内置时序检查”功能是否these one

标签: vhdl verilog


【解决方案1】:

您是否尝试过查看某些 verilog 系统任务?具体如下:

$time;                            // Return current simulation time in 64-bit integer 

$monitor("format", v1, v2, ...);  // Invoke only once, and execute (
                                  //   automatically when any of the
                                  //   variables change value. 

您可以在http://www.asic-world.com/verilog/vbehave2.html 此处查看“嵌套如果-else-if”示例,了解使用这些的测试台示例。

【讨论】:

  • 我不知道这个“监控”功能。似乎对调试有用,但这不是我想要的。它将一些信息打印到成绩单中,但时间值在工作台中不可用。
【解决方案2】:

您可以创建一个时间变量并在信号发生变化时对其进行更新

time my_signal_last_change;

always @(my_signal) begin
    my_signal_last_change = $time;
end

这适用于 SystemVerilog;不确定它是否会在 verilog 中(您可以尝试将时间更改为 reg[63:0] 以防万一)

【讨论】:

  • 这在所有情况下都有效,但是如果您检查“my_signal_last_change”值并且您希望与检查时间完全相同,那么取决于进行检查的 Modelsim 的 Delta,可能“my_signal_last_change”尚未更新。
  • time 更改为realtime$time 更改为$realtime。 $time 是一个整数,限制为 ``` `timescale ``` 的精度,其中 $realtime 是一个浮点数,包含小数信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多