pretty code

顯示具有 EDA 標籤的文章。 顯示所有文章
顯示具有 EDA 標籤的文章。 顯示所有文章

2025年7月2日 星期三

xmhelp

DC 有 man 可以查詢錯誤,NCVerilog 則是 xmhelp 指令。

比如我在 simulation 的過程中,出現一個 *W,BIGIDX 的錯誤訊息,原本的 log 可以知道是哪個檔案,但如果我們想多了解一點,可以用下面指令來查詢。

xmhelp xmelab BIGIDX

另外,xrun or ncverilog 都是一個統包的指令,其實他會分別作編譯,elaborate 以及跑模擬。

這其實會分別對應到另外 3 支程式。

第一支程式是 xmvlog,接著是 xmelab,最後則是 xmsim。

對應到 iverilog 便是 iverilog + vvp。

另外,NCVerilog 是舊版本名稱,現在應該是 Xcelium。

2025/07/03 更新

上面只是舉例用法,xmhelp 後面的參數要看你是哪一階段的錯誤,就要填上對應的程式名稱。

比如 xmhelp xmvlog NOINUF

2025年5月22日 星期四

今年我看過的騷操作

今天在試跑一個 IP 的 testbench,第一次看到這樣的騷操作XD

首先,在預設 c shell 的環境下,呼叫一個 c shell 語法的 script 來設定相關變數,接著再跑一個有指定 shell 的 bash script 來跑 testbench。

由於我不是在工作站,故我不能在預設的 bash shell 下另外用 tcsh xxxx script 的方式來設定變數,除非我把呼叫 bash script 的 command 寫在 c shell script。

我個人是這樣覺得啦,既然 EDA 跑在 bash shell 不會有問題,事實上御三家的一些 gen 出來的 tool 也是用 bash 語法寫的,這樣大家都統一使用 bash script 不就好了,何必把問題搞到那樣複雜?

即便是號稱一天上班就用了 5 種程式語言來工作的我,還是很討厭一直在 context switch,人生呀,輕輕鬆鬆簡單過不好嗎XD

2025年2月17日 星期一

The pointer in EDA flow

EDA 世界中,一些 command 拿到的變數,我們可以把他想成是一個指向 object 的 pointer。

因此,如果直接用 puts command 印出該變數,我們只會得到一個類似指標的位置。

DC 可以使用 get_object_name 得到字串。

Tessent 則是使用 get_name_list 得到字串。

2024年9月17日 星期二

四天的努力終於有了點成果

從上星期三開始,使用一套之前沒用過的 EDA Tool 來驗證以前部門弟兄的 design,如果只是要讓他跑起來不是什麼難事,拿先前其他部門的設定修改一下即可。

但我的問題是要修掉 EDA 報出 Nonequivalent 的地方,感覺 EDA 好像告訴了你什麼,但是好像也沒個屁用,想要比照文件儲存 checkpoint 方便之後 debug 不用重跑,但文件就是沒講到如何在載入 checkpoint 後,重回 GUI 的方法,有稍微在 Command Reference 那份文件瀏覽一下指令,但那個貌似進入 GUI 的指令(open gui)居然是在已進入 GUI mode 的情況下使用?

今天早上終於在循序閱讀文件的別地方看到進入 GUI mode 的指令(set gui on),也看到 EDA Status Code 的地方,終於知道 make Error 24 是如何來的,原來是 status flag bit3 和 bit4 為 1 的緣故(16 + 8 = 24)。

快中午時,試著詢問部門非常有經驗很厲害的一位資深同事,嚴格來說應該是我的直屬主管,最近組織架構多了這層級後,我以後有人罩了XD

雖然前輩也沒用過這套軟體,但在跟他聊了快 10 分鐘的過程中,還是學到了不少東西。

下午不知道為什麼突然心血來潮去看之前 DC 的 log,確定了這 4 個暫存器確實在 DC 合成的過程中被優化,也用我之前寫的 split_rtl 小工具從 netlist 中複製出這 4 個暫存器的 module code,也確定確實被優化了。

但不知為什麼這套 EDA 卻只報出其中一個 2_2 register 無法 mapping?難怪網路上有看到某人提到,如果要用這套 Formality Tool,最好 Synthesis Tool 也用同一家的比較好 debug 問題,畢竟同一家的工具彼此間資訊比較容易互通有無。

最後又多加了第 5 個暫存器的 Constraint 後,終於解決 Nonequivalent 的問題,剩下的就是 Unmapped 裡面的 Extra 和 Unreachable 到底需不需要解決?我個人稍微閱讀文件的結論是不用。

對一個新手來說,這樣還算可以吧?放假回去後要來整理這幾天資料寫文件了。

2024/09/21 更新

在寫文件的過程中才發現,EDA Tool 只有報一個 register 是因為被 group 了,但當初以為統計表上的一個就是一個,故沒有特別去看單獨報表。

這告訴我們一件事,別人的專案也許用到的指令並不齊全,但只要他們有放的指令,一定有它們的目的,不管怎樣還是要看一眼才對。

2024/09/24 更新

這篇文章應該是我看過介紹 LEC 最好的簡介文章了。

為了不浪費這三個月買的授權,這兩天嘗試使用 Hier Comparision,但還是覺得有點怪怪的,感覺結果不符預期,重點是還跑得比 Flat Comparison 慢。

不管如何,還是更新了之前寫的文章,目前頁數已經來到 3 字頭XD

2024/09/26 更新

把 Hier Comparision 章節又看了一遍,把知道的參數都試了一輪,還是有 Non-equivalent 的問題。

