问题标签 [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 投票
3 回答
1389 浏览

c - 在 SystemVerilog+C DPI 调用的情况下,如何堆栈跟踪信息?

我有一种情况,我有 2 个 C 函数。这些 C 函数有许多错误检查场景,我使用 exit(1) 来逃避。系统 verilog 代码中的一百万个位置通过 DPI 调用调用这 2 个 C 函数。

我在我的 C 例程中使用了 execinfo.h 和 backtrace() 函数,但堆栈跟踪信息显示了 C 函数,但在此之上它只显示了一些随机 vcs_exe.sim.1234_1.so 作为主调用程序函数。

我什至尝试在已发布区域中查找此 vcs_exe.sim.1234.so,但它不指向任何已知的 Sv 文件。

那么,在显示堆栈跟踪时如何获取调用方非 C/SV 函数?

0 投票
2 回答
3133 浏览

c - 在 DPI-C 中,内部变量要使用哪些数据类型?

我在 EDA Playground 的 VCS 中使用 DPI-C 的以下代码没有得到正确的输出。我希望 6 作为答案,但无论 a 和 b 值如何,我每次都会得到 248。我尝试使用 svLogic、int 和 unsigned char 作为 helloFromC.c 中 a_int 的数据类型。

这是我的 C 程序

我得到输出

0 投票
1 回答
793 浏览

c++ - 使用 DPI 从 C++ 函数中的 SV 读取值时出错

我正在尝试将字符串从 SV 传递给 C++ 函数,但该值没有正确传递给 C++ 函数

SV端代码:

这就是我向 C++ 发送价值的方式。在 C++ 方面,我将价值视为:

当我单独运行 C++ prog 时,我得到了正确的输出。但在控制台我得到以下输出:

sha256(''):e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

有人可以建议我哪里出错了或者我错过了什么吗?

0 投票
2 回答
975 浏览

verilog - 在 SV/UVM 中强制设计多条导线

我是 System Verilog 和 UVM 的新手,我已经看过这个帖子:

SV 或 UVM 中的正则表达式

我在任何地方都找不到合适的例子,说明我应该使用哪种语法来强制设计中的多条线路,使用正则表达式/通配符。

例如:

假设我有一个名为 my_fifo 的模块,它在设计中被多次实例化:

并且块 my_fifo 包含一条名为:

我想在所有以“my_fifo”开头的情况下强制使用该线。类似的东西(请原谅我的语法,它只是为了澄清我的意图):

在上述所有情况下,它都会将该线设为 1。

0 投票
2 回答
778 浏览

system-verilog - 实例化模块的导出任务

我正在尝试通过 DPI-C 将几个任务导出到 C 程序。这些任务在模块“my_subm”中定义为:

在我的主模块“main_mod”中,“my_subm”被实例化:

其中“dpic_exports.svh”是:

尝试编译它时,我收到一条错误消息,指出在“dpic_exports.svh”中,my_subm_i 是分层名称的非法位置。

我究竟做错了什么?

我需要的是这些任务在“main_mod”的范围内可用,因为将访问它们的 C 任务是从该模块调用的。

0 投票
1 回答
1235 浏览

c - 无法访问 svOpenArrayHandle 的维度

我的 SystemVerilog 测试平台中有一个多维动态解包数组,并使用 DPI-C 将其作为参数传递到 C 代码中。我正在使用 Questasim 10.4b。按照 Questa 的流程,我运行 -dpiheader 来生成头文件并将其包含在我的 C 代码中。

SystemVerilog:

这是我的 C 代码:

我得到的打印输出:

我不明白如何获得子数组的尺寸?

奇怪的是,我可以svGetArrElemPtr2用来访问整个数组的元素。我只是不知道尺寸是多少。此时,我的解决方法是将另一个 int 数组传递到包含子数组维度的 C 代码中。

0 投票
1 回答
1796 浏览

c - 在 DPI-C 中将开放数组作为形式参数输出

我有可以生成可变长度数组作为其结果的 C 代码(预测模型)。在调用 C 代码之前不知道这个数组的大小是多少,并且涉及到一些随机化(噪声建模)

我需要从 SystemVerilog 调用这个 C 预测器模型,并取回输出结果数组。

作为 DPI-C 的新手,我遇到了 3 个限制:

  1. SV 端的结果数组需要在调用 C 代码之前分配。因为我不知道大小会是多少,所以我有可能过度分配或分配不足。
  2. 我无法在导出函数中从 C -> SV 传递一个开放数组。
  3. 导出函数不能用于类方法(!)

为了解决这个问题,我在 2 个接口和全局变量/任务之间创建了一个 hacky 杂耍。

我已经发布了我的解决方案,它运行良好,但我想知道是否有人有比这更优雅的解决方案。我特别不喜欢使用全局变量。

SV:

C:

欢迎任何更好的解决方案。

0 投票
2 回答
649 浏览

system-verilog - 是否可以在 VPI 回调中调用导出函数

我有以下情况:我有一个在触发断言时触发的 vpi 回调。在这个回调中,我想调用一个导出系统verilog函数,我试图在导出之前设置SvScope,但模拟器给了我一些错误。

0 投票
1 回答
2580 浏览

system-verilog - 通过 SystemVerilog DPI-C 层传递 C 结构

SystemVerilog LRM 有一些示例展示了如何通过 DPI-C 层将 SystemVerilog 中的结构传递给\from C。但是,当我尝试自己的示例时,它似乎在 Incisive 或 Vivado 模拟器中根本不起作用(它在 ModelSim 中确实起作用)。我想知道我是否做错了什么,或者这是否是模拟器的问题。我的例子如下:

我将上面的代码编译成一个共享库:

和 SystemVerilog 代码:

在 Incisive 中,我使用 irun 运行它:

但它是 SegV 的。

在 Vivado 中,我使用

它运行良好,直到退出模拟,然后出现内存损坏:

0 投票
2 回答
1028 浏览

c++ - System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行其他线程

我在 SV 中有一个循环fork-join_none块,它有两个线程。forever一个线程是对 SV 本身的任务的调用。另一个线程是对从 CPP 导入的函数的调用。是否可以并行运行这两个线程?

我试过了,但是一旦调用 CPP 函数,控制就不会返回到 SV 端,从而导致 SV 中的另一个线程无法工作。

如何并行运行这两个???