Verilog 語法中關於模塊例化的方法


Verilog 語法中,關於模塊例化有兩種方法,一種是位置相關, 另外一種是名稱相關

verilog 語言中形成一個模塊:

module  module_name
(
input  a,
input  b,
output c,
input [31:0] d,
output [7:0] e,
.....

inout x
);

verilog  語法

...

endmodule

 

verilog 語言中模塊:

1)包括 module +  模塊名稱, ( …..   );    在 ()中包括相關的輸入(input),輸出(output), 輸入輸出(inout) 端口, 注意,最后一個端口沒有’ ,’ 

2) 模塊中相關的verilog 語法

3) endmodule

舉例:

module    add
(
input [3:0] a,
input [3:0] b,
output [4:0] c
);

assign c = a + b;

endmodule

 

在使用這個模塊時(模塊例化),我們有兩種方法例化, 1)按位置例化, 2)按名稱例化。

按位置例化

1)例化時,需要所有的參數順序必須和模塊本身的順序一致

2)例化時,只要寫端口名字即可。

 

按名稱例化

1)必須指定當前例化的端口名稱 

2)例化時,端口的順序可以自由排序,不一定和模塊本身的順序相同

 

 

舉例:

// 按位置例化 add 模塊

wire [3:0] x1;
wire [3:0] x2;
wire [4:0] x3;

// 希望 x3 = x1 + x2;
add      add_inst1
(
x1,    //對應 模塊本身的a
x2,    //對應 模塊本身的b
x3   //對應 模塊本身的c
);

下面的例化(add_inst1)是不正確的,大家要注意, 沒有按照模塊本身的順序進行例化。

add      add_inst1
(
x2,    //對應 模塊本身的a
x3, //對應 模塊本身的b
x1   //對應 模塊本身的c
);

 

// 按名稱例化 add 模塊

wire [3:0] x1;
wire [3:0] x2;
wire [4:0] x3;

add      add_inst3
(
.a (x1), 
.b (x2),
.c (x3) 
);

 

按照名稱例化 , 雖然傳遞的順序和 模塊本身不一致, 但依然可以被正確使用 

add      add_inst4
(
.b (x2),
.c (x3), 
.a (x1)
);

 

總結:

按位置例化, 例化時書寫比較簡單,非常類似與c語言的寫法, 缺點是位置不能變化。

按名稱例化, 例化時書寫比較多, 優點是順序可以任意更改。

 

兩種方法都是可以使用的, 建議初學者使用名稱例化, 雖然書寫比較多, 但保證正確還是比較關鍵的, 尤其是端口 數量比較多的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM