【问题标题】:How to compile and run a verilog program which calls C function?如何编译和运行调用C函数的verilog程序?
【发布时间】:2015-11-08 22:25:08
【问题描述】:

我不是在尝试使用 DPI 调用,而是一个简单的 Verilog 程序,它在内部使用其 PLI 来调用用 C 语言编写的函数。我不知道静态链接。我正在使用edaplayground。

谁能告诉我应该使用哪个模拟器,应该切换到链接 Verilog 和 C 吗?我应该在 Verilog 中包含 C 文件吗?

示例代码如下

// C function implementation
#include <stdio.h>  
void hello() {
   printf ("\nHello world\n");
 }

// SV function call
module sv_pli ();

  initial begin
    $hello;
     #10  $finish;
  end

 endmodule

我想知道是否需要注册 pli,因为目前未检测到 pli call hello。

【问题讨论】:

  • Verilog 不是编程语言。
  • @Olaf:Verilog 是一种模拟语言,在模拟过程中可以像在编程语言中一样调用函数。如果您还记得 Verilog 不仅仅是一种硬件描述语言,这并不是一个奇怪的问题。
  • @Mehrdad:它是一种硬件描述语言,类似于 VHDL。功能仍然描述硬件。 OP 可能指的是 System-Verilog(如标签所示,但这不是 Verilog,因为他的标题和文本状态。无论如何,问题显然是 OT。
  • @Olaf:它既是一种硬件描述语言,也是一种帮助模拟所描述硬件的语言。语言中只有一部分用于描述实际可以合成的硬件。其余的用于模拟,可以包含对 PLI 的调用,可以用 C 编写。
  • 恰恰相反 - DPI 运行速度比等效的 VPI 快得多。如果你坚持传递 C 兼容类型(int byte 和这些类型的数组),它可能会快几个数量级。

标签: c verilog system-verilog system-verilog-dpi edaplayground


【解决方案1】:

我将您的 C 代码放在一个名为 test.c 的新文件中,并将 SV-DPI 添加到您的 Verilog 代码中,从 $hello 任务中删除美元符号以成为 DPI 调用。

查看模拟器输出,它应该是示例代码的预期结果。

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多