數字asic流程實驗(五) ICC布局布線


數字asic流程實驗(五) ICC布局布線

1.IC Compiler簡介

IC Compiler(以下簡稱ICC)是Synopsys公司用於把門級網表轉換成代工廠可用於掩膜的版圖信息的工具。其基本工作流程為

  • 數據准備(Data Setup):將門極網表、約束文件、元件庫、工藝文件、物理庫、寄生參數模型等輸入ICC;
  • 布局規划(Design Planning):規定芯片尺寸、形狀,確定IO、電源、pad位置等,放置宏單元,放置標准單元,鋪設電源網絡;
  • 布局(Placement):將電路中各個基本單元在芯片中進行布局;
  • 時鍾樹綜合(Clock Tree Synthesis):將時鍾信號連接至需要驅動的基本單元;
  • 布線(Routing):將各個基本單元對應端口進行連接;
  • 可造性設計(Chip Finishing):連線拓展、加寬連線,冗余通孔插入,插入填充單元,填充金屬等;

如下圖所示。

image-20210727095443653

即將DC綜合后輸出的SDC約束文件,門極網表,代工廠提供的元件庫(.db),物理庫(physical lib),工藝文件(.tf),RC參數文件(tlu+)等輸入ICC后,通過軟件中完成布局布線操作,最終會輸出可以提供給代工廠進行芯片加工的版圖。

image-20210727095623732

此外在完成布局布線后還要在ICC中再次導出門極網表和時序描述文件用於后仿真,與DC導出的文件的區別是

  1. ICC導出的門極網表文件中的模塊與連線與版圖是嚴格對應的
  2. ICC導出的時序描述文件中的延時由RC參數計算而來

深入學習ICC,最好的方式是熟讀Synopsys公司的《IC Compiler 1 Workshop Student Guide》。

2.版圖基本知識

使用MOS工藝制作集成電路時,由於集成電路的制作是平面加工工藝,而芯片是立體結構。平面工藝到立體結構的實現,需要多層掩模版。每一層掩模版需要用一層版圖來表示,因此版圖也是分層的,即不同層的版圖代表不同的掩模版。版圖是用二維圖形表示電路的三維結構,版圖設計的目的是完成集成電路加工所需的各個掩模版上的圖形的設計。

下圖為一個非門的版圖:

image-20210727181633369

該非門制作時采用N阱工藝,襯底為P型,PMOS做在N阱中,其剖面圖如下:image-20210727181559376

觀察剖面圖可以很容易的看出制作時的分層關系。制作該非門時所需要的版圖包括:

  • N-well:N阱
  • active:有源區
  • N-implant:N型摻雜
  • P-implant:P型摻雜
  • poly:柵
  • contact:金屬觸點
  • metal1:金屬連線

如下圖所示

image-20210727181615981

在進行復雜集成電路加工時,單層金屬連線往往不能夠滿足需求,因此會有多層金屬連線。如本次實驗使用的是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

image-20210727184548513

2.依次輸入

ic
icc_shell -f icc_setup.tcl

image-20210727184711223

3.等待腳本運行完成,如果出現報錯(和DC綜合時一樣,執行出錯會打印0)則根據報錯信息修改icc_setup.tcl。運行完后會自動進入GUI,並且可以看到各個單元。

image-20210727184911314

至此Data Setup步驟完成,可以開始進行布局布線了。

4.在GUI中布局布線

1.在icc_shell中輸入

start_gui

啟動GUI,①為標簽欄,后續各個步驟都在標簽欄中進行調用;②為芯片預覽圖,每一步操作后會更新該圖,可以通過滾輪進行放大縮小。

image-20210727214358185

2.下面開始Design Planning

創建Foorplan,並規定core area到芯片邊緣的距離,統一設置為50

Foorplan ---> Create Foorplan

image-20210727215253318

創建完畢后:

image-20210727215455909

3.創建電源和地

Preroute ---> Derive Power Ground Connection

選擇Manuel connection,依次命名Power net,Power pin,Ground net,Ground pin為VDD和VSS,Create port選擇Top

image-20210727215608690

