概念
當我們完成一個比較完整的系統的時候,通常需要編寫一個Testbench來驗證自己的設計的功能能否滿足設計要求。在這個系統中通常會有一個top模塊來連接那些小的模塊,verilog通過實例化的方式來完成這些子模塊和頂層模塊的連接,然后頂層模塊可以由此來調用各個子模塊。
用法
調用模塊的端口一般有兩種方式,一種是位置關聯,一種是名字關聯,順序關聯不容易漏掉端口,名字關聯容易理解(兩個相同的名字肯定好理解啊)
舉例說明
子模塊(這里以一個簡單的全加器模塊說明)描述如下:
module adder(a,b,cin,s,cout);
innput a,b,cin;
output cout,s;
assign {cout,s} = a + b + cin;
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)
);
上面兩種關聯方式有一些共同點:
1、例化中一定會有一個例化名,比如上面的ADDER,就代表着對adder模塊的調用,這個例化名可以自己定,沒有什么特別要求。
值得一講的是名稱關聯,這種方法注意是前面寫的是子模塊內的端口名稱,括號里面的是頂層模塊里面的端口名稱。一般我們寫模塊時都喜歡將兩個模塊里面的端口名稱寫成一樣的,方便自己理解。
還有就是注意懸空端口的處理。綜合時懸空端口會有一定的影響。