DC輸出門級網表和標準設計約束文件之後,使用IC complier進行後綜合,得到版圖文件。本文轉載自論壇。我會結合自己的使用增加新的內容,並且隨着使用不斷更新
============================================================================
用icc_shell -g 啓動GUI界面
在GUI界面中,File—>Open Design打開已建立好的MW library;
若是新建立MW library,一般用以下步驟:
(最好每做一個步驟,保存一次數據,如:save_mw_cel -as floorplan)
步驟1:在lab1_flow路徑下啓動ICC shell。
> icc_shell –gui
步驟2:設置search path、target_library、link_library:
Lib_setup.tcl:
# Library setup
lappend search_path ./ref/db ./ref/tlup
set target_library "sc_max.db"
set link_library "*"
foreach lib {sc io ram16x128} {
lappend link_library ${lib}_max.db
set_min_library ${lib}_max.db -min_ver ${lib}_min.db
}
步驟3:爲設計創建library。> create_library
步驟4:打開創建的library。> open_mw_lib
步驟5:讀入verilog網表。> read_verilog 並將網表唯一化(ICC應該能自己進行唯一化操作)。> uniquify_fp_mw_cel
步驟6:確認當前頂層設計。> current_design RISC_CHIP步驟7:將網表中例化的單元與參考庫中的單元做連接。
> link
步驟8:設置TLU+文件。 >set_tlu_plus_files 並檢查TLU+文件 >check_tlu_plus_files
步驟9:讀入SDC文件,設置芯片工作環境。 >read_sdc
步驟10:檢查設計的合理性。
>set_zero_interconnect_delay_mode true
>report_timing
>report_constraints –all_violators
>set_zero_interconnect_delay_mode false
步驟11:在設計中添加電源pad和corner cell等physical only cells。
phy_cells.tcl:
#corner cells
create_cell {cornerll cornerlr cornerul cornerur} pfrelr
#pg pads
create_cell {vss1left vss1right} pv0i
create_cell {vdd1left vdd1right} pvdi
create_cell {vss2left vss2right} pv0a
create_cell {vdd2left vdd2right} pvda
步驟12:讀入IO約束文件.。 > read_io_constraints
步驟13:初始化floorplan。 > initialize_floorplan
步驟14:加入pad filler並生成pad ring。
complete_die.tcl
# Set Pad Fillers
set feedthrupads "pfeed10000 pfeed05000 pfeed02000 "
# Insert Pad Fillers
insert_pad_filler -cell $feedthrupads
# Connect PG nets
proc update_pg {} {
foreach net {VDD VDDO VDDQ} {connect_pg_nets -nets $net -ports $net -net_type power}
foreach net {VSS VSSO VSSQ} {connect_pg_nets -nets $net -ports $net -net_type ground}
connect_pg_nets -update_tie_hi_lo
}
update_pg
# Create Pad Rings
create_pad_rings
步驟15:自動做floorplan的placement,作爲爲floorplan的參考。
> create_fp_placement
步驟16:手動擺放Macro,並完成flooplan。> create_fp_placement –incremental all
步驟17:創建core rings及power straps。
步驟18:做電源網絡分析(PNA),查看電源規劃的IR Drop。
步驟19:設置place blockage。
步驟20:布instance的電源和地。> preroute_instances
步驟21:布power rail(給標準單元供電的電源和地線)。
> preroute_standard_cells
步驟22:設置placement的約束。在METAL5 METAL6的PG線下面不擺放標準單元。
>set_pnet_options –complete {METAL5 METAL6}
步驟23:佈局(placement)。placement這一步還會做scan chain的reorder,HFS.
> place_opt
> report_timing
> report_constraints –all_violators
步驟24:時鐘樹綜合優化及佈線。
> clock_opt
Ndr_settings.tcl:
remove_routing_rules -all
define_routing_rule double_spacing \
-spacings {METAL2 0.6 METAL3 0.6 METAL4 0.8 METAL5 1.2 METAL6 1.4}
set_clock_tree_options -routing_rule double_spacing \
-layer_list {METAL3 METAL4 METAL5 METAL6}
重新定義關於clock uncertainty的定義,去掉其中估計的clock skew的部分。
>set_clock_uncertainty 0.1 [all_clocks]
>clock_opt
CTS之後開始關心holdtime,如果有hold violation,可以用下面命令修復
>clock_opt –fix_hold_all_clocks
步驟25:佈線(routing)。
> route_opt
用report_timing –max 或 –min查看setup\hold是否滿足設計要求(或者report_constraints –all_violators)。
步驟26:做佈線後DRC檢查。
> verify_drc
步驟27:可製造性設計。 例如檢查天線效應,先load天線效應的rules(由library vendor提供)
>source scripts/cb13_6m_antenna.tcl
用report_antenna_rules查看Antenna規則;用report_antenna_ratio查看天線效應報告。
“@@@@ Total nets not meeting constraints =”後面顯示了violation的數量。
用route_search_repair修復。