可程式設計邏輯/Verilog 模組結構
模組是 Verilog HDL 中的基本描述單元。Verilog 模組,類似於其他程式語言中的函式,是可以在單個程式中使用和重複使用的程式碼段。Verilog 模組使用 module 關鍵字宣告,並使用 endmodule 關鍵字結束。
基本模組的佈局如下
module MyModule ([parameters]);
inputs ...
outputs ...
internal variables ...
...
Module Code ...
endmodule
模組使用模組名(在本例中為“MyModule”)宣告,後面跟著引數列表。在本例中,引數是模組可以與其互動的輸入和輸出訊號列表(也稱為“埠列表”)。如果我們綜合 Verilog 程式碼,這些引數將表示將我們的模組連線到微晶片其餘部分的物理線連線。請注意,在引數列表中,我們不需要指定連線的型別,也不需要指定它是輸入還是輸出。我們將在接下來的幾行中執行此操作。以下是一個帶有引數的示例模組宣告
module MyModule(a, b, c, clock);
在 Verilog 中,所有輸入和輸出都透過引數列表傳遞。模組需要此輸入和輸出埠列表才能與環境互動。
模組不像 C 函式或 Java 函式那樣返回值。因此,我們使用 input 和 output 關鍵字來指定哪些引數是哪個方向的
module MyModule(a, b, c, clock); input a, b, clock; output c; ... endmodule
輸出連線通常不會初始化,因此嘗試從指定為輸出的連線讀取資料是一種不好的做法。
當從更高級別的模組呼叫 Verilog 模組時,我們需要包含一個 例項識別符號。這樣做是因為當我們將程式碼綜合到物理晶片上時,需要並行呼叫多次的函式實際上會建立多次!這意味著如果我們希望同一個模組並行地執行它本身,我們需要指示綜合程式建立模組的多個物理副本。此外,使用例項識別符號允許一個人將多個模組“連線”在一起(例如,如果我們希望一個模組的輸出成為另一個模組的輸入)。對於第一個示例定義,假設我們有一個定義如下所示的 AND 模組
module AND(a, b, c); input a, b; output c; assign c = a & b; endmodule
如果我們想在另一個模組中使用 AND,我們需要像下面這樣呼叫它
wire w, x, y, z; ... AND A1(w, x, y); AND A2(w, y, z); AND A3(z, x, w);
請注意我們如何在模組名“AND”和引數列表之間放置一個識別符號?這是一個例項識別符號。請注意,我們正在定義 AND 模組的 3 個獨立例項。
識別符號可以由字母數字字元和下劃線(_)組成,但不能以數字開頭。