#UVM# 关于多次TB中 include “uvm_macros.svh“的疑问篇
“多动脑,多思考” !!!!
笔者,作为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“的疑问篇相关推荐
- `include “uvm_macros.svh“引发的思考
一般在搭UVM环境的时候,会经常看到以下两句: import uvm_pkg::*; `include "uvm_macros.svh" 我打开uvm_pkg.sv查看,却 ...
- html中#include file的使用方法
有两个文件a.htm和b.htm,在同一文件夹下a.htm内容例如以下 <!-- #include file="b.htm" --> b.htm内容例如以下 今天:雨 ...
- PHP中include和require
PHP中include和require require(),include(),require_once()和include_once()的异同 require()和include()有许多相似之处, ...
- C和C++中include 搜索路径的一般形式以及gcc搜索头文件的路径
C和C++中include 搜索路径的一般形式 对于include 搜索的路径: C中可以通过 #include <stdio.h> 和 #include "stidio.h&q ...
- require与include+php,PHP中include与require有什么区别
PHP中include与require有什么区别 发布时间:2021-01-13 15:24:31 来源:亿速云 阅读:81 作者:Leah PHP中include与require有什么区别?相信很多 ...
- php中include和require,在PHP中include和require到底有什么区别呢?
在PHP中include和require到底有什么区别呢?看这里的例子就知道了 include.php3的运行结果是: 这是inc1.inc文件中的一个变量的值! 这是inc2.inc文件中的一个变量 ...
- 【转】C++中#include包含头文件带 .h 和不带 .h 的区别
C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...
- PHP中include和require的区别详解
PHP中include和require的区别详解 1.概要 require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每 ...
- JSP中include的动态引入和静态引入
1.<JSP页面中常见的page指令> 更多免费教学文章请关注这里 2.<JSP页面中最常使用的脚本元素> 我们在说指令标签的时候 说到过一个指令Page指令 大家可以翻阅下之 ...
最新文章
- linux 变量替换字符串,变量替换 字符串处理
- python程序员总结的一些基本语法
- R语言ggplot2可视化强制所有的X数值都显示在X轴标签上:x-axis labels with all x-axis values
- svm理论与实验之11:svm开发工具包LibSVM
- Java中的线程和同步
- MVP架构设计 进阶三
- 藏不住了,这就是阿里 AI 的真正实力!
- GEETEST极验召集互联网大佬齐聚光谷,共同探讨交互安全问题
- 六招让你成职场超男超女
- php 字符串截掉前两位,如何在PHP的前20个单词中截断字符串?
- SWD离线烧写器(完全开源)
- 如何彻底卸载3dmax2020_3dmax卸载不干净如何解决_3dmax怎么彻底卸载干净
- slitaz linux 包管理器,SliTaz
- python中re.group()简介
- 2009年以来我买过的书(部分)
- “我,从油漆工开始的80后,曾经靠副业的收入买车买房”
- 维度建模之缓慢渐变维
- 【问题】PPS、PPSX自动放映格式打开直接进入编辑模式
- 不同情况下的sql求和
- PostgreSQL WHEN others THEN