此步驟完成后芯片預覽圖不會更新,但在Shell中會打印成功連接電源的信息

image-20210727215640575

4.創建電流環

Preroute ---> Create Rings

Nets中填寫VDD VSS,Horizontal為水平布線,層數選擇為第五層金屬(METAL5),Vertical為垂直布線,層數選擇為第六層金屬(METAL6),Offset、Width和Space分別設置為5、15、5

image-20210727220048263

此步完成后芯片預覽圖變更如下:

image-20210727220346379

5.創建Power Straps

Preroute ---> Create Power Straps

Nets填寫VDD VSS,層數選擇METAL6,Width設置為5,方向選擇Vertical,X start、Straps、X increment分別設置為70、5、30

image-20210727220810581

此步完成后芯片預覽圖變更如下:

image-20210727221025093

6.填充標准單元

Finishing ---> Insert Standard Cell Filler

Without metal中填寫FILL64 FILL32 FILL16 FILL8 FILL4 FILL2 FILL1

image-20210727221815494

此步完成后芯片預覽圖變更如下:

image-20210727221844061

7.連接各個標准單元

Preroute ---> Preroute Standard Cells,此步結束后可以在預覽圖中看到很多小的橫向電源條

image-20210728000524271

此步完成后芯片預覽圖變更如下:

image-20210728000608543

8.去除填充

Finishing ---> Remove Fillers,選擇刪去Standard Cell

image-20210728000653109

此步完成后芯片預覽圖變更如下:

image-20210728001127931

至此電源網絡搭建完畢,Design Planning結束,開始Placement

9.開始進行電路單元布局,此步驟點擊執行后需要等待一段時間

Placement ---> Core Placement and Optimization

image-20210728001517794

此步完成后芯片預覽圖變更如下:

image-20210728001604746

可以看到所有電路單元都被放進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后同樣進行配置

image-20210728001812516

image-20210728001934942

image-20210728002637098

image-20210728002708751

11.開始連接時鍾,Clock tree names填寫clk_div clk,勾選Fix hold time violation for all clocks,等待連接完成,連接完成后可以看到芯片預覽圖中多出的時鍾連線。

Clock ---> Core CTS and Optimization

image-20210728002823504

此步完成后芯片預覽圖變更如下:

image-20210728003824384

12.重新建立電源,這次Create port選擇None

Preroute ---> Derive Power Ground Connection

image-20210728003141717

Shell中打印的信息如下

image-20210728003227205

至此Clock Tree Synthesis結束,開始Route

13.設置忽略的布線層,Maximum routing layer選擇METAL6,Minimum routing layer選擇METAL1,下面全都不勾選,代表所有金屬層都納入RC參數計算

Route ---> Routing Setup ---> Set Ignored Layers

image-20210728003330861

  1. Route ---> Net Group Route,選中All clock nets

image-20210728003515348

15.布線相關設置完成,開始布線,布線結束后各個單元模塊之間就已經完成了相互連接。

Route ---> Core Routing and Optimization

image-20210728003700996

此步完成后芯片預覽圖變更如下:

image-20210728003726221

至此Route完成,開始Chip Finishing

16.再次進行標准單元填充,但這次的填充單元是帶金屬的,輸入在With metal一行,Other Options標簽中,勾選二三兩項

Finishing ---> Insert Standard Cell Filler

image-20210728003953507

image-20210728004008022

此步完成后芯片預覽圖變更如下:

image-20210728004145419

至此Chip Finishing步驟結束,芯片可以說已經設計好了,接下來就是導出各個文件並進行驗證了

17.依次導出網表(.v),提取寄生參數、導出時序描述(.sdf),導出寄生參數文件(.spef),以及代工廠用於加工的GDSII文件

導出網表,Output verilog file name選擇文件路徑時,文件命名要帶.v的后綴名

File ---> Export ---> Write Verilog

image-20210728004800186

提取寄生參數

Route ---> Export RC

image-20210728004909041

導出時序約束

File ---> Export ---> Write SDF

image-20210728004930395

導出寄生參數文件

File ---> Export ---> Write Parasitics

image-20210728004952380

導出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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM