舉個簡單電路的例子:
module adder(
a,
b,
c
);
input a; //輸入埠 敘述
input b; //輸入埠 敘述
output c; //輸出埠 敘述
wire c; //資料型態 敘述
assign c = a & b;//內部電路 敘述
endmodule
上方為一個 AND 邏輯閘,由此可知,一個完整的模組是由 module
以及 endmodule
包起來的,而 adder 那個位置就要放的則是模組名稱
,而後面的括號內則是放所有的輸入及輸出腳位
,接著裡面的最上方會宣告每隻腳位是輸出還是輸入,再來是宣告變數的資料型態。
在這裡,只要是輸入,一律都是 input
,輸出的話,如果沒有特別宣告則默認 wire
。
input
Output
InOut(雙向埠)
舉個例子,在實現 I2C protocol 時就會用到這個好用的東西了,為甚麼這麼說呢?先來看看下面這張圖
I2C 的運作機制是這樣的,I2C 僅使用兩個 BUS,串列資料線(SDA)和串列時鐘線(SCL),因此當 master 送資料給 slave 時此時 master 的 SDA 要設成 out 狀態,而 slave 的 SDA 要設成 in 的狀態,相反過來,當 slave 送資料給 master 時此時 slave 的 SDA 要設成 out 狀態,而 master 的 SDA 要設成 in 的狀態,所以會需要可輸入又可輸出的 inout 資料型態。