再一次看了文章後,覺得最扯的是有一個 Add noblack box 指令,要下這個指令的前提是你必須已經知道要比較的子模組裡面的個別模組有因為優化被提出到個別模組外,也因為如此,兩個模組比較一定會不同,故必須使用這個指令讓個別模組不要成為 blackbox,這樣子模組在比較時,下面的所有模組會被攤平一起視為整體來比較,這樣才能得到一樣的答案。


問題是如果我對整個 design 都了然於心,我還需要 EDA 工具做啥?

感覺又是一個雞生蛋蛋生雞的問題?

2024/09/27 更新

看起來如果 DC 有下 -no_boundary_optimation 參數,應該就不會有上述情況發生?

2024年9月14日 星期六

2024 week 37 新玩意

01. 不要太相信 EDA 文件

我是不知道 EDA 授權金額多少錢,但 EDA 文件普遍寫得不好倒是真的,看起來寫了很多,但對解決問題沒啥幫助,不然就是文件寫的跟指令實際行為有時候會對不起來。

不過前提是文件要先從頭到尾認真看一遍,最好要看 2 ~ 3 遍,如果還是覺得哪邊怪,那恭喜你,你不孤單XD

02. 除非特例,少用 GUI mode,不然容易當機

我們跑的設計應該很小,但我這星期就遇到當機 2 ~ 3 次了,原本都以為是該指令要跑很久,後來越想越不對勁,去 EDA license 頁面確認,果然該 license 已經沒有被占用,資源是已釋放的狀態。

我猜,EDA 應該有另一個 thread 定期回報授權主機,避免當機占用 license,畢竟授權不便宜。

因此,不管是在哪個模式下,如果覺得 EDA 好像當機了,給它個面子等個 30 分鐘左右,如果從授權主機看不到你的使用授權,就可以放心地使用 kill 砍掉該 process。

印象中,top 指令看到都還是 run,而不是 zombie?

03. EDA 相關工作要建立 SOP

EDA 動不動就要跑很久,錯了再來一次的時間成本很寶貴。

要做什麼之前最好先想好,檢查再檢查,最好有 check list 可以檢查。

Vim、Shell Script、grep 各種技巧要不斷精進,這都是可以提高工作效率的投資。

要建立自己的工作模式,比如開幾個工作視窗,要不要用分頁,視窗要擺在哪邊,養成下意識的動作,做起事來會比較流暢。

2024年9月3日 星期二

天下大勢,分久必合,合久必分

之前將某 VLSI Synthesis 專案架構加到某個 Open Source 的框架當中,當時心裡就想,這樣其實會失去彈性,我個人是比較支持原本那樣的架構,不要走中央集權的模式。

果不其然,下午有個需求想知道某專案的上限在哪?這樣的需求還是要透過自動化處理比較 Smart,還好之前是用最低限度修改的方式將專案加入到框架當中,稍微想了一下,複製了幾個檔案,為了不要大改之前的東西並重複利用 config.mk 原本的內容,在某專案根目錄又加回了 Makefile,方便我在根目錄中觸發自動化流程。

此次修改最麻煩的是 C Shell 一些語法撰寫,我想一般人應該都比較熟悉 Bash,在不斷的 Google 下,終於順利將自動化流程跑起來,但也花了我一個半小時XD

本次快速重點

01. 不管是 Tcl or C Shell 變數都可以用 {} 包住,避免串接時失敗。
02. @ 是 C Shell 用來執行數學運算。
03. bc 是用來處理浮點數並格式化。


小專案單次合成雖然很快,但也要跑將近一個小時,本想晚上回到家吃完飯再用 VPN 連回公司確認一下是否有照我的想法一個接一個的自動化跑下去,無奈公司電腦網路在休眠時常常會無端斷線,只好明天再來看看結果如何?

經過這次事件,明白到自己還是缺少 C Shell 以及 Tcl 相關書籍,趕快買了 2 本書壓壓驚,Tcl 就算了,C Shell 的書還真是難找,只好找了一本快 30 年前的書XD

不得不說,O'Reilly 出版商真是有情有義,在 Google Play 買的書都沒有 DRM 保護,直接就可以下載,也算是節省了我一些時間。

有沒有人可以告訴我使用 Bash 跑商業 EDA tool 到底會不會有問題呀?我實在不想繼續考古下去了…

2024/09/04 更新

作夢都夢到自己在改 C Shell script,有沒有這麼可怕XD

害我半夜三點起來就沒睡了,趕緊把最近買的五本書使用自己開發的 kobofileserver 上傳到 Kobo Elipsa 電子書閱讀器上,然後就沒然後了XD

一直到剛剛都還在看著 PTT 追新聞,我也算是有情有義的男人吧XD


感謝網友 usimon 建議增加多檔上傳功能,原來這功能還真是好用,可能是我以前只會循序邏輯的執行事情吧XD

難道這就是傳說中的單核單執行緒先佔式多工老男人腦XD

2024/09/04 到公司後更新

恨呀,果然有問題,偏偏昨天 VPN 連不回來。

昨天犯了一個錯誤,都怪該死的 DC command 語法,害我不小心中招XD

{$clock} 因為在 Tcl 裡面,{} 就跟 Bash 的單引號一樣,是當純字串的,想單然爾,我昨天的心力都白費了。

解決方式也很簡單,跳脫大小括弧即可。

\{$clock\}

但是人生就是有那麼多 But,此招對 DC 這個聖鬥士無效,它就是需要 {},無奈之下,只好將該 command 改用 echo 自動化產生 Tcl script。

為了這個臭蟲,早上雖然提早來公司,但又花了我一個小時 debug,今天真不是我的天呀!