最近應該可以專心在這一塊,記錄一下避免忘記。
01. netlist simulation 時,除非 cell 有 power port,不然不要誤用帶 power port 的 Verilog,因為需要有電,buf 的 output 才不會 x,不確定是特殊 cell 還是通例,也許之後可以看有無 define 可以設定。
02. simulation 時,如果吐出一堆 ASSERT,比如說 IEEE package,xrun 可以在 dump Tcl 檔案裡面加上 assertion -off -vhdl -all 便可以關掉 ASSERT,simulation 速度也會加快。
03. top simulation 時,如果 file_list 檔案過多時,可能只是更改幾個檔案,比如將 memory 檔案從 fast_func 改成正常版本,有可能會發生 unresolved object,此時砍掉編譯暫存檔整個重來即可。
上面不確定是 xrun 參數有問題還是怎樣?也有可能跟之前 liborder 等問題類似?
2026/09/25 更新
現在都是使用 force 來 gen clock,因為我是全部打開開關,故在某個 clock 打開後,會印出一堆錯誤訊息增加測試時間,(正常在此階段不能使用 force,但客戶更改測試架構,故請我先用此方法驗證)。
雖然我已寫成 testarg 可以傳參數決定何時開啟關閉,但我的 script 可以一次跑全部 pattern 或依使用者輸入決定測試哪支 pattern,為了這個問題,我要將 script 大幅改寫才能動態改變開關。
不是做不到,但不值得在這裡投入過多心力,故我改將 pattern 一樣用類似 testarg 傳進我的 force Verilog 中,然後利用字串比對決定是否要開啟該 clock,沒想到就這樣引入臭蟲。
剛在測試這個星期第一次有機會跑的 pattern,沒想到 clock 不符預期,感覺就是我的 pattern 名稱有錯誤,因為懶得查 display 參數就直接印出,故得到一個很大的數字,原本以為這是 16 進位數字,於是便請 AI 直接幫我解析,沒想到 AI 居然還知道我講的是錯的?真是太意外了。
當初沒有想到 pattern 名稱會有哪麼多字,只宣告 256 bit,難怪會不符預期。
2026/09/27 更新
不常寫 Verilog 有時會反映不過來,今天在計算記憶體修復資訊,直接問 AI 比較快。
所以當我注入錯誤是 bit 5 時,我的 TCD 如下:
PinMap {
SpareElement {
RepairEnable : repair_en ;
FuseMap[0] : repair_info[0];
FuseMap[1] : repair_info[1];
FuseMap[2] : repair_info[2];
FuseMap[3] : repair_info[3];
FuseMap[4] : repair_info[4];
}
}
FuseMap[4:0] {
ShiftedIO(Q[5]) : 5'b00101;
}
反映到上面的 SpareElement,對應到那一段 bisr chain 就會是 001011,
也就是 bit0, bit1, bit3。