1 for循環(huán)方式例化方法
先給出 sub_module
module sub(
input [7:0] din,
output logic [7:0] dout
);
assign dout = din;
endmodule
要將這個module分別例化成u_sub_0
和u_sub_1
,并且每個都例化四次
for循環(huán)的實現(xiàn)方式如下
module top(
input [8*4-1 : 0] din0,
input [8*4-1 : 0] din1,
output logic [8*4-1 : 0] dout0,
output logic [8*4-1 : 0] dout1
);
genvar i;
generate for(i=0; i<4; i++) begin:inst
sub u_sub_0 (
//output
.dout(dout0[i*8 +: 8]),
//input
.din(din0[i*8 +: 8])
);
sub u_sub_1 (
//output
.dout(dout1[i*8 +: 8]),
//input
.din(din1[i*8 +: 8])
);
end
endgenerate
endmodule
來看看例化后的效果
可以看到,總共4組inst,每組inst中存在兩個u_sub
接下來點開inst[0]
中的u_sub_0
,看看它的信號是什么樣的
依次點擊,然后到shell界面粘貼內(nèi)容
此時可以清晰的看到,這個din
信號是來自哪里,這也體現(xiàn)了,在begin
后命名block的重要性
2 數(shù)組的方式例化
同樣的 sub_module,同樣的例化要求,這次改用數(shù)組的方式進行例化
module top(
input [8*4-1 : 0] din0,
input [8*4-1 : 0] din1,
output logic [8*4-1 : 0] dout0,
output logic [8*4-1 : 0] dout1
);
sub u_sub_0 (
//output
.dout(dout0),
//input
.din(din0)
);
sub u_sub_1 (
//output
.dout(dout1),
//input
.din(din1)
);
endmodule
來看看這次的例化效果
在打印出這種方式的層次化結(jié)構(gòu)
同樣有清晰的辨識效果
4 一些其他的技巧
對于二維數(shù)組而言,如果想在verdi中將二維數(shù)組展開,那么我們需要在dump波形是加上這句話
$fsdbDumpMDA;
這樣就可以在verdi中展開二維數(shù)組
當(dāng)一個數(shù)組范圍比較大不方便分析,可以將數(shù)組進行分段,操作如下
比如我要將32 bits位寬的din0信號分成8 bits位寬,可以這樣設(shè)置
效果如下
實現(xiàn)了對信號的拆分
對于一些信號,在這種例化方式下拉信號的波形不是很容易(這個例子一時沒想起來 >_<)
要拉出確定的波形可以這樣操作
在波形界面按g
,會彈出下面這個框
讓后需要哪個信號選中即可添加
-
Shell
+關(guān)注
關(guān)注
1文章
363瀏覽量
23257 -
dump
+關(guān)注
關(guān)注
0文章
13瀏覽量
9498 -
Verilog設(shè)計
+關(guān)注
關(guān)注
0文章
20瀏覽量
6509
發(fā)布評論請先 登錄
相關(guān)推薦
評論