肯定很多人會(huì)問為什么有的地方使用package,有的地方使用`include,二者是不是等價(jià)的呢?
答案是NO,二者并不等價(jià),原因就要涉及System Verilog的命名空間了。
假設(shè)你有2個(gè)class “A”和“B” ,如下:
class A; int i; endclass : A class B; int i; endclass : B
SystemVerilog會(huì)認(rèn)為這兩個(gè)class是不同的類型,原因是它們的名稱不同,即使這兩個(gè)class的內(nèi)容是一模一樣的。
因?yàn)镾ystemverilog中名稱還表示著各種定義聲明的命名空間。
所以,當(dāng)你在一個(gè)package 中聲明一個(gè)class,那么這個(gè)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
所以,此時(shí)會(huì)有2個(gè)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
因?yàn)?strong>`include只是簡單的復(fù)制粘貼,所以P::a1和Q::a1仍然是不兼容的數(shù)據(jù)類型。若修改成下述形式:
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
此時(shí)只有一個(gè)地方存在class “A” 的定義(package “P”),然后我們在package R和package S中import package A,此時(shí)在package R和package S中看到的class A就是同一個(gè)數(shù)據(jù)類型了。
這也是`include和package的主要區(qū)別。
審核編輯:湯梓紅
-
Verilog
+關(guān)注
關(guān)注
29文章
1366瀏覽量
111903 -
System
+關(guān)注
關(guān)注
0文章
166瀏覽量
37595 -
Package
+關(guān)注
關(guān)注
0文章
26瀏覽量
10783
原文標(biāo)題:SystemVerilog中的package和`include有什么不同?
文章出處:【微信號:芯片驗(yàn)證工程師,微信公眾號:芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
SystemVerilog中的Virtual Methods
SystemVerilog中的“const”類屬性
看一下SystemVerilog中package的使用方法與注意事項(xiàng)

請問Systemverilog中如何使用VHDL的package?
SystemVerilog for Design(Secon
openwrt下面創(chuàng)建package之Makefile模版

SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu)
SystemVerilog中的package
SystemVerilog中的Semaphores
Systemverilog中的Driving Strength講解

SystemVerilog在硬件設(shè)計(jì)部分有哪些優(yōu)勢

評論