热度 1|
转自:http://www.ictown.com/thread-95100-1-1.html 用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 步骤6:确认当前顶层设计。> current_design RISC_CHIP 步骤7:将网表中例化的单元与参考库中的单元做连接。 > link 步骤8:设置TLU+文件。 步骤9:读入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修复。 |