【问题标题】:Exporting tasks to 'C using DPI使用 DPI 将任务导出到“C”
【发布时间】:2010-10-17 23:47:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • C 前面的撇号是怎么回事?那是一种不同于 C 的语言吗?

标签: verilog hardware system-verilog verification system-verilog-dpi


【解决方案1】:

其实我是这样想的。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 给定的链接无效。
    • 呃……IC Journal好像已经不存在了。以下是它的工作原理概述的链接,但它相当高级:eejournal.com/article/20080826_vmm 如果我能在任何地方找到发布的原始文章,我会回来并在此处留下链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多