一、信號端口采用名稱關聯
語法結構:
.PortName(port_expr)
//PortName是頂層的名稱,port_expr是底層端口
//port_expr可以是一下任何類型
1.標識符
2.位選擇,如.C(d[0]),C端口連接到d信號的第0位
3.部分選擇,例.bus(din[5:4])
例:
module yumen(C,A,B)
.C(T3)//
二、各分層模塊之編寫
底層編寫:正常書寫后,最后用assign語句將輸出定義
例:
output [3:0] key_value;
原來的按鍵輸出按鍵值的次數,那么次數是reg型,
always @(posedge clk or negedge rst)
if(!rst)
ci<=5'b0;
else if(dawn_flagr!=4'b0)
ci<=ci+1'b1;
//此時ci是按鍵輸出值,是reg型,此時需要換一下輸出值,重新定義輸出數組,用assign賦值語句將ci賦值給輸出
//即
assign key_value=ci;
三、頂層模塊的編寫
1.所有中間變量必須重新聲明,否則會默認為一位的
2.注意在對在同一條線上的變量命名的時候使用同一名字
3.模塊例化后在連線語法:
module_name1 U1//模塊名字空格 加U?
(
.clk(clk),//注意,用逗號,外邊是頂層外部信號,括號內是底層模塊信號名字
.rst(rst),
.top_in_signal(U1_in_signal),//頂層輸入信號進入U1模塊
....
.U1_signal_output(U2_in),//U1輸出連到U2輸入,此信號需要聲明一下,否則會默認是一位的
....
);//括號內用逗號隔開,最后一個不加逗號,
module_name2 U2//
(
.clk(clk),//注意,用逗號,外邊是底層外部信號,括號內是頂層模塊信號名字
.rst(rst),
.U2_in(U1_output),
...
.Top_out_signal(U1_out_signal),//不是很確定,有待驗證
...
);//用分號