數字asic流程實驗(五) ICC布局布線
1.IC Compiler簡介
IC Compiler(以下簡稱ICC)是Synopsys公司用於把門級網表轉換成代工廠可用於掩膜的版圖信息的工具。其基本工作流程為
- 數據准備(Data Setup):將門極網表、約束文件、元件庫、工藝文件、物理庫、寄生參數模型等輸入ICC;
- 布局規划(Design Planning):規定芯片尺寸、形狀,確定IO、電源、pad位置等,放置宏單元,放置標准單元,鋪設電源網絡;
- 布局(Placement):將電路中各個基本單元在芯片中進行布局;
- 時鍾樹綜合(Clock Tree Synthesis):將時鍾信號連接至需要驅動的基本單元;
- 布線(Routing):將各個基本單元對應端口進行連接;
- 可造性設計(Chip Finishing):連線拓展、加寬連線,冗余通孔插入,插入填充單元,填充金屬等;
如下圖所示。
即將DC綜合后輸出的SDC約束文件,門極網表,代工廠提供的元件庫(.db),物理庫(physical lib),工藝文件(.tf),RC參數文件(tlu+)等輸入ICC后,通過軟件中完成布局布線操作,最終會輸出可以提供給代工廠進行芯片加工的版圖。
此外在完成布局布線后還要在ICC中再次導出門極網表和時序描述文件用於后仿真,與DC導出的文件的區別是
- ICC導出的門極網表文件中的模塊與連線與版圖是嚴格對應的
- ICC導出的時序描述文件中的延時由RC參數計算而來
深入學習ICC,最好的方式是熟讀Synopsys公司的《IC Compiler 1 Workshop Student Guide》。
2.版圖基本知識
使用MOS工藝制作集成電路時,由於集成電路的制作是平面加工工藝,而芯片是立體結構。平面工藝到立體結構的實現,需要多層掩模版。每一層掩模版需要用一層版圖來表示,因此版圖也是分層的,即不同層的版圖代表不同的掩模版。版圖是用二維圖形表示電路的三維結構,版圖設計的目的是完成集成電路加工所需的各個掩模版上的圖形的設計。
下圖為一個非門的版圖:
該非門制作時采用N阱工藝,襯底為P型,PMOS做在N阱中,其剖面圖如下:
觀察剖面圖可以很容易的看出制作時的分層關系。制作該非門時所需要的版圖包括:
- N-well:N阱
- active:有源區
- N-implant:N型摻雜
- P-implant:P型摻雜
- poly:柵
- contact:金屬觸點
- metal1:金屬連線
如下圖所示
在進行復雜集成電路加工時,單層金屬連線往往不能夠滿足需求,因此會有多層金屬連線。如本次實驗使用的是6層金屬布線工藝。
3.TCL腳本編寫&運行
通過編寫運行TCL腳本完成Data Setup步驟,該步驟主要的目的是將門極網表(.v)、約束文件(.sdc)、單元庫(.db,.sdb)、物理庫(physical lib)、寄生參數模型(tlu+)等輸入ICC。
本次實驗的TCL腳本內容如下:
set DESIGN_NAME "cic_filter"
set search_path "../lib/logic ../lib/milkyway" #設置搜索路徑
set target_library "slow.db" #設置標准元件庫
set link_library "* $target_library"
set symbol_library " smic18.sdb " #設置標准元件圖標庫
create_mw_lib my_lib1.mw \
-technology ../lib/milkyway/tech/milkyway/smic18_6lm.tf \
-mw_reference_library ../lib/smic18 -open #使用工藝文件和物理庫創建milkyway
import_designs "../dc/outputs/cic_filter_post_dc.v" -format verilog -top cic_filter #導入網表文件
uniquify_fp_mw_cel
current_design $DESIGN_NAME
set_tlu_plus_files -max_tluplus ../lib/milkyway/tech/tluplus/smiclog018_6lm_cell_max.tluplus \
-min_tluplus ../lib/milkyway/tech/tluplus/smiclog018_6lm_cell_min.tluplus \
-tech2itf_map ../lib/milkyway/tech/tluplus/smic18_6lm_lef_smic18_6lm_tf.map #導入RC參數文件和.map文件
report_tlu_plus_files > reports/init/report_tlu_plus.rpt
check_tlu_plus_files > reports/init/check_tlu_plus.rpt
remove_sdc
read_sdc ../dc/outputs/cic_filter_post_dc.sdc #讀取約束文件
set_clock_uncertainty 2 [all_clocks]
remove_propagated_clock [all_clocks]
check_timing
save_mw_cel
start gui
接着需要在虛擬機中用icc_shell運行腳本
1.打開虛擬機,至/home/crazy/Desktop/experiment/icc 文件夾下,右鍵Open in Terminal
2.依次輸入
ic
icc_shell -f icc_setup.tcl
3.等待腳本運行完成,如果出現報錯(和DC綜合時一樣,執行出錯會打印0)則根據報錯信息修改icc_setup.tcl。運行完后會自動進入GUI,並且可以看到各個單元。
至此Data Setup步驟完成,可以開始進行布局布線了。
4.在GUI中布局布線
1.在icc_shell中輸入
start_gui
啟動GUI,①為標簽欄,后續各個步驟都在標簽欄中進行調用;②為芯片預覽圖,每一步操作后會更新該圖,可以通過滾輪進行放大縮小。
2.下面開始Design Planning
創建Foorplan,並規定core area到芯片邊緣的距離,統一設置為50
Foorplan ---> Create Foorplan
創建完畢后:
3.創建電源和地
Preroute ---> Derive Power Ground Connection
選擇Manuel connection,依次命名Power net,Power pin,Ground net,Ground pin為VDD和VSS,Create port選擇Top
此步驟完成后芯片預覽圖不會更新,但在Shell中會打印成功連接電源的信息
4.創建電流環
Preroute ---> Create Rings
Nets中填寫VDD VSS,Horizontal為水平布線,層數選擇為第五層金屬(METAL5),Vertical為垂直布線,層數選擇為第六層金屬(METAL6),Offset、Width和Space分別設置為5、15、5
此步完成后芯片預覽圖變更如下:
5.創建Power Straps
Preroute ---> Create Power Straps
Nets填寫VDD VSS,層數選擇METAL6,Width設置為5,方向選擇Vertical,X start、Straps、X increment分別設置為70、5、30
此步完成后芯片預覽圖變更如下:
6.填充標准單元
Finishing ---> Insert Standard Cell Filler
Without metal中填寫FILL64 FILL32 FILL16 FILL8 FILL4 FILL2 FILL1
此步完成后芯片預覽圖變更如下:
7.連接各個標准單元
Preroute ---> Preroute Standard Cells,此步結束后可以在預覽圖中看到很多小的橫向電源條
此步完成后芯片預覽圖變更如下:
8.去除填充
Finishing ---> Remove Fillers,選擇刪去Standard Cell
此步完成后芯片預覽圖變更如下:
至此電源網絡搭建完畢,Design Planning結束,開始Placement
9.開始進行電路單元布局,此步驟點擊執行后需要等待一段時間
Placement ---> Core Placement and Optimization
此步完成后芯片預覽圖變更如下:
可以看到所有電路單元都被放進Core area中了,至此Placement結束,開始Clock Tree Synthesis
10.設置時鍾樹
Clock ---> Set Clock Options Target標簽頁中,Clock_tree選擇clk,Max fanout設置為30,Routing標簽頁中,勾選METAL1至METAL6的全部金屬層,Clock_tree選擇clk_div后同樣進行配置
11.開始連接時鍾,Clock tree names填寫clk_div clk,勾選Fix hold time violation for all clocks,等待連接完成,連接完成后可以看到芯片預覽圖中多出的時鍾連線。
Clock ---> Core CTS and Optimization
此步完成后芯片預覽圖變更如下:
12.重新建立電源,這次Create port選擇None
Preroute ---> Derive Power Ground Connection
Shell中打印的信息如下
至此Clock Tree Synthesis結束,開始Route
13.設置忽略的布線層,Maximum routing layer選擇METAL6,Minimum routing layer選擇METAL1,下面全都不勾選,代表所有金屬層都納入RC參數計算
Route ---> Routing Setup ---> Set Ignored Layers
- Route ---> Net Group Route,選中All clock nets
15.布線相關設置完成,開始布線,布線結束后各個單元模塊之間就已經完成了相互連接。
Route ---> Core Routing and Optimization
此步完成后芯片預覽圖變更如下:
至此Route完成,開始Chip Finishing
16.再次進行標准單元填充,但這次的填充單元是帶金屬的,輸入在With metal一行,Other Options標簽中,勾選二三兩項
Finishing ---> Insert Standard Cell Filler
此步完成后芯片預覽圖變更如下:
至此Chip Finishing步驟結束,芯片可以說已經設計好了,接下來就是導出各個文件並進行驗證了
17.依次導出網表(.v),提取寄生參數、導出時序描述(.sdf),導出寄生參數文件(.spef),以及代工廠用於加工的GDSII文件
導出網表,Output verilog file name選擇文件路徑時,文件命名要帶.v的后綴名
File ---> Export ---> Write Verilog
提取寄生參數
Route ---> Export RC
導出時序約束
File ---> Export ---> Write SDF
導出寄生參數文件
File ---> Export ---> Write Parasitics
導出GDSII文件
File ---> Export ---> Write Stream
至此ICC布局布線全部工作完成
5.參考資料
《IC Compiler 1 Workshop Student Guide》
《CMOS集成電路的版圖設計》
https://blog.csdn.net/qq_42556934/article/details/107661335
https://blog.csdn.net/weixin_46752319/article/details/107252336
https://blog.csdn.net/weixin_46752319/article/details/107313770
https://blog.csdn.net/weixin_46752319/article/details/107360843
https://blog.csdn.net/weixin_46752319/article/details/107387584
https://blog.csdn.net/weixin_46752319/article/details/107564592
https://blog.csdn.net/weixin_46752319/article/details/107633027