01. VIM 果然好用,以後不需要買第三套 UltraEdit 了
新部門需要在工作站上工作,只能使用 VIM,也趁此機會在本機安裝了 gvim,終於可以好好學習了。
qa 開始錄製巨集到 register a,再按一次 q 結束。
使用 @a 使用巨集,使用 @@ 使用上一次使用的巨集。
:tabe + filename 開啟檔案到另一個分頁,gt 依序切換分頁。
vim -p file1 file2 將檔案分別開啟到分頁上。
:new 水平分割視窗
:vnew 垂直分割視窗
ctrl + w + w 切換視窗
02. Makefile 重複 target
Target1 : dependence2
Target1 : dependence1
xxxx
執行順序是 dependence1,dependence2,xxxx。
第一個 Target1 只能有相依性選項,該 Target 下不能再執行其他指令。
03. OpenROAD-flow-scripts hierarchy synthesis
當設定 SYNTH_HIERARCHICAL = 1 時,其 Makefile 就是走 02 的寫法,故其實會做兩次 synthesis。
第一次是 synth_hier_report.tcl,第二次是 synth.tcl,除了最前面會設定 hierarchy module(檔案 mark_hier_stop_modules.tcl 在 flow/objects 裡面,跟 abc.constr 同層)。
我目前 trace 的結論是第一次的結果並不會傳遞給第二次,至少從 tcl script 看不出來。
這就是一個很奇怪的點?除非 yosys 結果是分享到記憶體空間,不然我看不到傳遞的地方。
另外,當 abc command 帶 -nocleanup 時,abc-temp-dir 不會被刪除,且資料夾位置會從 /tmp/yosys-abc-xxxxxxx 變成 flow/_tmp_yosys-abc-xxxxxx,裡面會有相關檔案。
design - config.mk 中的 LATCH_MAP_FILE 不設時,當合成的 netlist 有 LATCH,就會以 general 的 $_DLATCH_N_ or $_DLATCH_P_ 代替,並非像 document 說的可以不用設。
constraint 檔案要照文件格式,指令用小寫,不然 period 會無法 parsing 成功。
2024/04/01 更新
終於搞懂 hierarchy 的流程了!
第一次做 yosys 是為了得到第一次 general synthesis 的結果,目的是知道各別 module 的面積,配合 Makefile 裡面的 MAX_UNGROUP_SIZE 變數,當各別 module 面積小於 MAX_UNGROUP_SIZE 時,此 module 會不做 hierarchy synthesis,改做 flatten synthesis,好處是可以得到更好的最佳化結果(相對 synthesis 時間會比較久)。
但因為 MAX_UNGROUP_SIZE 預設值為 0,故其實沒有必要做第一次 synthesis,取而代之是要想辦法得到真實的 module name,因為在設定 "setattr -mod -set hierarchy 1" 時,是使用 yosys 過一手後的 module name。
要得到 module name 也很簡單,hierarchy -check -top top_module 後,使用 stat 或 ls 就可得到。