$unit是一個(gè)危險(xiǎn)的共享名稱空間,充滿危險(xiǎn)。它的使用會(huì)導(dǎo)致設(shè)計(jì)難以編譯和維護(hù)。 |
下列unit代表$unit |
筆記 |
---|
在將包添加到SystemVerilog標(biāo)準(zhǔn)之前,SV提供了一種不同的機(jī)制來創(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ǔ)句來顯示在哪里可以找到定義。當(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需導(dǎo)入地使用該定義。許多軟件工具不會(huì)強(qiáng)制要求重新編譯所有文件,但如果不重新編譯,設(shè)計(jì)模塊最終可能使用過時(shí)的定義。
對(duì)于仿真和綜合,unit聲明空間可以是相同,但通常是不同的。
編譯器的每次調(diào)用都會(huì)啟動(dòng)一個(gè)新的unit聲明空間,該空間不共享其他unit聲明空間中的聲明。許多SystemVerilog仿真器一起編譯多個(gè)文件。這些工具將看到一個(gè)unit空間。一個(gè)文件中的unit定義對(duì)于單個(gè)編譯中的任何后續(xù)文件都是可見的。大多數(shù)SystemVerilog綜合編譯器和一些仿真器都支持單獨(dú)的文件編譯,每個(gè)文件都可以獨(dú)立編譯。這些工具將看到幾個(gè)斷開連接的unit聲明空間。一個(gè)文件中的unit定義對(duì)任何其他文件都不可見。
很容易出現(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!相反,使用包來共享定義。 |
包避免了$unit的所有危害,包提供了一個(gè)易于維護(hù)和重用的受控聲明空間。 |
最佳實(shí)踐指南4-2 |
---|
審核編輯 :李倩
-
模塊
+關(guān)注
關(guān)注
7文章
2788瀏覽量
50362 -
Verilog
+關(guān)注
關(guān)注
29文章
1367瀏覽量
112259 -
編譯
+關(guān)注
關(guān)注
0文章
679瀏覽量
33981
原文標(biāo)題:SystemVerilog(十二)-$unit聲明空間
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
PanDao應(yīng)用:輸入中頻空間公差,最小中頻波長(zhǎ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大空間火熱,如何落地文旅場(chǎng)景?
大疆發(fā)布DJI O4 Air Unit系列:圖傳性能再升級(jí)
聲明式資源管理方法
TüV萊茵為京東方液晶顯示面板頒發(fā)碳足跡核查聲明
TüV南德授予上海瑞斯達(dá)組織溫室氣體核查聲明

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

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

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

評(píng)論