我有一个基于 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 的东西发挥作用时停止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top