verilog VPI 回调

Posted

技术标签:

【中文标题】verilog VPI 回调【英文标题】:verilog VPI Call Back 【发布时间】:2011-10-26 14:13:23 【问题描述】:

VPI 回调cbValueChange 应该做什么以及它是如何工作的?

假设我想在信号的posedge 处执行一个函数 X(大约 2000 个周期)。我应该使用回调cbValueChange 还是从测试台调用代码?

always @posedge(X) 
begin 
    $pli 
end 

哪个更有效?

【问题讨论】:

你用的是什么模拟器? 【参考方案1】:

效率方面可能并不重要。如果没有更好地了解您的情况,很难给出可靠的建议,但我建议像您的示例一样使用 $pli 调用。使用 cbValueChange 意味着注册一些 C 代码,以便在变量的值更改时由模拟器执行。这发生在值更改时没有调用用户定义的 $pli 例程。由于这对于任何阅读 Verilog 代码的人来说是完全不可见的,如果您的 C 代码做出任何影响模拟的更改,您将让任何试图了解正在发生的事情的人感到沮丧。

【讨论】:

【参考方案2】:

cbValueChange 是用于通过vpi_register_cb() 注册/接收已注册信号的值更改事件的原因。因此,当信号值翻转或改变时,模拟器将在适当的模拟阶段调用回调函数。如果您只想调用自己的 PLI/VPI 函数,可以查看http://www.asic-world.com/verilog/pli5.html 中的详细示例

【讨论】:

以上是关于verilog VPI 回调的主要内容,如果未能解决你的问题,请参考以下文章

在 Verilog 模拟器和 VPI 代码中使用 make 的最佳实践是啥

使用 Verilator 和 VPI 读取 regs 数组

SV通过DPI调用C

verilog报错

verilog比vhdl的优势是啥?

verilog如何给数组赋值