Verilog | 多语言交互接口

PLI

Verilog中使用编程语言接口 PLIProgram Language Interface)编程语言接口来和C语言程序交互,它提供了一套C语言函数,我们可以调用这些集成函数编写软件C程序。RTL代码编译的时候,这些软件C程序也会集成到仿真环境中。仿真运行后,使用系统任务调用的方式,就可以去访问仿真中的数据结构,也就是说PLI提供一个使得用户自带C函数能够在运行时间访问仿真数据结构的接口。

PLI先后经历了3代的发展:

1985年TF

Task/Function interface,第一代Verilog PLI。包含一整套C语言函数库,函数定义在verisuer.h文件中,一般称为TF子程序,主要作用是把任务/函数参数传递给C函数。TF的缺点是它定义系统任务/函数, 函数返回值以及需要关联任务/函数名称到C函数的机制。该机制并不是标准化的, 这就意味着每个仿真器有不同的PLI接口机制。TF的一个缺点是定义系统任务/函数名称、函数返回类型以及与任务/函数名称相关联的 C 函数的机制。这种机制不是标准化的,这意味着每个模拟器都有不同的 PLI 接口机制。

1989年ACC

Access interface,第二代Verilog PLI。引入了访问程序库的C函数,即ACC函数库,由单独的acc_user.h定义,函数均以acc_作为前缀。它是作为TF的附加库。只是增加了搜索仿真数据结构的功能,但是不能访问RTL和行为级的设计部分。此外,复杂的,因仿真器而异的接口机制也是ACC接口的一大缺点。

1995年VPI

Verilog Programming Interface,第三代Verilog PLI。VPI是TF和ACC的超集扩展库。VPI库定义在C函数库文件vpi_user.h。使用VPI, 用户能够访问整个仿真数据结构, 包括系统任务/函数的参数(替换TF) 以及设计的层次结构单元(替换ACC)。

DPI

Accellera在2003年4月发布了包括DPI在内的SystemVerilog 3.1标准,随后在3.1A版本中进一步对DPI进行了加强。systemverilog中使用DPI( Direct Programming Interface),更加简单地连接C、C++或者其他的非Verilog语言。你只需要使用import语句把C函数导入到,就可以像调用systemverilog的子程序一样来使用它。使用DPI, 用户无需再像Verilog PLI那样, 事先编写系统任务/函数名称, 然后通过复杂的PLI库间接传递数值回C函数。但是DPI不能直接访问仿真数据结构的内部,这限制了DPI的应用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkCtL4iV-1689816474886)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ec79a090-1152-4d0e-ae55-1a8502f14186/Untitled.png)]

PLI 功能

  • PLI 允许用户用 C 编写自定义的系统任务和函数,可以完成用 Verilog 不能完成的复杂操作。
  • 一些应用软件,例如文件读写工具,延迟计算工具,也可以用 PLI 编写。
  • PLI 可提取设计信息,例如访问层次、互连情况、以及特定类型的逻辑元件数量等。
  • PLI 可用于编写专用的输出显示程序,例如一些专用的波形观测器,生成一些逻辑互连、层次、数据波形等信息。
  • PLI 可完成繁琐的监测任务或激励任务。
  • PLI 能控制仿真的过程,例如暂停、退出,便于调试。
  • PLI 还可以扩展的用途有,RAM/ROM程序下载工具,功耗分析,CModel 接口, 协同仿真环境……

PLI 使用

通过编写系统任务和系统函数, 用户能够用 PLI 和 C 程序扩展 Verilog 语言。这些用户定义的系统任务和函数的名称必须以美元符号 “$” 开头。此时 Verilog 里面的任务相当于一个子程序。当调用任务时,仿真器的执行流程跳转到子程序,完成任务后执行流程返回。Verilog 任务并不返回数值,但是可以有输入、输出和双向的形参。

Verilog 里面的函数跟大多数语言里面的函数一样。 当调用函数时,它运行一套指令,然后返回一个数值给调用它的指令。

PLI 流程

使用 PLI 接口完成用户自定义系统任务的基本流程如下所示。

Verilog | 多语言交互接口_第1张图片

参考:

SystemVerilog | 多语言交互接口DPI

Verilog HDL 编程语言接口

你可能感兴趣的:(Verilog,fpga开发)