C++ 系统Verilog DPI-运行并行线程,一个在cpp中,另一个在SV中
我在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)中立即使用并行线程,但是如果没有正确的
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论文,其中讨论了跟踪两个域之间时间的一些问题