| $unit是一個(gè)危險(xiǎn)的共享名稱空間,充滿危險(xiǎn)。它的使用會(huì)導(dǎo)致設(shè)計(jì)難以編譯和維護(hù)。 |
| 下列unit代表$unit |
| 筆記 |
|---|
在將包添加到SystemVerilog標(biāo)準(zhǔn)之前,SV提供了一種不同的機(jī)制來(lái)創(chuàng)建多個(gè)模塊共享的定義。這個(gè)機(jī)制是一個(gè)名為unit的偽全局名稱空間,也稱unit 編譯單元或聲明空間。聲明空間之外的任何聲明都在unit聲明空間中。在下面的示例中,bool_t的定義在兩個(gè)模塊之外,因此在unit聲明空間中。

unit聲明空間可以包含與包相同類型的用戶定義,并且具有相同的綜合限制。然而,與包不同的是,unit聲明空間可能導(dǎo)致設(shè)計(jì)代碼難以維護(hù),EDA也難以編譯。使用unit的一些危險(xiǎn)包括
以u(píng)nit聲明空間的定義可能分散在許多文件中,使代碼維護(hù)和代碼重用成為一場(chǎng)噩夢(mèng),當(dāng)引用包中用戶自定義類型、任務(wù)、函數(shù)或其他標(biāo)識(shí)符名稱時(shí),相對(duì)容易找到和維護(hù)標(biāo)識(shí)符名稱的定義??偸怯幸粋€(gè)顯式的包引用或包導(dǎo)入語(yǔ)句來(lái)顯示在哪里可以找到定義。當(dāng)在unit聲明空間中定義了用戶自定義類型、任務(wù)、函數(shù)或其他標(biāo)識(shí)符時(shí),該定義可以位于構(gòu)成設(shè)計(jì)和驗(yàn)證測(cè)試臺(tái)源代碼的任何文件、任何目錄、任何服務(wù)器中。定位、維護(hù)和重新定義是困難的。
當(dāng)unit聲明空間中的定義位于多個(gè)文件中時(shí),必須按照特定的順序編譯這些文件。
SystemVerilog要求在引用定義之前對(duì)其進(jìn)行編譯。當(dāng)unit聲明分散在許多文件中時(shí),按照正確的順序編譯所有文件可能會(huì)很困難,甚至是不可能的。
更改unit定義需要重新編譯所有源代碼文件。
對(duì)unit聲明空間中定義的任何更改都需要重新編譯構(gòu)成設(shè)計(jì)和驗(yàn)證測(cè)試臺(tái)的所有源代碼,因?yàn)槿魏蔚胤降娜魏挝募伎梢詿o(wú)需導(dǎo)入地使用該定義。許多軟件工具不會(huì)強(qiáng)制要求重新編譯所有文件,但如果不重新編譯,設(shè)計(jì)模塊最終可能使用過(guò)時(shí)的定義。
對(duì)于仿真和綜合,unit聲明空間可以是相同,但通常是不同的。
編譯器的每次調(diào)用都會(huì)啟動(dòng)一個(gè)新的unit聲明空間,該空間不共享其他unit聲明空間中的聲明。許多SystemVerilog仿真器一起編譯多個(gè)文件。這些工具將看到一個(gè)unit空間。一個(gè)文件中的unit定義對(duì)于單個(gè)編譯中的任何后續(xù)文件都是可見(jiàn)的。大多數(shù)SystemVerilog綜合編譯器和一些仿真器都支持單獨(dú)的文件編譯,每個(gè)文件都可以獨(dú)立編譯。這些工具將看到幾個(gè)斷開(kāi)連接的unit聲明空間。一個(gè)文件中的unit定義對(duì)任何其他文件都不可見(jiàn)。
很容易出現(xiàn)定義不同的重復(fù)標(biāo)識(shí)符名稱。
在SystemVerilog中,在同一名稱空間中多次定義同一名稱是非法的。如果一個(gè)文件在unit聲明空間中定義了bool_t用戶自定義類型,而另一個(gè)文件在unit聲明空間中也定義了bool_t用戶自定義類型,那么這兩個(gè)文件永遠(yuǎn)不能一起編譯,因?yàn)檫@兩個(gè)定義最終會(huì)在相同的unit空間中結(jié)束。為了避免這種沖突,工程師必須使用’define 和 ’ifdef添加條件編譯指令,以便只編譯編譯器遇到的第一個(gè)定義。
包可以導(dǎo)入到unit中,但其危害與直接在unit中定義的危害相同。此外,必須注意不要將同一個(gè)包多次導(dǎo)入同一unit聲明空間,這是非法的。
| 避免像Bubonic plague一樣使用$unit!相反,使用包來(lái)共享定義。 |
| 包避免了$unit的所有危害,包提供了一個(gè)易于維護(hù)和重用的受控聲明空間。 |
| 最佳實(shí)踐指南4-2 |
|---|

審核編輯 :李倩
-
模塊
+關(guān)注
關(guān)注
7文章
2849瀏覽量
53463 -
Verilog
+關(guān)注
關(guān)注
31文章
1374瀏覽量
114737 -
編譯
+關(guān)注
關(guān)注
0文章
696瀏覽量
35297
原文標(biāo)題:SystemVerilog(十二)-$unit聲明空間
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
MySQL磁盤空間問(wèn)題的成因和排查方法
關(guān)于AC696N系列芯片如何壓縮rom空間,AC6965E4程序占空間太大如何優(yōu)化?
深入剖析PCIe配置空間中Type 0 Header的核心成員
結(jié)構(gòu)體聲明與定義
字存儲(chǔ)空間的小端格式
共用體聲明
安世中國(guó)關(guān)于當(dāng)前供應(yīng)鏈局勢(shì)及相關(guān)訴求的鄭重聲明
發(fā)布元服務(wù)配置隱私聲明
維信諾五家工廠獲頒ISO 14064溫室氣體核查聲明
一文了解3C認(rèn)證自我聲明制度
使用CubeMX移植nano編譯時(shí)提示大量未聲明,為什么?
ISSE國(guó)際智慧空間展覽會(huì)即將登場(chǎng)—智構(gòu)空間,慧聚未來(lái)
$unit聲明空間
評(píng)論