【发布时间】: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