我們調用ip核生成一個4位計數器後想用該計數器模塊生成一個8位的計數器,這裏就需要級聯兩個計數器
這個是counter模塊:
module counter (
cin,
clock,
cout,
q);//下面的計數器實現代碼我就不寫了
...............
...............
頂層文件應該是這樣的:
module counter_top(cin,clk,cout,q);
input cin;
input clk;
output cout;
output [7:0]q;
wire cout0;
counter counter0(
.cin(cin),
.clock(clk),
.cout(cout0),
.q(q[3:0])
);
counter counter1(
.cin(cout0),
.clock(clk),
.cout(cout),
.q(q[7:4])
);
endmodule
從上面代碼就可以看出頂層文件和模塊文件的不同了,模塊文件是不同模塊的具體實現,而頂層模塊文件是使用個模塊進行列化(通俗來說是連線),來組成一個更大的系統。
還不明白?打個比方:
我們畫PCB時,一般都會分模塊把原理圖畫出來,比如電源模塊,串口模塊,顯示模塊等等,在畫PCB時我們一般會先把各個模塊內部的線連接起來(這就是verilog中的底層模塊創建),當把所有的模塊內部線布完後下一步就是布模塊與模塊之間的線,最後構成一塊完整的PCB圖(這就是verilog中的頂層模塊的創建)其實這也是PCB製作的分層次設計方法,這兩者之間有互同之處