pretty code

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

2026年2月12日 星期四

Simulation 軟體遇到 primitive cell 未定義問題

各家 PDK 的 simulation model,都會有所謂的 primitive cell,一般來說,會放在同個檔案的下半部。

以 xrun 來說,不管我用 -v -y 還是什麼 AI 建議的方式,都不能解決這種未定義的問題。

訊問 AI 的結果,AI 只會一直在跟我鬼打牆,後來還是靠自己把文件翻了個朝天,才順利找到解決方式。

不論下什麼關鍵字在 Google 都搜尋不到,即便我已經知道關鍵字是什麼。

個人猜想,解決方式應該是在各 EDA 的論壇裡面,因為我沒有帳號,故也無從得知真相。

總之,只要分別用以下指令,就可以解決 primitive cell 在後面定義的問題。

xrun  -liborder
vcs +libordr

2026/02/26 更新

同事今天遇到加了這個選項後還是會報錯的問題,一時之間我也不知道為什麼?改天有空再去工作站確認一下文件。

一直覺得這行好像在做工,跟 coding 半點毛都沒關係。

2026年2月3日 星期二

前人的 Code 沒事不要改它

雖然這只是江湖傳說,但今天居然是靠這招解決問題就是了。

起頭是我需要在客戶的工作站加上一個自動化功能,產生可以跑 simulation 的 file_list。

原本的 command 會因為加了自己的 design 後,產生不出本來的 file_list,雖然我可以很容易的用 find 等技巧產生所有的清單。

但不知是我對 SytemVerilog 不熟還是怎樣?當它有 include 別的檔案時,檔案的順序性就變得很重要,不然 xrun 不開心就會報錯。

本來的想法是分開兩個 file_list,至少 before 前的 file_list 的順序是 OK 的,後面重複的,我想讓他直接以第 2 個為主就好,但是 xrun 就會產生 E,DUPIDN 的錯誤,這個錯誤也不是 -allowredefinition 可以解決的?

問了一下同事,才知道他的客戶都是把所有的檔案都展開在一個 file_list 中。

說也奇怪,簡單寫個 Tcl 比照辦理,E,DUPIDN 的錯誤就這樣蒸發了XD

改天有空,我要來好好研究一下,不然我今晚會好奇的睡不著覺,Google 雖然可惡,但應該也有人有發生過這種問題,我應該可以找到網頁才是?

2026/02/03 更新

昨天沒有睡好,腦袋無法思考,不過還是找了幾個符合我預期的答案。

這個是 Quartus 的說明,看起來順序是重要的。


這個則是 Gemini 的回答。



如果 AI 的建議為 true,我想這也是為什麼 -v 參數存在的原因,但我印象中這招似乎不是萬用,改天再來試試?

我想答案應該還是在 SystemVerilog 的規格書中,不確定是否跟 Verilog 一樣要錢?當然我可以很容易的在外國大學教授的網頁中找到 PDF 檔案,但可以花錢的我還是會花錢,除了自己貧窮買不起外XD

但是之前不知道要錢的已經下載過的檔案就不管它了,誰叫科學界還是 ISO 界為什麼那麼死要錢,我想這很大程度的限制了資訊流通,又不是每個有興趣的人都是在學校或業界,可以擁有帳號免費下載。

這就是我為什麼喜歡 Linux 以及 Open Source 的原因,好東西不就是要讓人知道?

先了解到這裡就夠了,知識往往不是一蹴可及的事,不用急。

2026/02/03 晚上更新

還是用了些方式找到 Spec 來驗證,我想這應該可以解釋順序的重要性了吧!

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