FIR設(shè)計(jì)過(guò)程中,不可避免使用到reg/wire的二維數(shù)組;在仿真的過(guò)程中,這些二維數(shù)組卻帶來(lái)不少麻煩,因?yàn)楦鶕?jù)之前的內(nèi)容,我們根本看不到這些二維數(shù)組的值。
而且,Verilog的端口定義是不支持二維數(shù)組這樣的定義,所以也無(wú)法把數(shù)組傳到頂層觀察。
而實(shí)現(xiàn)過(guò)程中,這些二維數(shù)組卻是流水線操作中的一部分,如果不知道它們的值,找BUG的過(guò)程肯定會(huì)十分艱難。
好在搜集各方資料后,經(jīng)過(guò)一番實(shí)踐,總算是得出了如何觀察這些二維數(shù)組的值的方法。
首先,在testbench里面修改一下:
原來(lái)的版本:
initial begin
$fsdbDumpfile("tb.fsdb");
$fsdbDumpvars;
end
第一個(gè)語(yǔ)句是產(chǎn)生一個(gè)fsdb文件,文件名為tb.fsdb,第二句是保存所有變量的波形。這里是為了產(chǎn)生fsdb文件,這樣Verdi才能看到根據(jù)fsdb文件顯示波形
修改后的版本:
initial begin
$fsdbDumpfile("tb.fsdb");
$fsdbDumpvars;
$fsdbDumpMDA();
end
第三行加了$fsdbDumpMDA(),這樣就可以Dump所有的Memeory值,不管什么信號(hào)都可以保存到Memory。
VCS編譯命令使用參數(shù)如下:
vcs \\
*.v -LDFLAGS -Wl,--no-as-needed -timescale=1ns/1ps \\
-fsdb -full64 -R +vc +v2k -sverilog -debug_all
仿真結(jié)束后,想使用Verdi查看二維數(shù)組的值,啟動(dòng)Verdi。
命令行如下:
verdi -nologo \\
+v2k -sverilog *.v -ssf tb.fsdb &
可以在Verdi添加信號(hào)時(shí)看到二維數(shù)組,如下圖:
Verdi查看可以看到二維數(shù)組
添加之后:
可以從圖中看到,很不直觀,不能直接看出有什么問(wèn)題。
換個(gè)思路,按照下圖操作,選擇Memory里的Memory/MDA工具
按照序號(hào)操作
按照?qǐng)D中1,2的順序,然后按照下圖選擇想查看的信號(hào)
點(diǎn)擊后選擇想觀察的信號(hào)
顯示信號(hào)結(jié)果
這里需要說(shuō)明,查看二維數(shù)組內(nèi)部存儲(chǔ)的值,可以使用框1里面的鍵,左右可以控制仿真時(shí)間,信號(hào)的值會(huì)跟隨仿真時(shí)間改變而改變???的時(shí)間跨度可以更改。
默認(rèn)顯示的信號(hào)都是十六進(jìn)制,如果想改變進(jìn)制顯示,在2的位置右鍵可以改變進(jìn)制顯示,并選擇有符號(hào)或無(wú)符號(hào)顯示。
地址數(shù)據(jù)也是十六進(jìn)制顯示,可以在3的位置右鍵改變?yōu)槭M(jìn)制顯示。
有了這些工具的幫助,便可以從出錯(cuò)的結(jié)果一步步往上查,追查BUG的效率提高不少。
總結(jié),操作順序:
- Testbench加入$fsdbDumpMDA();
- 使用Verdi的Memory/MDA工具查看
-
FIR
+關(guān)注
關(guān)注
4文章
146瀏覽量
33069 -
Verilog
+關(guān)注
關(guān)注
28文章
1343瀏覽量
109925 -
VCS
+關(guān)注
關(guān)注
0文章
78瀏覽量
9581 -
MDA
+關(guān)注
關(guān)注
0文章
13瀏覽量
12204
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論