介紹完了線路和線路的應用後,我們要開始組裝成模組囉!
但是在開始之前,我們要先認識模組的基本元件。
Port 的中文是端口,意思是說如果外部想要與模組有任何互動,則必須透過 Port 來交流。
模組會使用到的 Port 大致分成三種:
其中, input 和 output 最常被使用到,因此之後會著重在介紹這兩種端口。
Port 到底是什麼呢?簡單來說,他也是一種線路,但是他還有一個功能就是連接模組內外。如果沒有特別指定,port 的預設為 wire 。
語法如下:
module <Name>(
<port1>,
<port2>,
...
);
// some code
endmodule // 宣告結尾所需關鍵字
定義端口變數的方法大致可以分成兩種:
我們來嘗試定義半加器 (Half Adder) 的模組吧!
半加器所需的端口有: 輸入端口 A, 輸入端口 B, 輸出端口 Cout, 輸出端口 Sum 。
// 方法 (一)
module HalfAdder (A, B, Cout, Sum);
input A, B; // 指定 port 的類型:input
output Cout, Sum; // 指定 port 的類型:output
// some code
endmodule
// 方法 (二)
module HalfAdder (
input A, B,
output Cout, Sum
);
// some code
endmodule
這兩種方法中,我比較喜歡的是方法二,因為我可以很清楚知道每一個端口的功用為何,不需要透過內部定義來查證。
加深一點難度吧!我們嘗試實作四位元的加法器,所需的端口有: 輸入端口 A (4-bit), 輸入端口 B (4-bit), 輸出端口 Sum (4-bit), 輸入端口 Cout (1-bit)
module Add4 (
input [3:0] A, B,
output [3:0] Sum,
output Cout
);
// some code
endmodule