通过DPI在SystemVerilog中调用SystemC事务级函数时出错
时间:10-02
整理:3721RD
点击:
小弟初学验证,项目要求用UVM验证一个SystemC事务级建模的模块,这个模块里有读写两个函数,其中写函数中包含wait()函数。
我决定先解决通信问题再搭建UVM,于是写了个简单的SV Testbench,并用Modelsim的DPI接口将SC的函数导过来进行调用,两个函数如下:
import "DPI-SC" context function void top_write_byte (input int unsigned address, input byte unsigned data);
import "DPI-SC" context function byte unsigned top_read_byte (input int unsigned address);
但仿真时modelsim出现报错(Code 222)并立即退出,提示原因:wait()只能在SC_THREAD中调用,在SC_METHODS中调用将出错。
1. 我分析是仿真工具将SV的testbench认为是方法而非线程,因此尝试在SV中使用fork-join语句、建立任务,但都没有作用,请问各位大侠是否有办法解决?
2. Mentor推出了支持SC与SV的TLM通信的库UVM Connect,但不支持个人下载,请问我是否应该直接用这个库实现通信?难度如何
我决定先解决通信问题再搭建UVM,于是写了个简单的SV Testbench,并用Modelsim的DPI接口将SC的函数导过来进行调用,两个函数如下:
import "DPI-SC" context function void top_write_byte (input int unsigned address, input byte unsigned data);
import "DPI-SC" context function byte unsigned top_read_byte (input int unsigned address);
但仿真时modelsim出现报错(Code 222)并立即退出,提示原因:wait()只能在SC_THREAD中调用,在SC_METHODS中调用将出错。
1. 我分析是仿真工具将SV的testbench认为是方法而非线程,因此尝试在SV中使用fork-join语句、建立任务,但都没有作用,请问各位大侠是否有办法解决?
2. Mentor推出了支持SC与SV的TLM通信的库UVM Connect,但不支持个人下载,请问我是否应该直接用这个库实现通信?难度如何
SC的LRM里面提到过wait 只能现在线程进程SC_THREAD SC_CTHEREAD 里面使用,我之前也遇到过这个问题,你分析的第一条是不对的工具在执行SC函数的时候发wait语句 不是在线程进程里面调用提示的
解决方法是 将wait从SC的函数里面去除 在SV调用 top_write_byte 的里面 SC module里面将SV传递的transction保存起来到FIFO,然后trigger一个event,SC里面create一个进程监测event 然后driver 这个transaction