使用 DPI 将任务导出到 'C

发布于 2024-07-16 17:34:24 字数 322 浏览 12 评论 0原文

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

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

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

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

I have an verilog based test-bench, interfaced to 'C source using DPI. Now using DPI I am planning to write my whole firmware. To do this I need 3 things

  • Register Read
  • Register Write
  • Interrupt handler
    As I understand, register reads and writes are tasks that I need to export from the RTL test-bench. And Interrupt handler (I implemented by importing a function from 'C).

I checked most the cadence documentation and found no useful hints.
I have also registered with cadence users community but it seems that I cannot ask question till they approve my registration.

Just in case someone is aware of this, would appreciate their help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

锦欢 2024-07-23 17:34:24

其实我想出了这样的事情。

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

Actually I figured it out something like this.

//--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 ();

This works for me using ncverilog.

你げ笑在眉眼 2024-07-23 17:34:24

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

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

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

Cool...I actually wrote an article on this topic. link

The paper is actually exporting register reads and writes and stuff across the DPI and then adding a TCL interpreter to it so that you can use TCL to control your sim. This was something the lab dudes loved since all their tools are already in Tcl.

You can just follow the instructions to integrate your function calls from C to SV across the DPI, and then stop when the TCL stuff comes into play.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文