肯定很多人会问为什么有的地方使用package,有的地方使用`include,二者是不是等价的呢?
答案是NO,二者并不等价,原因就要涉及System Verilog的命名空间了。
假设你有2个class “A”和“B” ,如下:
class A; int i; endclass : A class B; int i; endclass : B
SystemVerilog会认为这两个class是不同的类型,原因是它们的名称不同,即使这两个class的内容是一模一样的。
因为Systemverilog中名称还表示着各种定义声明的命名空间。
所以,当你在一个package 中声明一个class,那么这个package的名称就隐式地成为class名称的前缀。
package P:
package P; class A; int i; endclass : A A a1; endpackage : P
package Q:
package Q; class A; int i; endclass : A A a1; endpackage : Q
所以,此时会有2个class A定义(P::A和Q::A), 并且P::a1 和Q::a1的类型并不兼容。
如果将将上述代码使用`include改写成:
class A; int i; endclass : A package P; `include "A.sv" A a1; endpackage : P package Q; `include "A.sv" A a1; endpackage : Q
因为`include只是简单的复制粘贴,所以P::a1和Q::a1仍然是不兼容的数据类型。若修改成下述形式:
package P; class A; int i; endclass : A endpackage : P package R; import P::A; A a1; endpackage : R package S; import P::A; A a1; endpackage : S
此时只有一个地方存在class “A” 的定义(package “P”),然后我们在package R和package S中import package A,此时在package R和package S中看到的class A就是同一个数据类型了。
这也是`include和package的主要区别。
审核编辑:汤梓红
-
Verilog
+关注
关注
28文章
1355浏览量
110836 -
System
+关注
关注
0文章
165浏览量
37214 -
Package
+关注
关注
0文章
26浏览量
10608
原文标题:SystemVerilog中的package和`include有什么不同?
文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
SystemVerilog中的“const”类属性
看一下SystemVerilog中package的使用方法与注意事项

请问Systemverilog中如何使用VHDL的package?
SystemVerilog for Design(Secon
openwrt下面创建package之Makefile模版

SystemVerilog中的package
SystemVerilog中的Semaphores
Systemverilog中的Driving Strength讲解

SystemVerilog在硬件设计部分有哪些优势

评论