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

笔者,作为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/


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

  1. `include “uvm_macros.svh“引发的思考

    一般在搭UVM环境的时候,会经常看到以下两句: import uvm_pkg::*;     `include "uvm_macros.svh" 我打开uvm_pkg.sv查看,却 ...

  2. html中#include file的使用方法

    有两个文件a.htm和b.htm,在同一文件夹下a.htm内容例如以下 <!-- #include file="b.htm" --> b.htm内容例如以下 今天:雨 ...

  3. PHP中include和require

    PHP中include和require require(),include(),require_once()和include_once()的异同 require()和include()有许多相似之处, ...

  4. C和C++中include 搜索路径的一般形式以及gcc搜索头文件的路径

    C和C++中include 搜索路径的一般形式 对于include 搜索的路径: C中可以通过 #include <stdio.h> 和 #include "stidio.h&q ...

  5. require与include+php,PHP中include与require有什么区别

    PHP中include与require有什么区别 发布时间:2021-01-13 15:24:31 来源:亿速云 阅读:81 作者:Leah PHP中include与require有什么区别?相信很多 ...

  6. php中include和require,在PHP中include和require到底有什么区别呢?

    在PHP中include和require到底有什么区别呢?看这里的例子就知道了 include.php3的运行结果是: 这是inc1.inc文件中的一个变量的值! 这是inc2.inc文件中的一个变量 ...

  7. 【转】C++中#include包含头文件带 .h 和不带 .h 的区别

    C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...

  8. PHP中include和require的区别详解

    PHP中include和require的区别详解 1.概要  require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每 ...

  9. JSP中include的动态引入和静态引入

    1.<JSP页面中常见的page指令> 更多免费教学文章请关注这里 2.<JSP页面中最常使用的脚本元素> 我们在说指令标签的时候 说到过一个指令Page指令 大家可以翻阅下之 ...

最新文章

  1. linux 变量替换字符串,变量替换 字符串处理
  2. python程序员总结的一些基本语法
  3. R语言ggplot2可视化强制所有的X数值都显示在X轴标签上:x-axis labels with all x-axis values
  4. svm理论与实验之11:svm开发工具包LibSVM
  5. Java中的线程和同步
  6. MVP架构设计 进阶三
  7. 藏不住了,这就是阿里 AI 的真正实力!
  8. GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题
  9. 六招让你成职场超男超女
  10. php 字符串截掉前两位,如何在PHP的前20个单词中截断字符串?
  11. SWD离线烧写器(完全开源)
  12. 如何彻底卸载3dmax2020_3dmax卸载不干净如何解决_3dmax怎么彻底卸载干净
  13. slitaz linux 包管理器,SliTaz
  14. python中re.group()简介
  15. 2009年以来我买过的书(部分)
  16. “我,从油漆工开始的80后,曾经靠副业的收入买车买房”
  17. 维度建模之缓慢渐变维
  18. 【问题】PPS、PPSX自动放映格式打开直接进入编辑模式
  19. 不同情况下的sql求和
  20. PostgreSQL WHEN others THEN

热门文章

  1. 如何提升你的编程能力?年轻程序员听好了,我给你的这几条建议一定会对你有所帮助
  2. 三角形已知三边求面积
  3. web渗透测试----28、ARP欺骗
  4. 笔记本电脑怎么启用c语言,win7笔记本启动0xc000014c信息,如何解决的教程
  5. 【卡顿检测】深入理解
  6. SQL 初始篇 软件开发周期 与数据库设计步骤
  7. w指令中的IDLE是什么意思
  8. linux eclipse插件安装,Linux 下 EclipseME 插件的安装步骤
  9. Liferay7开发系列(一)介绍 liferay版本:7.1.2
  10. Android城市列表