Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 系统Verilog DPI-运行并行线程,一个在cpp中,另一个在SV中_C++_Parallel Processing_System Verilog_Dpi_System Verilog Dpi - Fatal编程技术网

C++ 系统Verilog DPI-运行并行线程,一个在cpp中,另一个在SV中

C++ 系统Verilog DPI-运行并行线程,一个在cpp中,另一个在SV中,c++,parallel-processing,system-verilog,dpi,system-verilog-dpi,C++,Parallel Processing,System Verilog,Dpi,System Verilog Dpi,我在SV中的fork-join\u none块中有一个fork-join循环,它有两个线程。一个线程是对SV本身中的任务的调用。另一个线程是对从CPP导入的函数的调用。可以并行运行这两个线程吗 我试过了,但是一旦CPP函数被调用,控制就不会返回到SV端,使得SV中的另一个线程无法工作 如何并行运行这两个???简短的回答是:不。 Verilog仅支持单线程仿真模型。Verilog线程从不并行运行。所以,你不能这样做 没有什么可以阻止您在c/c++调用(dpi)中立即使用并行线程,但是如果没有正确的

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

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

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

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


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

A
函数不消耗模拟时间。在SystemVerilog中,为了让线程并行运行,两个线程都需要在某个点阻塞以允许另一个线程运行

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