前文《跟老驢一起學 PR | Innovus 輸入》闡述了 Innovus 所需要的輸入數(shù)據(jù)有哪些,今天來學習如何將這些數(shù)據(jù)讀入 Innovus. 以前熟悉的工具,不論是綜合、formal 還是 STA 讀入數(shù)據(jù)大多都是 read_xxx 命令讀入,思維定勢之前以為 Innovus 也是用一坨 read_xxx 的命令讀入,然而并不是。
在 Innovus 中預定義了一坨 init_XXX 的變量,用戶需要將對應輸入文件指定給對應的變量,然后執(zhí)行 init_design 工具就會將所有文件依次讀入,對于 verilog netlist 老驢扒拉了幾個 flow 關(guān)鍵的 init 變量有:
init_design_settop,這個變量默認值是 1,意思是要求客戶指定當前設計的 top 名字給變量 init_top_cell; 如果將該變量設成 0,則讓工具自己識別 top. 建議,用默認值,用戶自己指定 top.
init_lef_file, 將 tech-lef +other lefs 指定給這個變量,這里有個問題,如果某個 leffile 在 init_design 之前沒加上,要增量讀入該怎么辦?在 Innovus common ui 中用命令: read_physical -add_lefs XX 可以增量讀入 lef.
init_mmmc_file, 指定 viewDefinition.tcl,viewDefinition中的 library_set 指定了所有要用的 library, rc_corner 指定了對應的 QRC file, constraint_mode 指定了 SDC 文件。
init_verilog, 指定網(wǎng)表文件。
init_pwr_net,指定global power nets.
init_gnd_net,指定global groundnets.
init_cpf_file,如果是多電壓域設計,用于指定 CPF 文件,如果 power intent是用 1801 描述的,則不能用該變量指定 1801 文件,需要用命令 read_power_intent -1801 $1801_file 讀入,如果在 viewDefinition 中用到了 power domain 則應該在 init_design 之前讀入,init_design 之后再執(zhí)行commit_power_intent. read_power_intent這個命令的使用方式跟 Genus 一致,在 Genus 中多了一步 apply_power_intent,用于將設計跟 power domain 綁定,commit_power_intent 用于插入 low power cell.
至此,所有輸入文件都指定完畢,執(zhí)行 init_design 就會將對應文件讀入,init_design 讀取文件的順序還沒看,按照邏輯猜測一下讀入順序:library -> tech-lef -> lef -> QRC -> cpf -> netlist -> SDC.
除了上面那一坨指定輸入文件的 init_XXX 變量之外,還有一坨用于控制輸入過程的 init_OOO 變量:
init_design_netlisttype, 用于指定 netlist 的 format 是 verilog 還是 OA, 老驢目前只學習 verilog 部分,所有 OA 相關(guān)的都忽略掉。
init_ignore_pgpin_polarity_check, 用于指定一個 leaf cell pinname 的 list, 告訴工具在 globalNetConnect或在 CPF 中 connect supply net時忽略極性檢查 .這貨好像對 1801 flow 沒用,正好這周一解了個相關(guān)的問題,當時遇到的問題是 1801 flow, 在 commit_power_intent 時工具報 Error:IMPDB-1220 跟 WARN:IMPDB-1278, 對于這種問題在 Innovus中先用命令 dbGet [dbGet top.nets.name PMD0_VDD -p].isPwr 來檢查工具將對應的 supply net 認成了什么。在老驢遇到的 case 中,是在 1801 中用 connect_supply_net 要將一個 analog Ground 連到一個 analog IP 上,但是在 1801 中只定義了 supply net 并沒有指定該 net 用于 Ground 所以工具將其認成了 Power. 解的辦法是在 1801 中為其 create 一個 supply set 并將其指定為 ground.
init_verilog_tolerate_port_mismatch, 這個變量默認值是 0, 不能容忍 module 定義的 port 比實例化時的 port 少,如果將其設為 1 工具在解析 netlist 時如果發(fā)現(xiàn) module 的 port 比實例化時的 port 少,工具會在 module 上創(chuàng)建一個 port, 老驢以為這個變量在設計臟的時候特別有用。
init_lef_check_mask_shifts,用于檢查 tech-lef和 MACRO sections中FIXEDMASK 跟 LAYERMASKSHIFT 是否沖突,該變量默認值是 off 就是不檢查,如果設為 on工具發(fā)現(xiàn)沖突會報錯并停掉,如果設為 bypass 工具發(fā)現(xiàn)沖突只報錯不停止,其實老驢還不知道 FIXEDMASK 跟 LAYERMASKSHIFT 在不同工藝中有多重要,先放到這里,萬一以后發(fā)現(xiàn)重要呢,方便找。
init_import_mode, 用于指定 setImportMode 的 option, 如 set init_import_mode {-discardFloatingVNets true -keepEmptyModule true},此處留個問題:是不是默認 innovus 會將 empty module 刪掉?如果是,那綜合 netlist 中有沒有 empty module 應該都無所謂吧?如果是,為什么有的后端一定要求把 empty module 刪掉?
init_design_uniquify, 控制 innovus 解析 netlist 時是否做 uniquify, 既然 innovus 要求 netlist 是 unique 的,那為毛不把該變量的默認值設為 1?
審核編輯黃昊宇
-
Innovus
+關(guān)注
關(guān)注
1文章
20瀏覽量
3008
發(fā)布評論請先 登錄
探索DS160PR822:高性能PCIe 4.0線性轉(zhuǎn)接驅(qū)動器的技術(shù)剖析與應用指南
探索DS160PR810:PCIe 4.0 8通道線性轉(zhuǎn)接驅(qū)動器的卓越性能與應用
探索DS160PR421:PCIe 4.0線性轉(zhuǎn)接驅(qū)動器的卓越性能與應用
解析DS320PR822:PCIe 5.0和CXL 1.1的高性能線性轉(zhuǎn)接驅(qū)動器
探索DS320PR810:八通道線性轉(zhuǎn)接驅(qū)動器的卓越性能與應用
高速數(shù)據(jù)傳輸利器:DS320PR1601線性轉(zhuǎn)接驅(qū)動器全解析
GRAS 座艙測試支架 AutoArray:PR0003 PR0004!
汽車級PCIe 4.0轉(zhuǎn)接驅(qū)動器DS160PR410-Q1:特性、應用與設計要點
TD1509PR 雙電源設計
DS320PR1601RSC-EVM線性轉(zhuǎn)接驅(qū)動器評估模塊技術(shù)解析
小白學大模型:國外主流大模型匯總
智行者蝸小白重構(gòu)清潔行業(yè)效能革命
GRAS 發(fā)布全新座艙測試支架 AutoArray:PR0003 & PR0004!
小白學PR——數(shù)據(jù)的輸入
評論