一般在搭UVM环境的时候,会经常看到以下两句:
import uvm_pkg::*;
`include "uvm_macros.svh"
我打开uvm_pkg.sv查看,却发现uvm_macros.svh这个头文件能在uvm_pkg.sv中找到,因此产生一个疑问:uvm_macros.svh为什么要单独拿出来include呢?
为此我查找了一些资料,在一个网站上看到Dave的solution解答了我的疑惑,以下为他的回答的翻译:
像`define宏之类的编译器伪指令在识别任何SystemVerilog语法之前先进行处理,它们仅在当前代码单元(编译单元)被编译时存在。因此,问题的答案取决于是否将uvm_pkg作为单独的编译单元的一部分进行编译,而该代码是从其中导入uvm_pkg的代码导入的。通常,人们使用uvm_pkg的预编译库,因此您需要同时进行import和`include。对于将所有内容都编译为单个编译单元的另一种情况,是否重复`include也没关系,因为uvm_macros.svh文件中有编译防护,可以防止重新定义警告。因此,您最好在两种情况下都包括在内,只是为了使代码更具适应性。
以下为我的个人理解:
在SystemVerilog中,所有`defi