0

我在 SV 中有一个循环fork-join_none块,它有两个线程。forever一个线程是对 SV 本身的任务的调用。另一个线程是对从 CPP 导入的函数的调用。是否可以并行运行这两个线程?

我试过了,但是一旦调用 CPP 函数,控制就不会返回到 SV 端,从而导致 SV 中的另一个线程无法工作。

如何并行运行这两个???

4

2 回答 2

1

Afunction不消耗仿真时间。在 SystemVerilog 中,为了让线程并行运行,两者都需要在某个时候阻塞以允许另一个线程运行。

使用 DPI 时,C/C++ 代码没有耗时的概念。您需要将您的 cpp 代码作为任务导入,然后在某些时候它需要调用导出的 SystemVerilog 任务来阻止。因此可以使用 DPI 在 C 中实现并行性,将导出的任务调用到 SystemVerilog。然而,时间的概念在 HDL 和 C 世界中是非常不同的。请参阅我的 DVCon 论文Easy Steps Towards Virtual Prototyping using the SystemVerilog DPI,其中讨论了两个域之间跟踪时间的一些问题。

于 2018-08-27T15:44:30.557 回答
0

简短的回答是:不。Verilog 仅支持单线程仿真模型。Verilog 线程从不并行运行。所以,你不能这样做。

只要您在 ac/c++ 调用 (dpi) 中,没有什么可以阻止您使用并行线程,但是您不应该尝试在没有适当同步的情况下从并行线程调用任何导出的 verilog 函数,特别是从分离的线程。模拟引擎很可能不是线程安全的。

于 2018-08-27T13:23:33.037 回答