#UVM# 关于多次TB中 include “uvm_macros.svh“的疑问篇

24 篇文章 23 订阅

“多动脑,多思考” !!!!

笔者,作为ASIC 验证人员,虽然工作年限不多,经历了3家公司的TB验证环境。一直悬在心里的一个疑问就是:为什么 在TB验证文件中,发现多次`include "uvm_macros.svh"该行代码?

追查了一下uvm_pkg::* 这个package . 源代码如下:

我们发现,uvm_pkg.sv中,已经包含了 如下行:

`include "uvm_macros.svh"

既然,uvm_pkg.sv中已经包含了 上面一行,为什么我们还要自己手动去添加呢?

一下文章,均snapshot from 某个论坛


 继续追问:

【解答1】:

宏不能通过包提供。当你需要的时候,你必须阅读相应的定义。

【解答2】 

像'定义宏这样的编译器指令不存在于任何作用域中,比如包。在识别任何SystemVerilog语法之前都要进行处理。它们只在当前代码单元(编译单元)被编译时存在。

因此,问题的答案取决于uvm_pkg是否被编译为一个单独的编译单元的一部分,从代码中导入uvm_pkg。

通常人们对uvm_pkg使用预编译的库,所以你需要同时进行导入和包含。

对于另一种情况,当所有内容都被编译为一个单独的编译单元时,如果你重复' include '并不重要,因为在uvm_宏中有编译守卫。防止重定义警告的SVH文件。

所以你可以在这两种情况下都包含,只是为了让你的代码更具适应性。

【追问】

 【回答】

我将重复:至于' include ' uvm_macros.svh”出现在uvm_pkg内部或者外部。重要的是,宏必须在编译单元中定义,然后才能在同一编译单元中使用。您可以假定编译器预处理文本宏和编译器指令不知道SystemVerilog语法。

SystemVerilog允许使用多种不同的方法来编译单元。出现在编译器命令行上的每个文件可以是一个单独的编译单元;或者您可以在多个编译单元的命令行中拥有一组文件,或者您可以在一个编译单元中拥有所有文件。对于允许多个编译步骤的工具,每个步骤可以是一个单独的编译单元。

在所有这些情况下,任何被包含的文件都与带有“Include”语句的文件是同一编译单元的一部分。

至此,我们是不是有所感悟了。哈哈,别慌,下节课,我们动手用实际例子来验证一下~~~


其它useful links:

https://verificationacademy.com/forums/uvm/necessity-writing-include-uvmmacros.svh

https://blogs.sw.siemens.com/verificationhorizons/2010/07/13/package-import-versus-include/


  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值