tf_nodeinfo 已被 IEEE 弃用

tf_nodeinfo has been deprecated by IEEE

我想使用多年前使用 PLI 1.0 开发的 PLI 例程。 它以前工作得很好。但是当我尝试 运行 使用较新版本的 ModelSim Verilog 模拟器时,我收到以下错误消息:

# ** Warning: (vsim-8668) tf_nodeinfo has been deprecated by IEEE. Although still partially supported, memoryval_p will always be set to a a null pointer.
# : PDK_top.v(102)

因为 PLI 例程正在使用 tf_nodeinfo 并且模拟失败。 我试图弄清楚如何解决这个问题,但我找不到任何推荐的方法来替换过时的 tf_nodeinfo。

谁能给我一个应对这种情况的策略? PLI例程的所有源代码都可用。

此外,我很好奇为什么 IEEE 决定放弃 tf_nodeinfo。

PLI 1.0 很旧(根据 LRM,它自 1980 年代中期以来一直存在),它在 IEEE Std 1364-2005 § 1.6 中被贬值 已弃用的条款:

IEEE Std 1364-2005 deprecates the Verilog PLI TF and ACC routines that were contained in previous versions of this standard. These routines were described in Clause 21 through Clause 25, Annex E, and Annex F. The text of these clauses and annexes have been removed from this version of the standard. The text of these deprecated clauses and annexes can be found in IEEE Std 1364-2001.

我找不到任何关于它从 LRM 中删除的原因的说明。最佳猜测是:

  • 可能是旧的 tf_acc_ 例程无法与 SystemVerilog 进行比较。 IEEE Std 1800-2005 中没有提到 tf_acc_ 例程,但有 vpi_ 例程。 IEEE 已经在计划合并这两个标准(并在 IEEE Std 1800-2009 中做了)。
  • 也可能是因为与 VPI 相比,它的性能显着降低或额外开销。 VPI 在 IEEE 标准 1364-2001(§ 20、26 和 27)中引入,通常被称为 PLI 2.0(但 LRM 表示:"Verilog Procedural Interface routines, called VPI routines, are the third generation of the PLI")。 VPI依然坚挺;它仍然比 DPI 有更多的开销,但功能不完全重叠。

您的选择:

  • 使用较旧的模拟器(目前可能可以,但在某些时候您需要升级)
  • 寻找另一个仍然支持它的模拟器(但它可能会在未来的版本中被删除)
  • 重写以下功能:
    1. SystemVerilog IEEE Std 1800-2012
      • 类、多教派队列和关联数组、结构和接口)
      • 可以做的事情真是太神奇了
    2. DPI(IEEE Std 1800-2012 § 35)
    3. VPI(IEEE Std 1800-2012 § 36)
      • vpi_get_data/vpi_put_data 可能是您的 tf_nodeinfo 替代品,等待操作对其进行处理。