$unit是一個危險的共享名稱空間,充滿危險。它的使用會導(dǎo)致設(shè)計難以編譯和維護(hù)。 |
下列unit代表$unit |
筆記 |
---|
在將包添加到SystemVerilog標(biāo)準(zhǔn)之前,SV提供了一種不同的機(jī)制來創(chuàng)建多個模塊共享的定義。這個機(jī)制是一個名為unit的偽全局名稱空間,也稱unit 編譯單元或聲明空間。聲明空間之外的任何聲明都在unit聲明空間中。在下面的示例中,bool_t的定義在兩個模塊之外,因此在unit聲明空間中。
unit聲明空間可以包含與包相同類型的用戶定義,并且具有相同的綜合限制。然而,與包不同的是,unit聲明空間可能導(dǎo)致設(shè)計代碼難以維護(hù),EDA也難以編譯。使用unit的一些危險包括
以unit聲明空間的定義可能分散在許多文件中,使代碼維護(hù)和代碼重用成為一場噩夢,當(dāng)引用包中用戶自定義類型、任務(wù)、函數(shù)或其他標(biāo)識符名稱時,相對容易找到和維護(hù)標(biāo)識符名稱的定義。總是有一個顯式的包引用或包導(dǎo)入語句來顯示在哪里可以找到定義。當(dāng)在unit聲明空間中定義了用戶自定義類型、任務(wù)、函數(shù)或其他標(biāo)識符時,該定義可以位于構(gòu)成設(shè)計和驗(yàn)證測試臺源代碼的任何文件、任何目錄、任何服務(wù)器中。定位、維護(hù)和重新定義是困難的。
當(dāng)unit聲明空間中的定義位于多個文件中時,必須按照特定的順序編譯這些文件。
SystemVerilog要求在引用定義之前對其進(jìn)行編譯。當(dāng)unit聲明分散在許多文件中時,按照正確的順序編譯所有文件可能會很困難,甚至是不可能的。
更改unit定義需要重新編譯所有源代碼文件。
對unit聲明空間中定義的任何更改都需要重新編譯構(gòu)成設(shè)計和驗(yàn)證測試臺的所有源代碼,因?yàn)槿魏蔚胤降娜魏挝募伎梢詿o需導(dǎo)入地使用該定義。許多軟件工具不會強(qiáng)制要求重新編譯所有文件,但如果不重新編譯,設(shè)計模塊最終可能使用過時的定義。
對于仿真和綜合,unit聲明空間可以是相同,但通常是不同的。
編譯器的每次調(diào)用都會啟動一個新的unit聲明空間,該空間不共享其他unit聲明空間中的聲明。許多SystemVerilog仿真器一起編譯多個文件。這些工具將看到一個unit空間。一個文件中的unit定義對于單個編譯中的任何后續(xù)文件都是可見的。大多數(shù)SystemVerilog綜合編譯器和一些仿真器都支持單獨(dú)的文件編譯,每個文件都可以獨(dú)立編譯。這些工具將看到幾個斷開連接的unit聲明空間。一個文件中的unit定義對任何其他文件都不可見。
很容易出現(xiàn)定義不同的重復(fù)標(biāo)識符名稱。
在SystemVerilog中,在同一名稱空間中多次定義同一名稱是非法的。如果一個文件在unit聲明空間中定義了bool_t用戶自定義類型,而另一個文件在unit聲明空間中也定義了bool_t用戶自定義類型,那么這兩個文件永遠(yuǎn)不能一起編譯,因?yàn)檫@兩個定義最終會在相同的unit空間中結(jié)束。為了避免這種沖突,工程師必須使用’define 和 ’ifdef添加條件編譯指令,以便只編譯編譯器遇到的第一個定義。
包可以導(dǎo)入到unit中,但其危害與直接在unit中定義的危害相同。此外,必須注意不要將同一個包多次導(dǎo)入同一unit聲明空間,這是非法的。
避免像Bubonic plague一樣使用$unit!相反,使用包來共享定義。 |
包避免了$unit的所有危害,包提供了一個易于維護(hù)和重用的受控聲明空間。 |
最佳實(shí)踐指南4-2 |
---|
審核編輯 :李倩
-
模塊
+關(guān)注
關(guān)注
7文章
2787瀏覽量
50289 -
Verilog
+關(guān)注
關(guān)注
29文章
1367瀏覽量
112209 -
編譯
+關(guān)注
關(guān)注
0文章
679瀏覽量
33952
原文標(biāo)題:SystemVerilog(十二)-$unit聲明空間
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
PanDao應(yīng)用:輸入中頻空間公差,最小中頻波長
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝之?dāng)?shù)據(jù)拷貝介紹
飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝之?dāng)?shù)據(jù)拷貝介紹
LBE大空間火熱,如何落地文旅場景?
大疆發(fā)布DJI O4 Air Unit系列:圖傳性能再升級
聲明式資源管理方法
TüV南德授予上海瑞斯達(dá)組織溫室氣體核查聲明

新品|無刷電機(jī)運(yùn)動執(zhí)行套件 — RollerCAN Unit &amp; RollerCAN Lite

電壓空間矢量分量的極性是什么
安科瑞ADL200-2DM宿舍預(yù)付費(fèi)電表 照明空調(diào)單獨(dú)計量

新品|無刷直流電機(jī)運(yùn)動執(zhí)行套件|Roller485 Unit

鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基礎(chǔ)數(shù)據(jù)類型Unit與Nothing類型
達(dá)實(shí)智能AIoT空間場景控制系統(tǒng)概述
433MHz頻段的LoRa通訊單元 | LoRaE220-433 Unit

評論