6

我有一个基于 verilog 的测试平台,使用 DPI 连接到'C 源代码。现在使用 DPI,我打算编写我的整个固件。为此,我需要三件事

  • 注册读取
  • 寄存器写
  • 中断处理程序 据我了解,寄存器读取和写入是我需要从 RTL 测试台导出的任务。和中断处理程序(我通过从'C导入一个函数来实现)。

我检查了大多数 cadence 文档,没有发现任何有用的提示。我也注册了 cadence 用户社区,但在他们批准我的注册之前,我似乎无法提问。

万一有人知道这一点,将不胜感激他们的帮助。

4

2 回答 2

3

实际上我想出了这样的事情。

//--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。

于 2009-04-08T01:48:46.387 回答
2

酷......我实际上写了一篇关于这个主题的文章。 关联

该论文实际上是通过 DPI 导出寄存器读取和写入等内容,然后向其中添加 TCL 解释器,以便您可以使用 TCL 来控制您的 sim。这是实验室人员喜欢的东西,因为他们所有的工具都已经在 Tcl 中了。

您可以按照说明在 DPI 上集成从 C 到 SV 的函数调用,然后在 TCL 的东西开始发挥作用时停止。

于 2009-10-21T21:09:51.010 回答