Verdi是一個(gè)功能強(qiáng)大的debug工具,可以配合不同的仿真軟件進(jìn)行debug,很多企業(yè)常用的就是VCS+Verdi或或者Xcelium(xrun)+Verdi的方式進(jìn)行代碼的仿真與檢查,Verdi使用情形主要是IC驗(yàn)證工程師(Debug),IC設(shè)計(jì)工程師(Review)??傊?,Verdi很重要,作為一名ICer要是不會(huì)用Verdi,確實(shí)說(shuō)不過(guò)去。
一、Verdi環(huán)境配置
(一)公司 - 一般拿來(lái)直接用
1. 在芯片設(shè)計(jì)公司中,九成公司應(yīng)該都配備了Verdi,一般都會(huì)放在公司服務(wù)器目錄的Tools目錄下,我們可以通過(guò)which命令查看任何公司購(gòu)買的EDA Tools所在路徑,查看各種版本/對(duì)應(yīng)文檔/配置等:
2. 有些時(shí)候,我們需要切換Verdi版本,來(lái)滿足不同項(xiàng)目或其他需求,在.cshrc中配置 或 直接module load 對(duì)應(yīng)Verdi版本,最后module list查看是否load成功。
(二)其他 - 需自己摸索配置再用 (考慮排版+代碼風(fēng)格,直接上圖)
? ?
二、配置波形文件“三方法”“八奇技”
FSDB(FastSignal Database)是Verdi支持的文件格式,用于保存仿真產(chǎn)生的信號(hào)波形。 據(jù)Verdi文檔說(shuō)明,F(xiàn)SDB比標(biāo)準(zhǔn)的VCD格式節(jié)省磁盤空間,處理速度更快。
(一)常用“三方法”:
1. (最常用) 一般是在testbench(驗(yàn)證環(huán)境,簡(jiǎn)稱tb)中的top.sv文件里,創(chuàng)建個(gè)initial塊結(jié)合$fsdbDumpxxx()命令來(lái)配置:
提醒:使用這種方法,vcs編譯前需要添加-debug_access選項(xiàng)。
2. (不常用) VCS添加編譯選項(xiàng)"+vcs+fsdbon":
這樣指定仿真過(guò)程生成.fsdb格式的波形,默認(rèn)則保存成名為novas.fsdb的波形文件;
注
意的是,仿真過(guò)程會(huì)將整個(gè)design給dump下來(lái),同時(shí)會(huì)自動(dòng)添加 -debug_access 選項(xiàng)。
另外,配置過(guò)程中若出錯(cuò),首先檢查一下LD_LIBRARY_PATH是否配置對(duì),目錄下有沒(méi)有Verdi需要的庫(kù)文件xxx.so(靜態(tài)庫(kù)),pli.a(動(dòng)態(tài)庫(kù)),xxx.tab(表文件 for VCS)等,一般都是這里沒(méi)配對(duì)導(dǎo)致沒(méi)生成波形而報(bào)錯(cuò);
提醒:vcs+fsdbon和tb中用$fsdbdumpvar()選一種方式即可;
3. (不常用) 使用UCLI命令: UCLI:Unified Command Line Interface
UCLI其實(shí)就是vcs的命令交互模式,需要在編譯時(shí)加入參數(shù) (-ucli) 以開(kāi)啟ucli,否則ucli交互時(shí)只能使用簡(jiǎn)單的'run'、'dump'、'quit'命令。
啟動(dòng)方式例如:./simv -ucli
該方法與方法1基本一樣,均是使用fsdbDumpvars/fsdbDumpfile等命令,不同之處在于使用的方式和便捷程度,與方法1相比,該方法可以在不重新編譯的情況下,通過(guò)修改.ucli.cmd文件中的命令,來(lái)指定需要dump波形的模塊和層級(jí),從而節(jié)省編譯帶來(lái)的資源消耗。
得注意的是,使用fsdbDumpvars/fsdbDumpfile等命令時(shí),不需要像方法1使用時(shí),前方使用符號(hào): $。
執(zhí)行仿真的過(guò)程中,通過(guò)./simv -ucli -i.ucli.cmd方式給入,.ucli.cmd(名字隨便取,但格式不能變)中存放命令舉例如下:
提醒:使用這種方法,vcs編譯前需要添加-debug_access選項(xiàng)。
(二)常用命令“八奇技”(結(jié)合例子看容易理解):
1. $fsdbDumpon - 打開(kāi) FSDB dumping;
2. $fsdbDumpoff - 關(guān)閉 FSDB dumping; 上述兩個(gè)命令,一般搭配wait()函數(shù)使用,更加靈活,eg:
表示之前未dump波形,直到等到o_xxx_cnt==1024時(shí),才開(kāi)始dump波形;
3. $fsdbDumpfile("fsdb_name", limit_size) - 指定dump文件;
fsdb_name | - 表示指定的fsdb文件名,如"ip.fsdb" |
limit_size | - 表示dump波形的最大size(多少M(fèi)B)- 可不配置 |
4. $fsdbDumpvars(depth,instance, "option=") - dump指定模塊的信號(hào); 這個(gè)命令可以多次使用,但一般不使用多次,使用多次目的是:想用來(lái)dump不同instance的波形,想達(dá)到相同目的其實(shí)有更加靈活的方法 ——“建立dump_scope.list + $fsdbDumpvarsToFile()” (后面會(huì)介紹);
depth | - 0 表示dump instance以下所有層級(jí)的信號(hào)(常用) - 1 表示只dump instance這一層的信號(hào) |
instance | -指定dump的hierarchy,如 dut.top.xxx |
option | - dump時(shí)可以選擇的一些選項(xiàng):- 可不配置 |
"+mda" | - 表示dump memory或者M(jìn)DA(多維數(shù)據(jù))的數(shù)據(jù); |
"+packedmda" | - 表示dump 壓縮的memory數(shù)據(jù); |
"+functions" | - 表示dump function和task里的信號(hào); |
"+all" | -表示dump all; |
"+Reg_Only" | - 表示只dump reg類型的數(shù)據(jù); |
"+strength" | - 表示開(kāi)啟強(qiáng)力dump開(kāi)關(guān); |
"+struct" | - 表示dump struct數(shù)據(jù)(默認(rèn)開(kāi)); |
"+power" | - 表示dump power相關(guān)信號(hào)的數(shù)據(jù)(默認(rèn)開(kāi)); |
"+fsdbfile" | - 表示直接dump指定的hierarchy的fsdb文件名字,eg: |
5. $fsdbDumpMDA(depth, instance,"options") - dump指定模塊中的多維數(shù)組,內(nèi)部參數(shù)含義同上; eg_1:如果想更方便,可直接什么參數(shù)都不配,即默認(rèn)都dump
6. $fsdbDumpSVA(depth, instance, "option") - dump指定模塊中的assertion,內(nèi)部參數(shù)含義同上; eg_1:將該instance (top)下所有assert全部dump到SVA.fsdb中
eg_2:如果想更方便,可直接什么參數(shù)都不配,即默認(rèn)都dump
7.$fsdbAutoSwitchDumpfile(file_size,"fsdb_name",number_of_files,"log_file_name", "+fsdb+no_overwrite") - 波形過(guò)大/資源緊張情況,靈活使用拆分Dump波形很有用
file_size | 波形文件大小限制,單位為MB,最小為10M,若值小于10MB則默認(rèn)10MB; |
"fsdb_name" | 波形文件的名字,在實(shí)際加載波形時(shí),文件名為fsdb_name_000.fsdb, fsdb_name_001.fsdb …; |
number_of_files | 最多可以加載多少個(gè)fsdb_size這么大的波形文件,如果寫(xiě)為0,則默認(rèn)沒(méi)有限制; |
"log_file_name" | 指定log文件的名字,log文件中會(huì)記錄每段波形的起始和中止時(shí)間; - 可不配置 |
"+fsdb+no_overwrite" | 當(dāng)number_of_files限制的個(gè)數(shù)達(dá)到時(shí)停止dump波形,反之,一旦超出限制,會(huì)從頭dump,這樣會(huì)一定程度上覆蓋掉起初的波形文件;- 可不配置 |
eg_1:?jiǎn)蝹€(gè)波形文件為500MB,最大可以加載10個(gè)這么大的文件,每段波形的起始和中止時(shí)間記錄在fsdb.log中,并具備防overwrite的限制;
8. $fsdbDumpvarsToFile("./dump_scope.list"); - 將需要dump的hierarchy以及depth放到一個(gè)文件里吃進(jìn)來(lái),波形過(guò)大/資源緊張情況,靈活使用選取必要波形Debug; ./ - 表示當(dāng)前路徑,也就是dump_scope.list要與top.sv在同一路徑,當(dāng)然也可以靈活改變路徑; eg_1:dump_scope.list (0/1代表深度,用法通上述函數(shù)一致;#用于注釋)
審核編輯:劉清
-
IC設(shè)計(jì)
+關(guān)注
關(guān)注
38文章
1295瀏覽量
103918 -
EDA工具
+關(guān)注
關(guān)注
4文章
267瀏覽量
31785 -
VCS
+關(guān)注
關(guān)注
0文章
79瀏覽量
9600
原文標(biāo)題:Verdi環(huán)境配置、生成波形的“三方法”和“八奇技”
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論