我們可以將模組看成兩個部份:連接埠(port)的宣告,以及模組的主體(body)。
其中,連接埠類似於程式語言中函式的參數(parameter),提供了對外溝通的介面。包含了輸入埠(input)、輸出埠(output)、或是兼具輸出入的雙向埠(inout)。簡單來說的話,其實可以把連接埠想成一顆 IC 上面的接腳(pin)。
而模組主體則類似於程式語言中的函式主體,表達了模組的結構,或是模組的功能與行為。
以下是一個 Verilog 的模組,代表一個 and 邏輯閘:
module AndGate(out, a, b); input a, b; output out; and(out, a, b); endmodule
接著,讓我們一步一步理解這個簡易的模組。
module AndGate(out, a, b);
這裡的「module」為 Verilog 語法的關鍵字,代表一個模組宣告的開頭;「AndGate」為這個模組的名稱(註1);而括號中的 out、a、跟 b,則是這個模組的連接埠(註2)。
不過,在這裡並沒有指明連接埠的類型(input、output、或是 inout)。所以我們將在下面兩行宣告它們:
input a, b; output out;
我們宣告 a 跟 b 為 AndGate 的輸入埠,且 out 為 AndGate 的輸出埠。
而模組主體的部份,我們只做了一個簡單的動作:
and(out, a, b);
「and」為 Verilog 提供的內建邏輯閘。這裡的動作是將輸入埠 a 跟 b 進行 and 運算,並以輸出埠 out 作為運算後的結果(註3)。
最後,我們以「endmodule」關鍵字結束模組的宣告:
endmodule
這個模組的示意圖大致如下:
註1. 你可以根據模組的功能,自行取一個有意義的名稱。
註2. 一般來說,我們習慣將 output 寫在前面、將 input 寫在後面。
註3. 或許想成「將 a 跟 b 接到 and gate 的 input 接腳,並將 out 接到 and gate 的 output 接腳」會比較好理解。
0 回覆:
張貼留言