最近一個東東一定要用 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 的方法解決,雖然要宣告一個陣列,但還算可以就是。
2025/08/10 更新
前天測試時,argv 沒有斷行,理論上 Bash 應該不會把空白行傳到執行檔去,但還是驗證一下好了。
從上圖可以看出,我自己用 c code 寫的假 vcs 確實不會收到像是 Line 16 或是 Line 17 的空白行,除了 -f design.f 被 Bash 斷成兩個參數傳進我的假 vcs。
這本來就是預設行為,故很合理。
只不過用這樣的方式傳進 VCS 後,log 最前面會看到 VCS 把傳進去的參數印出來一遍,然後才是 VCS header 的訊息。
這樣也好,每個 Log 就可以知道是傳什麼參數了!
xrun 則是參數有改就一定會再顯示一次在 Log 最前面。
用不同的 simulation 真的會錯亂,有時候都會忘記自己在用哪個XD
沒有留言:
張貼留言