肯定很多人會問為什么有的地方使用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的主要區(qū)別。
審核編輯:湯梓紅
-
Verilog
+關注
關注
28文章
1351瀏覽量
110391 -
System
+關注
關注
0文章
165瀏覽量
37074 -
Package
+關注
關注
0文章
26瀏覽量
10551
原文標題:SystemVerilog中的package和`include有什么不同?
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論