最近一個東東一定要用 VCS 才能成功跑完模擬,使用 xrun 完全不行。
我想這也不意外,畢竟都是同一家的產品。
理論上 VCS 開啟那個功能後,我應該可以看到 VCS 如何對那些 register 設值,但是有一半的訊號,他不會告訴你他是如何給值!
今天想過使用 dump waveform 裡面的訊號來驗證這些值是什麼?但奇怪的是這些訊號居然都不在 waveform 裡面?嚴格來說,應該是 standard cell 的 instance 找不到?
究竟原因是什麼,我還未知就是了!改天想到再來研究看看。
這星期算是我第一次使用 VCS,剛看了一些文章後,還是把一些技巧記錄一下避免忘記。
01. -R 很好用,雖然說要分離編譯還是 simv 使用的參數不是很難,但如果不用特意區分,只要一股腦的寫在同一個 script 或是 file_list 也不錯。
02. 原本我以為 VCS 不支援 -f file_list 的使用,今天才發現原來是某些參數不行,只要區分開來,就不用像下面這樣寫在 script 裡面,後面多了一個醜醜的反斜線,看了就有礙觀瞻XD
vcs \
-option1 \
-option2 \
-final_option
使用 file_list 的好處還不只是好看而已,不要的參數可以隨時註解起來,不需要另外剪下放到下面以備不時之需。
不過也許是我對 script 不熟,還沒想到要如何克服這個問題就是!
03. UCLI 有點像是 GNU GDB,可以下斷點看訊號或是改值。
04. -debug_pp, -debug_all 是配合 UCLI 及 DVE 使用。
UCLI - User Command Line Interface
DVE - Discovery Visible Environment ( GUI )
不過,現在好像比較少人用 DVE?
05. -notice 顯示詳細的診斷訊息。
06. +vcs+lic+wait 無限的等待 license。
07. -l log_name 這個參數跟 Xcelium 一樣。
08. dump VCD 相關。
+vcs+vcdpluson
-vcd <filename>
應該還有很多,先知道這些即可,有需要再查詢即可。
這篇是我覺得寫得還不錯的文章。
2025/08/08 更新
原來要加上 +fsdb+keep_cell_module="*" 的語法才會 dump 那些 cell 的訊號,檢查了一下,Xcelium 看起來預設就會 dump 了。
另外,不知道為什麼 -P xxx.tab /verdi/pli.a 要 dump FSDB 的參數,放在 file_list 會讓 $fsdb 相關的系統函數找不到?即使改用 -debug_access 也是一樣(-P 在 Verdi 2024 後就會過時)。
後來查了一下,改用 bash script 的方法解決,雖然要宣告一個陣列,但還算可以就是。