當咱們完成一個比較完整的系統的時候,一般須要編寫一個Testbench來驗證本身的設計的功能可否知足設計要求。在這個系統中一般會有一個top模塊來鏈接那些小的模塊,verilog經過實例化的方式來完成這些子模塊和頂層模塊的鏈接,而後頂層模塊能夠由此來調用各個子模塊。設計
調用模塊的端口通常有兩種方式,一種是位置關聯,一種是名字關聯,順序關聯不容易漏掉端口,名字關聯容易理解(兩個相同的名字確定好理解啊)ci
子模塊(這裏以一個簡單的全加器模塊說明)描述以下:module
module adder(a,b,cin,s,cout);方法
innput a,b,cin;top
output cout,s;端口
assign {cout,s} = a + b + cin;co
endmodule實例化
下面有一個頂層模塊調用全加器模塊:實例
module top(A,B,CIN,S,COUT);系統
...
adder ADDER(A,B,CIN,S,COUT);//這裏採用位置關聯
...
endmodule
若是採用名稱關聯
adder ADDER(
.a(A),
.b(B),
.cin(CIN),
.cout(COUT)
);
上面兩種關聯方式有一些共同點:
一、例化中必定會有一個例化名,好比上面的ADDER,就表明着對adder模塊的調用,這個例化名能夠本身定,沒有什麼特別要求。
值得一講的是名稱關聯,這種方法注意是前面寫的是子模塊內的端口名稱,括號裏面的是頂層模塊裏面的端口名稱。通常咱們寫模塊時都喜歡將兩個模塊裏面的端口名稱寫成同樣的,方便本身理解。
還有就是注意懸空端口的處理。綜合時懸空端口會有必定的影響。