pretty code

2025年8月7日 星期四

第一次使用 VCS 就上手

果然 Synopsys 很喜歡留一手XD

最近一個東東一定要用 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

沒有留言: