用于SystemVerilog与C的直接编程接口
Instructor: EDA Academy
Resource—All LevelChinese
SystemVerilog DPI 通过轻量级的导入和导出子程序连接 SystemVerilog 与 C,涵盖数据映射、类型兼容、context 与 pure function、编译、链接、限制,以及用于可靠跨语言仿真集成的 disable 握手机制。
5.0
2students
This offering includes
- 1 module
- 5 lectures
- Access on mobile and computer
- 1.58 hours on-demand video
Description
SystemVerilog DPI 定义了 SystemVerilog 与 C 之间实用的外部函数接口。它可以把 C 例程导入为 SystemVerilog task 或 function,也可以把指定的 SystemVerilog 子程序导出到 C 全局命名空间。其结果是一种直接的双向调用机制,使用方式类似普通子程序调用,同时允许外部 C 计算和 SystemVerilog 行为在仿真中协同工作。
DPI 建立在严格的接口声明之上。导入例程要求 SystemVerilog 声明与 C 实现在名称、返回类型、参数类型和参数方向上保持匹配。导出例程也要求 SystemVerilog task 或 function 与 C 的 extern 声明之间保持同样的一致性。由于 C 编译器和 SystemVerilog 编译器无法在语言边界上完整通信,正确性取决于准确的原型、兼容的数据类型,以及规范的链接名称管理。
数据类型处理是 DPI 集成的重要组成部分。简单 SystemVerilog 类型可以直接映射到对应 C 类型,而标量 bit 和 logic 值使用 svdpi.h 中定义的 DPI 表示。枚举类型通过其基类型可见,但不携带枚举值名称。packed array 和 packed structure 需要基于向量或依赖实现的处理方式,而由简单类型组成的 unpacked array、structure 和 union 可以更自然地映射到 C 聚合类型。这些规则决定了哪些接口更具可移植性,哪些接口需要针对工具进行谨慎处理。
context 和 pure import 控制导入例程如何与仿真状态和优化行为交互。context import 携带作用域信息,当 C 代码调用导出的 SystemVerilog 例程,或访问实际参数之外的 SystemVerilog 对象时必须使用。pure import 承诺确定性的、仅依赖输入的、无副作用行为,使仿真器可以复用或删除调用。错误使用这两类属性都可能导致无效回调、不安全访问,或意外的优化行为。
编译和链接把已声明的接口连接到实际 C 目标代码。C 源码单独编译并链接成共享目标库,而 SystemVerilog 代码按照普通流程进行编译和仿真。-sv_lib、-sv_liblist 和 -sv_root 等选项为仿真器提供共享库访问路径。DPI 比 PLI 更轻量,因为它不需要新的仿真器可执行文件,但它也不提供 PLI 式的仿真数据结构访问能力或任意仿真事件同步能力。
disable 处理为会调用导出例程的导入例程增加了一条高级可靠性规则。当 SystemVerilog disable 影响原始导入调用时,C 层必须在导出调用返回后检测 disabled 状态,停止进一步回调,并确认该 disable。导入 task 和导入 function 对该条件的确认方式不同,因此需要正确编写握手机制,才能在 DPI 边界上保持 SystemVerilog disable 语义。
Catalogue:
Verilog PLI: 强大但复杂
SystemVerilog DPI: 轻量级外部接口
DPI层独立与数据映射
SystemVerilog 到 C 数据类型映射 (一)
SystemVerilog 到 C 数据类型映射 (二)
DPI导入任务与函数
DPI类型兼容性警告
DPI导入链接名称
DPI导入规则与类型
上下文任务与函数
纯函数和仿真优化
DPI导出任务与函数
DPI导出链接名称
DPI导出规则与时间控制
导入和导出函数示例
DPI编译与链接
DPI优势与限制
DPI禁用握手机制
函数的禁用握手机制
任务的禁用握手机制
You might also like
More offerings will load here.
Secure checkout via our payment partner.
