140 likes | 273 Views
第 四 章 模組與輸出入阜 (Modules and Ports). 4.1 模組 (Modules). 模組名稱 阜列表、阜的型態宣告 ( 如果有的話 ) 、參數(選擇性的). 接線 wire 、暫存器 reg 以及 其他變數的宣告. 資料處理的敘述. always 及 initial 區塊所有的行 為模式敘述都定義在這些區塊. 低階層次模組的別名取用. 任務及函數. endmodule statement. 圖 4-1 Verilog 模組的組成元件.
E N D
第 四 章 模組與輸出入阜 (Modules and Ports)
4.1 模組(Modules) 模組名稱 阜列表、阜的型態宣告(如果有的話)、參數(選擇性的) 接線wire、暫存器reg以及 其他變數的宣告 資料處理的敘述 always及initial區塊所有的行 為模式敘述都定義在這些區塊 低階層次模組的別名取用 任務及函數 endmodule statement 圖4-1 Verilog 模組的組成元件 一個模組定義的開頭,一定是關鍵字module,接下來是模組的名稱、輸出入埠的列表、輸出入埠的型態宣告,接著可能是選擇性使用的參數列表(parameter)。 圖4-1其他的五個部份包括: 變數的宣告、資料處理的敘述、取用低階層次模組的別名 、行為模式方塊,與任務或是函數。
Sbar (set) n1 Q Rbar (reset) Qbar n1 圖 4-2 SR閂 下圖4-2為SR閂(SR latch)來說明圖4-1的各個部份。 SR閂有S與R兩個輸入埠,和Q與Qbar兩個輸出埠,SR閂與模擬 如下範例。
範例4-1 SR閂的各個部份 //模組名稱為SR_latch module SR_latch(Q,Qbar,Sbar,Rbar); //埠的宣告 output Q,Qbar; input Sbar,Rbar; //取用低階層次模組的別名 //注意訊號線連接方式 nand n1(Q,Sbar,Qbar); nand n2(Qbar,Rbar,Q); //關鍵字endmodule endmodule //模組名稱與輸出入埠的列表 //觸發模組
module Top; //宣告wire reg與其他變數 wire q,qbar; reg set,reset; //取用低階層次模組別名 SR_latch m1(q,qbar,et,eset); //行為處理模式initial initial begin $monitor($time,”set=%b,reset=%b,q=%b\n”,set,reset,q); set = 0 ; reset = 0 ; #5 reset = 1; #5 reset = 0; #5 set = 1; end //關鍵字endmodule endmodule
4.2 輸出入埠(Ports) Top full adder (4-bit) fulladd4 a sum b c_out c_in 圖4-3 Top與全加器模組別名的輸出與輸入埠 module fulladd4(sum,c_out, a,b,c_in) ; //有輸出入埠列表的模組 odule Top; //沒有輸出入埠的列表的模組,通常用在模擬區塊 輸出入埠提供一個模組與外界溝通的介面,好比一個晶片的 輸出、輸入腳一樣。圖4-3所顯示是一個在Top模組中定義一 個取用四位元加法器模組的別名。
4.2.2 埠的宣告(Port Declaration) 埠的宣告有下列幾種類別:
4-2 4-bit 加法器的輸出埠宣告如範例4-3中所示: 範例4-3 埠的宣告 module fulladd4(sum,c_out,a,b,c_in); //開始宣告埠 output [3:0] sum; output c_cout; input [3:0]a,b; input c_in; //結束埠的宣告 … <module internals> … endmodule
4.2.3 輸出入埠的連接規定(Port Connection Rules) 圖4-4 輸出入埠的相連規定
引用範例4-3 fulladd4模組的別名,如下所示: 範例4-6 非法的輸出入埠連結 module top; //宣告連接用的變數 reg [3:0] a,b ; reg c_in ; reg [3:0] sum ; wire c_out; //引用模組fulladd4 並取別名為 fa0 fulladd4 fa0(SUM,C_OUT,A,B,C_IN); //這是一個非法的連結,因為模組fulladd4的輸出埠連接 //到一個型態為reg的 SUM 變數上。 . . <stimulus> . . endmodule
4.2.4 輸出入埠與外部訊號連接的方法(Connecting Ports to External Signals) 範例4-7引用範例4-3定義的fulladd4模組的別名。 範例4-7依照輸出入阜的列表順序連接 module top; //宣告用來連接的變數 reg [3:0] A,B; reg C_IN; Wire [3:0] SUM; Wire C_OUT; //引用模組fulladd4 並取別名為 fa_ordered/訊號依照輸 //出入阜的列表宣告的順序連接 fulladd4 fa_ordered (SUM,C_OUT,A,B,C_IN); … <stimulus> …
endmodule module fulladd4(sum,c_out,a,b,c_in); output [3:0] sum; output c_cout; input [3:0] a,b; input c_in; … <module internals> … endmodule
4.4 總結(Summary) 模組定義包含以下各個部份,其中關鍵字module與endmodule 和模組名稱是一定要的,其餘的部份包含有: • 輸出入埠的列表 • 埠的宣告 • 變數與訊號的宣告 • 資料處理敘述 • 行為模式區塊 • 低階層次模組的引用 • 任務或是函數