问题标签 [system-verilog-dpi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4318 浏览

verilog - 使用 DPI 将任务导出到“C”

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

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

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

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

0 投票
5 回答
26462 浏览

c - 在 C 中未定义的对“main”的引用

嗨,我在使用 gcc 编译 ac 代码时遇到错误

我正在尝试将该fftw()函数导入SystemVerilog。这是我的代码

这是我试图调用 fftw 的系统 Verilog 代码

这是编译 systemverilg 和 C 文件的 irun 命令

运行此命令时会出现以下错误:构建库 run.so ld: /home/fftw/local/lib/libfftw3.a(mapflags.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; 使用 -fPIC /homefftw/local/lib/libfftw3.a 重新编译:无法读取符号:错误值 collect2:ld 返回 1 退出状态 make:* [/home/ss69/DPI/./INCA_libs/irun.lnx8664.12.20。 nc/librun.so] 错误 1 ​​ncsc_run: *E,TBBLDF: 无法构建测试库 /home/DPI/./INCA_libs/irun.lnx8664.12.20.nc/librun.so

irun: *E,CCERR: cc编译时出错(状态1),退出。

当我尝试使用 gcc 使用以下命令编译 C 时:
gcc -g -Wall -Werror -I/home/fftw/local/include -L/home/ss69/fftw/local/lib \ fftw_test_DPI.c -lfftw3 -lm -o fftw_test_DPI

我收到此错误:

/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64/crt1.o:在函数_start': (.text+0x20): undefined reference tomain'collect2:ld返回1退出状态

0 投票
2 回答
2325 浏览

c - 在系统verilog代码中集成fftw C函数调用

我已经在我的 linux 系统上成功安装了 fftw C 库。这是有关 fftw c => http://www.fftw.org/的更多信息我有一个示例 C 代码,可以成功调用 fftw C 函数。下面是一个 C 代码和运行 C 代码的命令: 代码:

我可以使用以下 gcc 命令成功运行此代码: gcc -g -Wall -I/home/usr/fftw/local/include -L/home/usr/fftw/local/lib fftw_test.c -lfftw3 -lm -o fftw_test

现在我想使用 DPI 方法在系统 verilog 中调用这个函数。在我展示我的问题之前,下面是一个我可以成功运行的示例 DPI-C/systemverilog 测试用例:C:code

使用 DPI 从系统 verilog 调用上述 C 函数:

最后我可以使用 irun 命令 irun -f run.f 成功运行它,其中 run.f 包含以下命令:

现在我真正的问题是 当我尝试将 fftw C 与系统 verilog 链接时,我无法运行它。下面是我的 C 代码,它与我发布的第一个 C 代码非常相似:C 代码:

这是我的系统verilog,我在上面调用C函数:

最后我尝试了几种方法,我将提到我尝试的几种方法:第一种方法:

但这会导致以下错误:构建库 run.so ld: /home/usr/fftw/local/lib/libfftw3.a(mapflags.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object ; 使用 -fPIC /home/usr/fftw/local/lib/libfftw3.a 重新编译:无法读取符号:错误值 collect2:ld 返回 1 个退出状态 make:* [/home/usr/DPI/./INCA_libs/irun. lnx8664.12.20.nc/librun.so] 错误 1 ​​ncsc_run: *E,TBBLDF: 无法构建测试库 /home/usr/DPI/./INCA_libs/irun.lnx8664.12.20.nc/librun.so

第二种方法:1.gcc -fPIC -O2 -c -g -I/home/ss69/fftw/local/include -I。-L/home/usr/fftw/local/lib -L. -o fftw_test_DPI.o fftw_test_DPI.c -lfftw3 -lm

2.gcc -shared -o libdpi.so fftw_test_DPI.o

3.irun -64bit -sv_lib libdpi.so fftw_test.sv

这会导致以下错误: Loading snapshot worklib.top:sv .................... Done ncsim> run Entering in SystemVerilog Initial Block

ncsim:符号查找错误:./libdpi.so:未定义符号:fftw_malloc

我知道我的帖子有点难以理解,但我非常感谢任何帮助。

0 投票
1 回答
1138 浏览

system-verilog - System Verilog DPI - 未知数组大小

我有以下代码:

文件.sv

文件

我遇到的问题:我希望“大小”的位向量不是 const 长度(32 位),我希望将未定义的位向量传递给 c 文件。我看到了“svOpenArrayHandle”类型——看起来不错,但我不知道如何在 DPI 导入中声明它:

import "DPI-C" function void my_func(output bit [31:0] id, input bit size[])-> 引发错误:-(

有什么建议吗?

谢谢。

0 投票
2 回答
1137 浏览

ruby - Ruby 和 SystemVerilog DPI

System Verilog 中的 DPI 功能总是提到您可以将其与任何语言交互,最常见的是 C/C++。我想将我的系统 Verilog 代码与 Ruby 接口。是否有任何文档或支持此功能?任何已知的方法来做到这一点?

我应该补充一点,我的主要目标是从我的系统 Verilog uvm 测试中调用一个 ruby​​ 脚本。

谢谢

0 投票
1 回答
1312 浏览

c++ - 如何通过具有 DPI 导入功能的开放数组在 SV 和 C++ 之间双向传递数据

我的目标是用 C++ 填充一个开放数组。阶段如下。1. SV:定义一个大小的解包数组,并在导入函数中通过开放数组发送。2. C++:填充开放数组。3. SV:使用数组。

对于大小解压的数组,没有问题。但在实际情况下,数组大小经常变化,编译后的 C++ 函数每次都必须重新编译。为了避免这种情况,我需要使用一个开放数组,以便 C 函数检查大小并相应地填充数据。

在下文中,简化了来源,仅显示了基本部分。导入函数 svcpp 在 SV 中调用并在 C++ 中执行。参数是开放数组 i[],其句柄在 C++ 端是 h。当我编译 C++ 源代码时,出现错误“错误 LNK1120:未解析的外部”。

问题是什么?

SV端:

C++ 方面:

0 投票
4 回答
11978 浏览

c - SystemVerilog:如何在 VCS 模拟器中使用 DPI 调用连接 C 函数?

我有以下文件:

带有函数的 C 文件:

// 函数.c

系统verilog文件:

// hello_world.v

如何编译它并使其工作,以便当我something()从 SV 调用时,它将调用 C 函数,而当我sayHello()从 C 调用时,它将调用 SV 函数?

0 投票
1 回答
4754 浏览

c - SystemVerilog DPI-C 指针

我对 SystemVerilog 和 C 之间的 DPI 连接有疑问。具体来说,我有一个 C 函数,如下所示:

我想传递给它的是bit[7:0] my_darray[];

最好的方法是什么?提前致谢。

0 投票
2 回答
142 浏览

c - 我可以从系统 Verilog 测试台获得通过 DPI 调用调用的 C 例程的调用图吗

我正在做一个验证项目。某些测试台组件是用 c 编写的,通过 DPI 调用,c 例程很广泛,我很难确定谁调用了哪个例程。一个纯 C 程序可能是我可以使用 cachegrind 来完成这项任务。在这种情况下,它不是 main() 正在执行调用,而是在事件中触发。有什么方法可以让我了解模拟过程中的调用顺序吗?使用 Cadence Incisive 工具。

0 投票
3 回答
3620 浏览

c - 如何使用 DPI-C 嵌入 Systemverilog 解释器?

问题描述

我在 SystemVerilog 中设计并用相同的语言编写测试平台。我希望能够在模拟过程中编译我的设计并测试不同的功能,就像使用带有 e 的解释器一样。理想情况下,当模拟器达到某条线时,我会在模拟时弹出一个终端。

潜在的想法

我查看了 DPI-C,似乎我必须“导出”我项目中的所有任务才能从解释器中运行它们。但是,我不确定如何自动执行此操作,或者是否有更好的方法。此外,我不知道如何让 C 打开第二个 shell 让我输入 SystemVerilog 任务(我想运行)。

这是我的同事提出的一个问题,如果在编译一个测试平台之间不必等待 10 分钟,这会让生活变得不那么痛苦。