HDLBits (20) — 模塊
本題鏈接:
https://hdlbits.01xz.net/wiki/Module
到目前為止,您已經(jīng)熟悉了 module,它是一個(gè)通過輸入和輸出端口與其外部交互的電路。 更大、更復(fù)雜的電路是通過將更小的模塊和一些連接在一起的其他部分(例如 assign 語句和 always 塊)組成構(gòu)建的更大的模塊。因?yàn)槟K可以包含其他模塊的實(shí)例,所以形成了一個(gè)層次結(jié)構(gòu)。
下圖顯示了一個(gè)帶有子模塊的非常簡單的電路。 在本練習(xí)中,創(chuàng)建模塊 mod_a 的一個(gè)實(shí)例,然后將模塊的三個(gè)引腳(in1、in2 和 out)連接到頂層模塊的三個(gè)端口(線網(wǎng)?a、b 和 out)。 模塊 mod_a 是我們?yōu)槟峁┑摹枰獙?shí)它例化。
在連接模塊時(shí),對您而言只有模塊上的端口是重要的。 您不需要知道模塊內(nèi)的代碼。 模塊 mod_a 的代碼如下所示:

只要使用的所有模塊在屬于同一個(gè)項(xiàng)目中(編譯器憑借這個(gè)知道在哪里可以找到該模塊),那么模塊的層次結(jié)構(gòu)就可以通過在另一個(gè)模塊中實(shí)例化一個(gè)模塊創(chuàng)建。 一個(gè)模塊的代碼沒有寫在另一個(gè)模塊的主體中(不同模塊的代碼沒有嵌套)。
您可以通過端口名稱或端口位置將信號連接到模塊。 如需額外練習(xí),請嘗試使用兩種方法。


題目
將信號連接到模塊端口
有兩種常用的方法將電線連接到端口:分別是按位置和按名稱。
按位置
按位置將電線連接到端口的語法我們應(yīng)該很熟悉,因?yàn)樗褂妙愃?C 的語法。實(shí)例化模塊時(shí),端口根據(jù)模塊的聲明從左到右連接。例如:
mod_a instance1 ( wa, wb, wc );
這會(huì)實(shí)例化一個(gè) mod_a 類型的模塊,并給它一個(gè)實(shí)例名稱“instance1”,然后將信號 wa(在新模塊外部)連接到新模塊的第一個(gè)端口(in1),將 wb 連接到第二個(gè)端口(in2),然后wc 到第三個(gè)端口(出)。這種語法的一個(gè)缺點(diǎn)是,如果模塊的端口列表發(fā)生更改,那么就還需要找到并更改模塊的所有實(shí)例以匹配新模塊。
按名稱
按名稱將信號連接到模塊的端口可以使電線保持正確連接,即使端口列表發(fā)生更改。然而,這種語法更加冗長。
mod_a instance2 ( .out(wc), .in1(wa), .in2(wb) );
上面的行實(shí)例化了一個(gè)名為“instance2”的 mod_a 類型的模塊,然后將信號 wa(模塊外部)連接到名為 in1 的端口,將 wb 連接到名為 in2 的端口,將 wc 連接到名為 out 的端口。請注意這里的端口順序是無所謂的,因?yàn)闊o論其在子模塊端口列表中的位置如何,都將使用正確的名稱進(jìn)行連接。此外還要注意此語法中端口名稱之前的點(diǎn)。
預(yù)期的解決方案長度:大約 1 行。

答案

輸出波形


模塊是 Verilog 中基本單元的定義形式,是與外界交互的接口。
模塊格式定義如下:
模塊定義必須以關(guān)鍵字 module 開始,以關(guān)鍵字 endmodule 結(jié)束。
模塊名,端口信號,端口聲明和可選的參數(shù)聲明等,出現(xiàn)在設(shè)計(jì)使用的 Verilog 語句(圖中 Declarations_and_Statements)之前。
模塊內(nèi)部有可選的 5 部分組成,分別是變量聲明,數(shù)據(jù)流語句,行為級語句,低層模塊例化及任務(wù)和函數(shù),如下圖表示。這 5 部分出現(xiàn)順序、出現(xiàn)位置都是任意的。但是,各種變量都應(yīng)在使用之前聲明。變量具體聲明的位置不要求,但必須保證在使用之前的位置。

參考內(nèi)容:
5.1 Verilog 模塊與端口?| 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-module-port.html