pretty code

2025年8月24日 星期日

Dell 筆電微軟更新後無關機電池耗盡進入休眠

之前就覺得哪邊怪怪的?

原來我的筆電在某些時候選擇更新後關機,其實並未關機而是不知道某種原因他又重開機了,結果導致電池耗盡進入休眠狀態!


上圖可以看到我第一次開機是因為當天 09:46 開始開機使用電腦,第二次開機是更新後自己開機,第三次就不知道為什麼又開機了一次?


13:22 的時候終於因為電力不足進入休眠。

如果是這樣,下次開機就會進入 BIOS 選單而無法直接開機。

記錄一下狀況,下次才會知道發生什麼事。

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

2025/08/19 更新

因為某些緣故無法 dump fsdb,只能 dump VCD。

使用這個 option 就不用寫在 verilog 裡面還可以指定檔名,對自動化比較方便。
+vcs+dumpvars+xxx.vcd

不過,要加上 debug_all 才能 dump standard cell 的訊號。

另外,file_list 的 option 有點差異。

-F 比 -f  多了可以指定檔案路徑的功能,我猜 -f 只能夠有檔案名稱?

gtkwave 是我大哥

雖然最近使用 Verdi 快速幫我定位 x 訊號的問題,再加上點擊訊號或物件馬上跳到 RTL code,或是在 RTL Code 中追蹤 wire,不論是上述哪個功能,都是我覺得蠻好用的功能。

但純粹就看波型來說,我還是比較喜歡 gtkwave。

尤其你有一堆一樣的 instance 裡面的訊號要看,可以快速的使用 Search -> Signal Search Regexp,一下就把一堆訊號找出來加入。

儲存訊號的 gtkw 檔案,也可以很快的複製一份並直接更改內容變成 for 新的波型使用,理論上可以開啟別的 gtkw 來對應?但我還是習慣複製一份!

我想 gtkwave 欠缺的應該只是快速的找到 instance 吧?畢竟一層一層點不是很好用。

也許 nWave 也有對應的功能可用,但我還沒找到就是。

今天為了簡報要抓取兩個波型的畫面來比較,只要簡單使用下面 command 就可以同時開啟兩個檔案在同一個視窗。

twinwave xxxx.gtkw + yyyy.gtkw

這樣的軟體你怎能不喜歡呢?

2025年8月3日 星期日

force, release, deposit command

一般來說,當我們 Testbench 測試時若遇到結果不如預期,往往都是某些訊號忘了設定,此時使用 force 便可以輕鬆搞定。

這樣的 case 一般不需要用到 release 解除原本的 force。

但換句話說,如果是需要 release 的 case,EDA 廠商的 Tcl deposit command 會比較好用,不需要另外記得 release,只要驅動該訊號的 input 有所變動,自然會以新值取代原本 deposit 給予的值。

即使記得 release 也不是什麼 case 都能讓原本的訊號繼續工作?

假設我們是對某根訊號 force x,假設這個訊號的電路是跟自己做反向,那這個訊號就會永遠 unknown 下去。

不知道觀察到的現象是否可以解釋 unknown 還是有機會無法回復呢?


新北市立案老人福利機構名冊

只有板橋區部分,其他可能要寫程式抓比較方便。