命名的结束语句
命名的結束語句
1、命名的模塊結尾
SystemVerilog允許關鍵字endmoule后指定模塊的名字
2、命名的代碼塊結尾
SystemVerilog還允許對其他命名的代碼塊指定結尾名稱。這包括以下關鍵字:interface…endinterface、task…endtask、function…endfunciton和begin…end以及其他主要用于測試平臺的命名代碼。
3、嵌套(局部)模塊的聲明
模塊的名稱時全局性的
對模塊名稱的訪問不受限制
全局名稱有可能導致沖突發生
在模塊捏聲明模塊
SystemVerilog提供了一種簡便和精準的方法,可以限制在哪里實例化模塊,而且這種方法能避免與其他具有相同名稱的模塊發生潛在的沖突。這個方法既是允許一個模塊的定義嵌套在另一個模塊的定義之中。嵌套的模塊在聲明的層次域之外是不可見的。
嵌套模塊定義可以位于幾個獨立文件中
通常的風格是把每個模塊放到一個單獨的文件中
使用嵌套模塊定義會使用頂層模塊的源代碼文件包含多個模塊定義。另外,如果嵌套模塊的源代碼被掩藏在頂層模塊下,那么它會難于維護,并且很難在其他設計中重用。
3.1嵌套模塊名稱的可見性
嵌套模塊的名稱不是全局的
嵌套模塊的名稱并不像其他模塊名稱一樣放在全局模塊定義命名域內。嵌套模塊的名稱只在其父模塊的命名域內。也就是說嵌套模塊可以使用和在設計的任何地方定義過的模塊一樣的名稱,而不會引起全局模塊定義命名域內的任何沖突。
嵌套模塊的層次化路徑
與模塊實例一樣,嵌套模塊也有層次化域名。嵌套模塊中的變量、線網和嵌套模塊中的其他聲明都可以在驗證層次haul引用,就好像在設計中的其他模塊里聲明一樣。
嵌套模塊可以例化其他模塊
嵌套模塊可以實例化其他模塊
嵌套模塊可以實例化其他模塊。這些模塊的定義可以位于三個命名域中:全局模塊定義命名域、嵌套模塊的父模塊或嵌套模塊內的模塊(作為另一個嵌套模塊定義)。
3.2實例化嵌套模塊
嵌套模塊和普通模塊的實例化方法一樣
實例化嵌套模塊的方法和普通模塊一樣。嵌套模塊可以被其父模塊任意次數地顯式實例化,也可以在父模塊下面層次數的任何地方實例化。嵌套模塊實例和普通模塊實例化,而普通模塊可以在設計層次中的任何地方實例化。
3.3嵌套模塊的名稱搜索規則
嵌套模塊有局部作用域
和普通模塊一樣,嵌套模塊也有自己的命名域。嵌套模塊的定義中可以包含也可以不包含端口。嵌套模塊的端口名稱是該模塊內的局部名稱。嵌套模塊內的所有網線、變量、任務。函數和其他聲明都是fail模塊的局部量。
嵌套模塊可以引用父模塊中的名稱
嵌套模塊的名稱搜索規則與普通的模塊不同。從語義上講,嵌套模塊類似于Verilog的任務,嵌套模塊可以看到父模塊中的信號。和任務一樣,如果引用的名稱既不在嵌套模塊的局部作用域內,就會到其父模塊內,就會在編譯單元域內查找。這樣,嵌套模塊就可以引用那些外部定義的,編譯單元內的變量、常量、任務、函數和用戶自定義類型。
非嵌套模塊沿實例化樹向上搜索
需要著重注意的是,嵌套模塊的向上搜索與非嵌套模塊的向上搜索規則不同。非嵌套模塊位于全局模塊定義域內,沒有父源代碼。當非嵌套模塊引用一份沒有在模塊內聲明的標識符時(如變量名或函數名),名稱的搜索路徑使用實例化層次樹,包括編譯單元域。
嵌套模塊在源代碼中向上搜索
而嵌套模塊的定義是有父源代碼。當嵌套模塊引用沒有在嵌套模塊內定義的標識符時,搜索路徑是在定義這個嵌套模塊的父模塊中查找,而不是在實例化該模塊中查找。
4、簡化的模塊實例網表
網表將模塊實例連接起來
網表是用網將端口連接在一起的模塊實例的列表。在設計的許多層次–從高抽象級設計中主要功能塊的連接,到具體實現層次中進行ASIC或門級等分立部件的連接都要用到網表。網表通常由綜合編譯器等軟件工具自動生成;但是在連接主要設計模塊時,通常需要人工定義網表。在頂層模塊中,即使是在功能塊層次上,網表的規模也經常非常大,有可能存在很多潛在的難于調試的連接錯誤。
4.1、隱式的.name端口連接
.name是端口名稱連接的簡化方式
SystemVerilog提供了能大大簡化網表的三種方法:.name端口連接,.*端口連接和接口。
.name簡化了連接模塊實例的過程
.name端口連接語法結合了自成文檔代碼中使用的按端口次序連接方式的簡潔性和端口名稱連接方式的次序獨立性這兩方面優點,同時消除了這兩種Verilog風格的缺點。
.name推斷出同名線網和端口連接
.name可以和端口名稱連接方式結合
總結
- 上一篇: 美团点评平台商户扣款是什么
- 下一篇: FPGA笔记