1. 基礎知識
1.1. verdi
VCS和Verdi這兩個工具,這兩個工具目前都屬于synopsys公司。VCS主要負責編譯運行Testbench和RTL,并負責生成相應的波形文件。而verdi主要負責加載波形文件,查看信號的波形及其對應的代碼來進行調試驗證。Verdi最開始是由novas公司設計的,在2008年,被臺灣的EDA廠家springsoft(源笙)收購了。在2012年,synopsys收購了spring soft公司,所以此時Verdi才正式屬于synopsys。
Verdi?自動調試平臺是一種用于調試數字電路設計的高級解決方案,可用于提高復雜的片上系統(SoC),ASIC和FPGA設計效率。傳統的調試工具僅依靠結構信息和發揮工程師的個人能力從結構中推斷出設計行為。 Verdi平臺提供強大的技術,幫助工程師理解復雜和不熟悉的設計行為,自動化困難和繁瑣的調試過程,統一各種復雜的設計環境,并推斷設計的動態行為。
除了源代碼瀏覽器的標準功能,原理圖,波形,狀態機圖和波形比較(用于比較FSDB格式的仿真結果),Verdi平臺還包括使用時間流視圖自動跟蹤信號活動的高級功能,基于斷言的調試,功耗感知調試以及事務和消息數據的調試和分析。所有這些都可以在圖形用戶界面中使用,該平臺使用支持多窗口對接的Qt平臺,并且可以輕松定制。
Verdi平臺使工程師能夠在傳統解決方案的一小部分時間內定位,理解和解決錯誤。這可以最大限度地提高昂貴工程師資源的效率,顯著降低成本,并大大加快將硅片推向市場的過程。
1.2. FSDB文件
fsdb文件是verdi使用一種專用的數據格式,類似于VCD,但是它是只提出了仿真過程中信號的有用信息,除去了VCD中信息冗余,就像對 VCD數據進行了一次huffman編碼。因此fsdb數據量小,而且會提高仿真速度。我們知道VCD文件使用verilog內置的系統函數來實現 的,fsdb是通過verilog的PLI接口來實現的。$fsdbDumpfile,$fsdbDumpvars等 另外,在VCS仿真器中還有一種VCD+的數據格式VPD,詳細情況參照VCS的使用。 注意:WIF:波形中間格式;WLF:波形日志文件。由于在ModelSim下只能打開WLF文件 使用ModelSim行命令vcd2wlf 將VCD文件轉化為WLF文件。
2. 分析引擎
- 結構分析:分析設計結構以顯示組件的連接方式
- 行為分析:分析設計和仿真結果,以顯示設計的行為
- 斷言評估:從之前的仿真中搜索有關設計操作的詳細信息
- 事務/消息分析:分析FSDB文件中的事務和消息(日志)數據,并在nWave和電子表格視圖中可視化
- 功耗狀態評估:根據UPF中的功耗意圖描述以及FSDB文件中相關信號的值評估功耗狀態
3. 可視化
Verdi平臺以時間流視圖的形式提供無與倫比的時間可視化功能。這一革命性的工具從設計數據和仿真結果中提取并顯示多周期時間行為。
此外,Verdi平臺還包括最先進的結構可視化和分析工具:nTrace用于源代碼,nWave用于波形,nSchema用于原理圖/邏輯圖,nState用于有限狀態機(FSM)。這些工具專注于以RTL中的信號關系,原理圖/邏輯圖中的物理連接,FSM氣泡圖中的狀態和轉換以及波形中的值變化的形式分析設計結構。
Verdi平臺中的Property Tools窗口為斷言提供集中支持,并允許從斷言失敗到相關設計活動的快速遍歷。而事務/消息分析器可以在保存到FSDB文件的事務或日志信息的更高抽象級別上啟用調試和分析。 Power Manager窗口提供電源意圖的可視化,并支持與其他Verdi平臺窗口的交叉探測。
4. 波形
- 信號窗口:如果需要拖動信號改變顯示順序,需要點擊鼠標中鍵即滾輪選中需要拖動的信號,如下圖所示,而黃色光標表示信號拖動后所處位置;改變黃色光標的位置也需要通過點擊鼠標中鍵來完成,配合剪切、復制和粘貼信號等操作。還可以分組信號,添加空白等來排列信號。信號可以顯示完成路徑或短路徑,可以通過View菜單中的hierarchical name來切換,也可以通過快捷鍵H。
- 波形窗口:在波形窗口中最主要的是光標和標記的操作,可以由三個鍵的組合操作就能完成所有工作。
- 通過鼠標左鍵控制光標的位置;
- 通過鼠標中鍵控制標記的位置;
- 通過鼠標右鍵放大光標和標記間區域的波形至整個波形窗口。
在移動光標和標記時,要注意一個選項Waveform->Snap Cursor To Transitions,在使能該選項時,光標和標記始終處于信號波形變化邊沿,如1-bit信號的上升沿或者下降沿;在不使能該選項時,光標和標記可以在信號波形任意位置。
nWave 的波形窗口中默認有一個Cursor (黃色)和一個Marker (白色),左鍵是Cursor,中鍵是Marker,在波形窗口中右鍵是放大Cursor 和Marker 之間波形的快捷鍵。默認情況下Cursor 和Marker 都是停留在信號的Transition 處,你可以通過點擊Wave->Snap Cursor To Transitions 關閉或者啟動這個功能。
通過Cursor 和Maker 來計算Delta 時間是很難估算出兩個信號(或者是信號的邊沿)之間的周期數的,你可以選中信號的驅動時鐘,通過添加網格線的方法來實現周期數的計算。View-> Grid on Rising Edge,這樣子網格線就會出現在每個周期中,View->Grid Count 來顯示從Cursor 到每個網格線的網格個數。
- 常用快捷鍵
-
- g:加載信號 Get signals
- x:標注信號的值(在源代碼中)Active Annotation
- L :返回至上一個視圖 Reload Design
- Ctrl+e: Active Trace
- Ctrl+w: Add Signal to Wave
- H: hierarchical Name
- Z: Zoom In
- z: Zoom Out
- f: Zoom All
- l: Last View
5. 調試
5.1. 載入設計文件及波形
- UI啟動:啟動verdi,載入設計文件(.f文件),然后new waveform來打開波形窗口。在波形窗口打開波形文件(fsdb文件),然后通過Git Signal窗口或者代碼窗口添加需要觀察的信號。添加好需要觀察的信號之后,可以保存相關信號為.rc文件,下次啟動波形文件時,可以直接載入信號文件。當波形有更新時,可以通過Reload來重新加載(也可以快捷方式Shift+L)。
- 命令行啟動:
tb.f即為設計文件列表文件;USER_DEFINE添加用戶自定義參數進行仿真調試(vcs編譯中可能有類似的參數),xxx.fsdb即為波形文件;&表示在控制臺后臺執行,即不隨控制臺關閉而關閉;-nologo即不顯示啟動界面。
verdi -f tb.f -sv +define+USER_DEFINE -ssf XXX.fsdb -nologo &
兩次回歸的simv.vdb一起看覆蓋率
verdi -cov -covdir XXX/simv.vdb -covdir YYY/simv.vdb &
verdi -cov -covdir XXX/simv.vdb -elfile yyy.el
el文件可以通過verdi gui界面選定exclude的覆蓋項保存
verdi -f filelist.f -dbdir ./simv.daidr -ssf xxx.fsdb -top -sv -nologo
5.2. 創建總線分析
創建自己想要的總線信號,如在16bit 的總線中,你只想看到其中的偶數位的總線,或者你想把幾條信號合并成一條總線信號,都可以在debussy 中輕松實現。選中要操作的信號或者總線,Signal->Create Bus.
5.3. 載入文件列表文件
如果你所有的design都在一個文件里,比如說verilog文件(擴展名為.v),那么你直接把這個文件加載進去就可以。如果你的design是分布在多個文件里的,那么你可以一次把所有的design都選擇上,然后加載。那還有一種方法就是在一個擴展名為.f的文件里把所有的design文件(包括某些IP的庫)列出來(可以是絕對路徑,也可以是相對路徑),然后加載這個.f文件。在上面的操作中,我們實際上就是加載一個包含了所有design文件的run.f文件。
5.4. 查找信號
在代碼窗口選中信號,可以用鼠標中鍵將信號拖到查找框
,然后進行下一個、上一個的查找。也可以使用快捷鍵,Ctrl+F選擇要查找的信號,Enter、Shift+Enter下一個、上一個查找。
5.5. 查找驅動源
在波形窗口中我們可以通過雙擊信號的波形來追溯信號的驅動源,從而定位錯誤出現的位置。在源代碼窗口中可以通過雙擊信號的名字來追溯該信號的驅動源。在源代碼窗口中也可以通過右鍵菜單來實現這個功能。在窗口中選擇Trace->Reset Traced Signals’s Color 可以取消追溯過程中帶來的信號高亮度的問題。一般情況下我們是從信號的波形圖中某一時刻的波形異常處雙擊該波形,追溯到源代碼窗口中的對應賦值語句,從而找到該時刻的驅動源。
Driver即表示當前信號由哪些信號驅動,即由哪些信號賦值;Load即表示當前信號給哪些信號賦值了。在代碼窗口選擇信號,雙擊信號即會跳轉到賦值語句,如果多處賦值,也會標記,并在Trace窗口顯示所有關聯信號。
可以通過鼠標右鍵菜單中的Active Annotation來標記當前信號的值,快捷鍵x。
可以通過雙擊找到驅動來源,也可以在工具欄選擇D按鈕執行相同的功能,L按鈕則是找到當前信號給哪些信號賦值了。
5.6. 添加信號
在nTrace(代碼)窗口,選中需要觀察波形的信號,用鼠標中鍵拖到nWave窗口,即可以完成信號的添加。也可以選中多個信號用鼠標中鍵添加相關信號。也可以選中信號,使用鼠標右鍵菜單Add to waveform,也可以使用快捷鍵。
5.7. 統計跳變數量
- 添加跳變信號
2. 光標標記起始位置
3. 光標標記結束位置
4. 計算有效跳變量
有效跳變數=結束光標跳變量-開始光標跳變量
5.8. 提取部分波形文件
波形窗口選擇File->Extract Selected Sigals.
通過光標和標記選擇起始/結束時間范圍的波形進行保存。
5.9. 設置信號的顯式形式
在波形窗口或代碼窗口,右鍵選擇相應的信號,在菜單選擇 Set Radix,然后選擇不同的顯示形式。如顯示字符串內容ASCII。