
用于SystemVerilog与C的直接编程接口
SystemVerilog DPI 通过轻量级的导入和导出子程序连接 SystemVerilog 与 C,涵盖数据映射、类型兼容、context 与 pure function、编译、链接、限制,以及用于可靠跨语言仿真集成的 disable 握手机制。
SystemVerilog DPI 通过轻量级的导入和导出子程序连接 SystemVerilog 与 C,涵盖数据映射、类型兼容、context 与 pure function、编译、链接、限制,以及用于可靠跨语言仿真集成的 disable 握手机制。
This resource includes
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。导入 ...
This resource includes
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。导入 ...
Recommended

EDA Academy is a practical learning platform for engineers in the VLSI and semiconductor industry. We offer structured courses, technical resources, and career-focused training across all major areas of chip design and verification — from Verilog to Physical Design, from fundamentals to advanced topics. Learn at your own pace, explore member-exclusive content, or join as an instructor to share your expertise. Lear...
