階層式設計
將模組的埠與外部訊號連接的方法有兩種,分別是:依照定義模組時埠列的「順序」(in order)來連接,以及依「指定名稱」(by name)的方法來連接。這兩種方法必須分開使用,不可以同時在相同模組中使用。
依照定義模組時埠列的「順序」(in order)來連接 :
這個方法對於初學Verilog的人來說是最直覺的方法,將外部訊號依照定義這個模組時的埠列順序街道引用這個模組的別名。
依照「指定名稱」(by name)的方法來連接 :
對於一個較大的設計而言,ㄧ個模組擁有50個不是很正常的事,這個時候若要記得每個埠的順序是相當困難且容易犯錯。Verilog為此藉由指定埠的名稱,將外界訊號連接到埠的方法,使用這個方法就不需要考慮到輸入訊號需要對應埠列順序的問題。
Exp:
首先定義較小的模組 : Mux, Register8及Rotate_Data之後再去引用它們。
// 小模組 1
Module Mux(sel, a, b, out);
Input sel;
Input [7:0]a,b;
Output [7:0]out;
Wire [7:0]out;
Assign out=sel?a:b;
Endmodule
// 小模組 2
Module Register8(clock, reset, data, q);
Input clock, reset;
Input [7:0]data;
Output [7:0]q;
Reg [7:0]q;
always@(posedge clock)
begin
if(reset)
q=0;
else
q=data;
end
endmodule
// 小模組 3
Module Rotate_Data(clock, reset, left_rotate, data, q);
Input clock, reset, left_retate;
.
.
.
Endmodule
// 依順序(by order)
// 依照定義模組時的埠列順序來連接
Module exp_byorder(clock, reset, sel, left_rotate, a, b, out);
Input clock, reset, sel, left_rotate;
Input [7:0]a,b;
Output [7:0]out;
Wire [7:0]mux_out,reg_out;
Mux Mux_1(sel,a,b,mux_out);
Register8 Register8(clock,reset,mux_out,reg_out);
Rotate_Data Rotate_Data1(clock,reset,left_rotate, reg_out, out);
endmodule
// 依名稱(by name)
// 依此方法來連接,Port的順序就無所謂了
Module exp_byorder(clock, reset, sel, left_rotate, a, b, out);
Input clock, reset, sel, left_rotate;
Input [7:0]a,b;
Output [7:0]out;
Wire [7:0]mux_out,reg_out;
Mux Mux_1(.sel(sel),.a(a),.b(b),.out(mux_out));
Register8 Register8(.clock(clock),.reset(reset),
.data(mux_out),.q(reg_out));
Rotate_Data Rotate_Data1(.clock(clock),.reset(reset),
.left_rotate(left_rotate),.data(reg_out),.q(out));
endmodule
留言列表