【问题标题】:How do I execute SystemVerilog code at garbage collection?如何在垃圾收集时执行 SystemVerilog 代码?
【发布时间】:2019-05-16 07:09:17
【问题描述】:

我有一个使用 chandle 和 DPI 封装 C++ 类的 SystemVerilog 类。我想确保在销毁 SystemVerilog 对象时调用 C++ 类的析构函数。据我所知,这不是自动完成的,当我认为不再需要该实例时,我必须通过 DPI 手动调用 C++ 析构函数。不是很优雅。

有没有办法指定在 GC 时应该为 SV 类运行某些代码?类似于 Java 的 finalize 方法。

【问题讨论】:

  • 一个有趣的问题。我从来没有听说过这样的事情。我认为您将不得不手动执行此操作。或者可能是半自动的:你能有一个线程来检查空引用并在检测到空引用时调用析构函数吗?

标签: system-verilog system-verilog-dpi


【解决方案1】:

SystemVerilog 中没有类似于finalize 的构造。但是,您可以在句柄上注册一个 VPI 回调 (cbReclaimObj)。请参阅 1800-2017 LRM 的第 38.36.1 节。

【讨论】:

  • 这仅在您想安排一些 C/C++ 代码运行时才有效,因为您无法从 VPI 调用 SV。
  • @TudorTimi 我认为这对他们目前所要求的来说很好。
  • 仅供阅读答案并可能考虑在对象被回收时调用 SV 代码的其他人作为注释提及。
  • 一些工具允许在一定的限制内混合使用 VPI 和 DPI。
  • 您知道我的“梦想”,即能够从 VPI 调用任何 SV 函数(甚至是非 DPI 导出的函数),从而能够构建一个真正的反射库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多