使用 DPI 将任务导出到 'C
-
05-09-2019 - |
题
我有一个基于 verilog 的测试平台,使用 DPI 连接到“C 源”。现在我计划使用 DPI 编写整个固件。为此,我需要 3 件事
- 寄存器读取
- 寄存器写入
- 中断处理程序 据我了解,寄存器读取和写入是我需要从 RTL 测试台导出的任务。和中断处理程序(我通过从“C”导入函数来实现)。
我检查了大部分 cadence 文档,没有发现有用的提示。我也已在 cadence 用户社区注册,但在他们批准我的注册之前,我似乎无法提出问题。
万一有人知道这一点,将不胜感激他们的帮助。
解决方案
其实我想出了这样的事情。
//--From RTL ---
export "DPI" task reg_read;
task reg_read;
input int nAddr;
output int nVal;
// -- read implementation --
endtask
// -- From C code
extern void reg_read (int nAddr, int *pVal);
void test_read (void)
{
int nRegVal;
// Dummy checking !!
reg_read (0x100, &nRegVal);
}
// -- Again in RTL --
import "DPI" context task test_read ();
这对我使用 ncverilog 有用。
其他提示
酷...我实际上写了一篇关于这个主题的文章。 关联
该论文实际上是通过 DPI 导出寄存器读取和写入等内容,然后向其中添加 TCL 解释器,以便您可以使用 TCL 来控制您的 sim。这是实验室人员喜欢的东西,因为他们所有的工具都已经在 Tcl 中了。
您只需按照说明将 DPI 上从 C 到 SV 的函数调用集成起来,然后在 TCL 的东西发挥作用时停止。
不隶属于 StackOverflow