我有一个基于 verilog 的测试平台,使用 DPI 连接到'C 源代码。现在使用 DPI,我打算编写我的整个固件。为此,我需要三件事
- 注册读取
- 寄存器写
- 中断处理程序 据我了解,寄存器读取和写入是我需要从 RTL 测试台导出的任务。和中断处理程序(我通过从'C导入一个函数来实现)。
我检查了大多数 cadence 文档,没有发现任何有用的提示。我也注册了 cadence 用户社区,但在他们批准我的注册之前,我似乎无法提问。
万一有人知道这一点,将不胜感激他们的帮助。
我有一个基于 verilog 的测试平台,使用 DPI 连接到'C 源代码。现在使用 DPI,我打算编写我的整个固件。为此,我需要三件事
我检查了大多数 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 的东西开始发挥作用时停止。