SystemVerilog $unit 编译单元介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SystemVerilog $unit 编译单元介绍相关的知识,希望对你有一定的参考价值。

参考技术A

SV中增加了编译单元的概念,就是 SV源文件编译的时候,一起编译的所有源文件

编译单元域在搜索顺序中排第三位

举个栗子

这里我们创建了两个包(a_dpk和b_dpk),两个包中的都只有一个打印函数,同时module中也有一个打印函数,(打印函数用于指示所在位置)

打印结果如下:

image-20211216201944989

运行结果如下:

可以看到此时打印的是在module中导入的包

那么接下来我们把在module中导入的包注释掉,即把 import a_dpk::*; 注释掉

下面运行结果:

此时终于把导入$unit编译单元域的内容打印出来了

这也就是为什么 编译单元域在搜索规则中排第三

那么为什么编译单元域叫 $unit 呢?我们可以再把代码更改一下

我们把 b_dpk 注释掉,但依旧将其导入,看看运行结果

这里直接显示错误在 $unit ,或许$unit只是一个名称,就好像上例中module命名为 test_tb 一样

格式为:

这是C语言中常用的技巧,如果第一次遇到导入语句将其编译到$unit中,再次出现则不会编译

下面我们将上篇笔记中的包用这种方式仿真一下,先给出上篇笔记中包的内容

我们将文件名命名为 definitions.dpk ,其中后缀 .dpk 是随便起的

下面是源码和测试文件

运行结果如下

本文主要参考

以上是关于SystemVerilog $unit 编译单元介绍的主要内容,如果未能解决你的问题,请参考以下文章

vcs怎么编译产生随机激励的systemverilog语句

systemverilog 的解决方法没有 `if 编译器指令

如果未设置某个宏,则阻止systemverilog编译

icarus 的 SystemVerilog 支持(iverilog 编译器)

在系统verilog接口内声明的包

SystemVerilog基本语法总结(下)