眾所周知,Cadence的Virtuoso是模擬設計領域的核心工具,市占率達到75%,隨著近些年來Cadence在數字版圖設計(APR)領域的崛起,invs,PVS等一眾工具也都成了很多公司的首選后端流程工具。依照強強聯合的邏輯,將數模實現工具進行協同部署看起來就是那么的水到渠成,這里就以OA數據為起點,簡單介紹一下MSOT的簡單流程。閑言少敘,ICer GO!
通常而言,數據交互是跨工具的主要問題,所以常用的LEF/DEF/V/UPF/SDC etc.便成為了數字流程的主要交互文件,但是對于Virtuoso,由于是模擬的設計理念,上述的方法不是很合適,這里就需要引入Cadence的**OA(OpenAccess)**數據平臺。
數模混合設計(Mixed-Signal Design)概略
從Virtuoso IC61開始,數據都是以OA為數據保存格式的,尤其到了OA2.2,已經可以實現很多公司/工具的數據互通, 包括Synopsys,mentor,TSMC等大廠的工具,譬如S家的Laker就可以和C家的virtuoso通過OA做數據互通;Calibre也可以打開Virtuoso的OA數據庫等。
類似的,innovus也提供OA數據創建、讀取和存儲,這樣就可以實現innovus和virtuoso的數據溝通。有了這種數據溝通,就可以解決一定的芯片設計需求。
對于現代的MS(mixed-signal)的芯片設計無外乎以下兩種設計方法:
-
Ad(大數小模,下左圖)結構:virtuoso 做top-design,頂層以及大部分工作在virtuoso完成,剩余的一小部分digital在innovus完成,兩者通過OA協同,最后使用virtuoso 完成TO
-
Da(大數小模,下右圖)結構:innovus做top-design,頂層以及大部分工作在innovus完成,剩余的一小部分analog在virtuoso完成,兩者通過OA協同,最后使用innovus 完成TO
如果,對于模擬數字交融的更為深入的情形,那么無論是使用vitruoso還是innovus完成最終的TO,二者都可以在數據的任何階段進行交互(PS:top的流程需要在項目初期定義完成,避免反復迭代)。基于此Cadence提出了(MSOT)的流程理念,這樣可以進一步淡化/模糊數模邊界,對于一個完整的設計也可以相對比較靈活,Cadence相信這樣可以更有利于設計的實現效果:
所以,無論是上述Da,Ad抑或MSOT,這個流程都需要對virtuoso和innovus兩個工具使用統一的設計數據平臺:OA數據。從不同的工具角度去看,OA數據也有些微的差異:
-
下左圖:virtuoso工具對于設計庫的需求(PDK):techdb, techfile.tf,pcell etc.
-
下右圖:virtuoso工具對于設計庫的需求(LEF):techlef,std-cell lef ,macro lef
OA DB 的創建和使用
如上所述,如果一個OA可以包含PDK和所有庫的LEF,那么就可以在virtuoso兩個工具在做平滑切換。這里有一個點要明確,對于virtuoso通常關注在模擬設計、版圖和仿真。而innovus需要關注的更多的是place,CTS和route,這個可能會在除去基礎的OA外用戶需要額外關注的。
綜上Cadence給出的解決方案就是:MSOA PDK (MixedSignal OpenAccess Process Design Kit ),這個OA的數據結構是包含了上述virtuoso和innovus兩者都需要的東東。
- Foundry rules (from PDK)
- DR: default routing rules
- Spacing/pitch/width
- Tech LEF:
- NDR: none default routing rules
- Antenna
- Std-cell LEF
- IP LEF
Cadence提供一個流程幫助用戶在innovus里邊創建OA數據庫,來作為數據的起點(PS:類似的用戶也可以在virtuoso作為數據起點)
OA庫通常是由三個部分組成(從底到頂的次序)
- Technology DB:工藝相關的rule,layer等信息
- Library DB: IP/pcell/std-cell等基礎設計單元和對于的view管理
- Design DB:原理圖,版圖,網表等
考慮到工作數據維護的便利性,OA提供了refLib的理念,這個refLib通常只囊括工藝(technology)相關的信息,對于實際的設計庫,用戶可以對其進行對應的設計(design)和基礎設計單元(library)的添加和維護。可以簡單理解refLIb就是basic OA,設計的OA都可以將以這個refLib作為起點。
這里呈現一個以innovus為數據起點的簡化版的OA lib常見流程。依照上述講解,一個OA的lib的創建至少是需要兩個步驟的。具體流程見下圖:
- 打開任意一個已經完成init design的invs數據庫
restoreDesign DBS/design.init.enc.dat design
- 導出OA tech file
這個可以理解為將invs的tech.lef轉換成virtuoso的的基礎技術文件:techfile.tf ,但是由于invs是一個簡化的設計環境(相較模擬設計而言),所以這里的數據量會較少,但是使用這個的好處是,用戶不用去花費大量的時間去解決techfile.tf和tech.lef的沖突。
write_oa_techfile oa.tf
- 創建OA的reference lib
基于上述的oa.tf創建的reference lib,可以理解為一個帶入了fab設計規則OA lib
techLoadDump -l -createLib oa.ref.lib oa.tf
基于OA系統數據規則,任何對于OA lib的創建都會在當前目錄下的cds.lib添加OA lib的信息,如果cds.lib文件不存在則會自動重建。(PS:由于virtuoso和invs在調用OA lib的時候,都會使用這個文件,不建議手動修改/移除這個文件,)
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
- 準備LEF文件
在一個完成init_design的invs數據庫中,是可以方便的管理所有的LEF文件的。包括tefh.lef。所以invs提供了一個簡單的命令,可以將LEF分類別導出
# dump tech LEF
write_lef_library -tech_only tech.lef
# dump ALL IP/std-cell/antenna LEF
write_lef_library -macro_only macr.lef
- 創建OA lib
有了上述的結果,此處可以創建OA lib了,此處分兩步
- 基于OA ref lib創建design的OA lib
lef2oa -pnrLibDataOnly \-lef tech.lef \-techRefs oa.ref.lib \ -lib design.oa.basic.lib
- 基于macro LEF 對OA lib進行增量調整
lef2oa -lef maco.lef \-lib design.oa.basic.lib
這里創建了新的OA lib,所以cds.lib就會增加一個條目
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
DEFINE design.oa.basic.lib design.oa.basic.lib
到此design的OA lib就創建好了,這個OA lib和DBS/design.init.enc.dat相比,除過沒有實際的design(netlist)外,其他的fab、tech、IP等信息是完全一致的。
用戶可以把這個OA DB作為一個新的起點,對實際的設計進行導入,就可以完成design OA lib的部署:
Note:由于cds.lib的控制,下面的動作需要和上述命令在同一目錄下:
使用OA數據庫構建floorplan:
1:配置basic OA lib
set init_oa_ref_lib design.oa.basic.lib
2:配置netlist
set init_verilog design.dc.v
3:配置top cell name
set init_top_cell design
4:配置mmmc
set init_mmmc_file design.viewDefinition.tcl
5:初始化design
init_design
6:導入floorplan DEF
defIn design.fp.def
7: 用OA數據結構保存數據: {lib_name top-cell view}
saveDesign -cellview {design.oa.floorplan.lib design floorplan}
同樣,cds.lib再一次添加了新條目
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
DEFINE design.oa.basic.lib design.oa.basic.lib
DEFINE design.oa.floorplan.lib design.oa.floorplan.lib
在invs里邊,打開OA數據庫,并完成place
1:打開floorplan OA 數據庫
restoreDesign -cellview {design.oa.floorplan.lib design floorplan}
2:完成place
place_opt_design
3: 保存place數據庫
saveDesign -cellview {design.oa.floorplan.lib design floorplan}
cds.lib再次加入一個新的條目
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
DEFINE design.oa.basic.lib design.oa.basic.lib
DEFINE design.oa.place.lib design.oa.place.lib
這里對同一個OA DB(design.oa.place.lib)分別使用invs和virtuoso打開,作為跨工具工作的一個注腳
這里以invs數據庫為起點,完成一個OA lib的創建,這個和Traditional MSOA PDK相比,少了tech rule (techfile.tf , 通常來自于PDK)的帶入,簡化的原因是由于tech.lef和techfile.tf通常有一些沖突/差異,其他的步驟都是一樣的。完整的Traditional MSOA PDK如下,可以作為參考理解其中的原理
到此,用戶已經使用OA的數據庫完成了在invs里邊的place步驟,此時用戶如果需要,這個OA數據是可以直接傳遞給virtuoso(或者laker)用戶,完成后續的和模擬相關設計動作,然后可以再次返回invs進行后續的處置。用戶可以根據實際情況基于同一數據庫靈活選擇設計工具,從而推進Da或者Ad的設計。感謝Cadence的偉大創舉,感謝OA平臺,打通了數模設計的數據平移。
【敲黑板劃重點】
基于OA數據庫,發揮innovus和virtuoso的工具優勢和特長,打破數模設計的阻隔,發揮不同工具的優勢,完成芯片設計的訴求。
參考資料
Cadence Mixed Signal (MS) Interoperability Guide