[UVM源代码研究] 聊聊UVM源代码中的DPI函数

本文详细探讨了UVM源代码中的DPI函数,特别是uvm_hdl系列函数,如uvm_hdl_read用于后门访问HDL路径,以及uvm_hdl_deposit、uvm_hdl_force和uvm_hdl_release的使用和区别。此外,还介绍了与正则表达相关的uvm_regex和命令行参数处理的uvm_svcmd_dpi部分。

[UVM源代码研究] 聊聊UVM源代码中的DPI函数

引言

之前的一篇文章 数字验证大头兵:[UVM源代码研究] 聊聊寄存器模型的后门访问 中提到进行寄存器后门访问的时候用到了UVM源代码中自带的DPI函数uvm_hdl_read(),于是乎打算写一篇文章把UVM源代码中涉及到的DPI函数彻底梳理一遍。

SystemVerilog DPI,全称SystemVerilog直接编程接口 (英语:SystemVerilog Direct Programming Interface)是SystemVerilog与其他外来编程语言的接口。能够使用的语言包括C语言、C++、SystemC等。直接编程接口由两个层次构成:SystemVerilog层和外来语言层,两个层次相互分离。对于SystemVerilog方面,另一边使用的编程语言是透明的,它只需要保证函数名和函数参数返回值类型的匹配即可。SystemVerilog和外来语言的编译器各自并不需要分析另一种语言的代码,两者各自独立编译。由于不触及SystemVerilog层,因此支持使用不同的语言。不过,目前SystemVerilog仅为C语言定义了外来语言层。所以,每个函数DPI的文件都有.svh和*.cc或*.c 两个文件。

dpi目录文件介绍

UVM源代码中的dpi目录包含文件如图1所示。

图1 /src/dpi目录文件结构

在这里插入图片描述

uvm_dpi.cc和uvm_dpi.svh

uvm_dpi.cc文件如图2所示,其中include了所有C语言相关的源文件。

图2 /src/dpi/uvm_dpi.cc文件内容

在这里插入图片描述

相应的uvm_dpi.svh则是所有DPI相关的sv代码的文件集合,如图3所示。

图3 /src/dpi/uvm_dpi.svh文件内容

在这里插入图片描述

可以看到uvm_dpi.svh中除了include相关几个sv文件之外,还做了宏的统一管理,一旦打开了UVM_NO_DPI宏,那么其中包含的三个文件中的NO_DPI宏就统一打开了,这样所有的DPI函数就都不能正常使用了,当然也可以分别独立打开每一个NO_DPI宏。

如此一来,我们只需要把上面提到的这两个文件都编译了就可以使用相应的DPI函数功能了,uvm_pkg.sv中包含文件uvm_dpi.svh,而http://uvm_dpi.cc需要在uvm_pkg.sv之外单独编译,所以在旧版本的仿真器编译时通常我们需要分别编译uvm_pkg.sv和http://uvm_dpi.cc两个文件,以VCS为例,早起版本我们通常需要像图4一样添加编译参数。

图4 vcs编译工具添加支持UVM DPI的编译参数

在这里插入图片描述

如今得益于多数仿真工具已经将UVM源代码库集成到了仿真工具的安装路径下了,并且支持相关的参数来简化仿真器的配置项,诸如上面一些列UVM相关的参数可以直接使用下面一句话来替换完成。

vcs -ntb_opts uvm-1.2

VCS仿真器会自动将指定的UVM版本相关的源代码全部编译,大大简化了仿真工具的参数配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值