肯定很多人會(huì)問(wèn)為什么有的地方使用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只是簡(jiǎn)單的復(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”),然后我們?cè)趐ackage R和package S中import package A,此時(shí)在package R和package S中看到的class A就是同一個(gè)數(shù)據(jù)類型了。
這也是`include和package的主要區(qū)別。
審核編輯:湯梓紅
-
Verilog
+關(guān)注
關(guān)注
28文章
1343瀏覽量
109925 -
System
+關(guān)注
關(guān)注
0文章
165瀏覽量
36847 -
Package
+關(guān)注
關(guān)注
0文章
26瀏覽量
10451
原文標(biāo)題:SystemVerilog中的package和`include有什么不同?
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論