3月 13, 2010

【筆記】Verilog Module

@
  在之前的簡介中提到,Verilog 以模組(module)作為描述的基本單位。模組如同程式語言中的函式(function),可以將一部份的程式碼封裝起來,並提供對外溝通的介面(interface)。如此一來,我們便可以重複利用這些定義好的模組,以構成較大、較複雜的系統。



  我們可以將模組看成兩個部份:連接埠(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 回覆:

張貼留言