Set NDM
Set NDM
current_lib
save_lib
source ../ref/ORCA_TOP_designdata/ORCA_TOP.upf
set_attribute -objects [get_cells -hierarchical -filter "is_hard_macro==true"] -name physical_status -value locked
save_block -as fp
dp_pre_create_placement_abstract
dp_pre_block_shaping
dp_pre_macro_placement
dp_pre_power_insertion
dp_pre_pin_placement
dp_pre_create_timing_abstract
dp_pre_timing_estimation
dp_pre_budgeting
dp_floorplan_rules
report_macro_constraints
#initialize_floorplan -core_utilization 0.6 -shape L -orientation N -core_offset 15 -coincident_boundary true -side_ratio {1 1 1 1} – – ->
L shape
#initialize_floorplan -core_utilization 0.6 -shape R -orientation N -core_offset 15 -coincident_boundary true -side_ratio {10 3} -
boundary {{0 0} {150 300}} – – -> R shape
#initialize_floorplan -control_type die -boundary {{0 0} {0 3000} { 1000 3000} {1000 2000} {2000 2000} { 2000 3000} {3000 3000}
{ 3000 0} {2000 0} { 2000 1000} { 1000 1000} {1000 0}} -core_offset 100. – – > H shape
get_lib_cells TAP
get_lib_cells BOUND
report_global_timing
set_block_pin_constraints -self -allowed_layers {M3} -pin_spacing 3 -sides {1 3} -width {0.07} -corner_keepout_num_tracks 1 -self –
– – > for inputs
set_block_pin_constraints -self -allowed_layers {M2} -pin_spacing 3 -sides {2 4} -width {0.07} -corner_keepout_num_tracks 1 -self –
– -> for outputs
place_pins -ports [get_ports -filter {direction == out}] (or) place_pins -ports [all_outputs]
check_pin_placement
create_pg_mesh_pattern M4toM7 -layers {{{vertical_layer: M4} {spacing: minimum} {pitch: 2.2} {width: 0.22} {offset: 0.6}}
{{vertical_layer: M6} {spacing: minimum} {pitch: 2.4} {width:0.24} {offset: 0.6}} {{horizontal_layer: M5} {spacing: minimum} {pitch:
2.6} {width:0.26} {offset: 0.6}} {{horizontal_layer: M7} {spacing: minimum} {pitch: 3} {width:0.5} {offset: 0.6}}}
set_pg_strategy pg_mesh -core -pattern. {{name: M4toM7 } {nets: VDD VSS }} -extension {{stop: 0.2} {layers: M4}}
create_pg_mesh_pattern. M9 -layers {{horizontal_layer: M9} {width: 1.0} {pitch: 3} {spacing: minimum} {offset: 0.9}}
set_pg_strategy ring_pg_M9 -design_boundary -pattern {{name: M9 } {nets: VDD VSS }} -extension {{stop:
design_boundary_and_generate_pin}}
create_pg_mesh_pattern. M8 -layers {{vertical_layer: M8 } {width: 1.0} {pitch: 6} {spacing: minimum} {offset: 1.4}}
set_pg_strategy ring_pg_M8 -design_boundary -pattern {{name: M8 } {nets: VDD VSS }} -extension {{stop: 1} {layers: M9}}
check_pg_drc
create_pg_vias -nets. {VDD VSS} -from_layers M4 -to_layers M1 -via_masters M4_M1 -allow_parallel_objects -within_bbox
[get_attribute [current_block] bbox]
check_pg_drc
check_pg_missing_vias
#M5_M4#33
check_pg_drc
check_pg_missing_vias
# M6_M5
create_pg_vias -nets {VDD VSS} -from_layers M6 -to_layers M5 -via_masters M6_M5 -allow_parallel_objects -within_bbox
[get_attribute [current_block] bbox]
check_pg_drc
check_pg_missing_vias
#M7_M6
create_pg_vias -nets {VDD VSS} -from_layers M7 -to_layers M6 -via_masters M7_M6 -allow_parallel_objects -within_bbox
[get_attribute [current_block] bbox]
check_pg_drc
check_pg_missing_vias
# M8_M7
create_pg_vias -nets {VDD VSS} -from_layers M8 -to_layers M7 -via_masters M8_M7 -allow_parallel_objects -within_bbox
[get_attribute [current_block] bbox]
check_pg_drc
check_pg_missing_vias
#M9_M8
create_pg_vias -nets {VDD VSS} -from_layers M9 -to_layers M8 -via_masters M9_M8 -allow_parallel_objects -within_bbox
[get_attribute [current_block] bbox]
check_pg_drc
check_pg_missing_vias
remove_pg_via_master_rules -all
remove_pg_patterns -all
remove_pg_strategies -all
remove_pg_strategy_via_rules -all
set_pg_strategy core_ring -pattern {{name: ring_pattern} {nets: {VDD VSS }} {offset: {1 1}}} -core -extension {{stop:
design_boundary_and_generate_pin}}
create_pg_mesh_pattern mesh_pattern -layers {{{vertical_layer: M6} {width: 1.5} {pitch: 5} {offset: 5} { trime: true }}
{{horizontal_layer: M5} {width: 1.2} {pitch: 5} {offset: 5} {trim : true}}}
set_pg_strategy M5M6_mesh -pattern {{name: mesh_pattern} {nets: VDD VSS }} -core -extension {{stop: design_boundary}}
create_pg_mesh_pattern mesh_pattern -layers {{{vertical_layer: M5} {width: 1} {pitch: 3} {offset: 1.7} { trime: true }}
{{horizontal_layer: M4} {width: 0.89} {pitch: 1.7} {offset: 1.5} {trim : true}}}
set_pg_strategy M4M5_mesh -pattern {{name: mesh_pattern} {nets: VDD VSS }} -core -extension {{stop: core_ring}}
analyze_power_plan -report_track_utilization_only
check_pg_missing_vias
report_utilization
legalize_placement
legalize_placement
#avoid overlapps
legalize_placement
get_cells eco_cell*
get_nets eco_net*
check_pg_drc
check_pg_drc
### prefixing the newly added cells. during place_opt ######
#opt.common.user_instance_name_prefix newly_added
####### do not use high drive strength cell for better utilization###################
report_qor -summary
report_design
report_utilization -verbose
check_pg_drc
check_pg_missing_vias
check_legality
check_boundary_cells
report_scenarios
report_parasitic_parameters
report_utilization
magnet_placement -mark_fixed [get_cells “INST_2"] – -→ performs magnet placement. and. marks. the. moved cells as fixed
afterwards
create_bound -effort high -name bound1 {cell1 cell2 cell3 … celln} – -→ Create a group bound for the collection of island of
cells/macros
create_bound -name “movebound1" -boundary {{50 60} { 40 80}} -type hard -exclusive {invA1 reset} – -→ creates a hard exclusive
move bound named “move bound1" with. square bound. shape. The. bound contains the invA1 cell and reset port.
#### to reduce congestion b/w hard macros & perform. coarse placement ####
report_utilization
report_utilization
report_utilization
report_utilization
report_utilization
legalize_placement -incremental
check_legality -verbos
report_congestion
report_utilization