Orca PNR Project
Orca PNR Project
Orca PNR Project
/bin/tclsh
set ndm_file "/home/sangamg/projects/orca/ref/saed32_ndm/"
set ndm "[glob -directory $ndm_file *.ndm]"
save_lib
remove_scenarios -all
remove_modes -all
remove_corners -all
set m_constr(func)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_m_func.tcl"
set m_constr(test)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_m_test.tcl"
set c_constr(ss_125c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_c_ss_125c.tcl"
set c_constr(ss_m40c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_c_ss_m40c.tcl"
set c_constr(ff_125c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_c_ff_125c.tcl"
set c_constr(ff_m40c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_c_ff_m40c.tcl"
set s_constr(func.ss_125c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_s_func.ss_125c.tcl"
set s_constr(func.ss_m40c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_s_func.ss_m40c.tcl"
set s_constr(func.ff_125c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_s_func.ff_125c.tcl"
set s_constr(func.ff_m40c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_s_func.ff_m40c.tcl"
set s_constr(test.ss_125c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_s_test.ss_125c.tcl"
set s_constr(test.ff_125c)
"/home/sangamg/projects/orca/ref/ORCA_TOP_constraints/ORCA_TOP_s_test.ff_125c.tcl"
########################################
## Mode, corner and scenario creation
########################################
########################################
## Populate modes, corners and scenarios
########################################
load_upf /home/sangamg/projects/orca/ref/ORCA_TOP_design_data/ORCA_TOP.upf
read_parasitic_tech -tlup
/home/sangamg/projects/orca/ref/tech/saed32nm_1p9m_Cmax.tluplus -layermap
/home/sangamg/projects/orca/ref/tech/saed32nm_tf_itf_tluplus.map -name maxTLU
read_parasitic_tech -tlup
/home/sangamg/projects/orca/ref/tech/saed32nm_1p9m_Cmin.tluplus -layermap
/home/sangamg/projects/orca/ref/tech/saed32nm_tf_itf_tluplus.map -name minTLU
foreach c [array names c_constr] {
current_corner $c
source $c_constr($c)
}
########################################
## Configure scenarios
########################################
report_qor -summary
report_clock
###################################################################################
#
#Clock Period Waveform Attrs Sources
#--------------------------------------------------------------------------------
#PCI_CLK 7.50 {0 3.75} {pclk}
#SDRAM_CLK 4.10 {0 2.05} {sdram_clk}
#SD_DDR_CLK 4.10 {0 2.05} G, U {sd_CK}
#SD_DDR_CLKn 4.10 {2.05 4.1} G, U {sd_CKn}
#SYS_2x_CLK 2.40 {0 1.2} {sys_2x_clk}
#SYS_CLK 4.80 {0 2.4 G, U
{I_CLOCKING/sys_clk_in_reg/Q}
#v_PCI_CLK 7.50 {0 3.75} {}
#v_SDRAM_CLK 4.10 {0 2.05} {}
report_design
###################################################################################
###
#Cell Instance Type Count Area
#--------------------------------------
#TOTAL LEAF CELLS 52047 440170.182
#Standard cells 52007 175285.912
#Hard macro cells 40 264884.269
#Soft macro cells 0 0.000
#Always on cells 0 0.000
#Physical only 0 0.000
#Fixed cells 0 0.000
#Moveable cells 52047 440170.182
#Sequential 5427 314141.951
#Buffer/inverter 6481 14753.059
#ICG cells 23 134.950
#
#Logic Hierarchies : 54
#Design Masters count : 170
#Total Flat nets count : 56776
#Total FloatingNets count : 491
#Total no of Ports : 237
#Number of Master Clocks in design : 11
#Number of Generated Clocks in design : 6
#Number of Path Groups in design : 29 (17 of them Non Default)
#Number of Scan Chains in design : 0
#List of Modes : test, func
#List of Corners : ss_125c, ss_m40c, ff_125c, ff_m40c
#List of Scenarios : func.ff_125c, func.ff_m40c, func.ss_125c,
func.ss_m40c, test.ff_125c, test.ss_125c
#
#Core Area : 0.000
#Chip Area : 0.000
#Total Site Row Area : 0.000
#Number of Blockages : 0
#Total area of Blockages : 0.000
#Number of Power Domains : 1
#Number of Voltage Areas : 1
#Number of Group Bounds : 0
#Number of Exclusive MoveBounds : 0
#Number of Hard or Soft MoveBounds : 0
#Number of Multibit Registers : 0
#Number of Multibit LS/ISO Cells : 0
#Number of Top Level RP Groups : 0
#Number of Tech Layers : 71 (71 of them have unknown routing dir.)
#
#Total wire length : 0.00 micron
#Total number of wires : 0
#Total number of contacts : 0
##################################################################################
####################################################3
# set routing direction
####################################################
set_attribute [get_layers {M1 M3 M5 M7 M9}] routing_direction horizontal
set_attribute [get_layers {M2 M4 M6 M8 MRDL}] routing_direction vertical
#################################################
# floorplan
################################################
initialize_floorplan -core_utilization 0.60 -core_offset {2 2 2 2}
#Removing existing floorplan objects
#Creating core...
#Core utilization ratio = 60.04%
#Unplacing all cells...
#Creating site array...
#Creating routing tracks...
#Initializing floorplan completed.
###############################################
##########################################
# to get boundary co-ordinates of blocks
#########################################
get_attribute [current_block] boundary
#{0.0000 0.0000} {0.0000 860.0640} {860.3680 860.0640} {860.3680 0.0000}
#########################################
# create_pin_guides
##########################################
#create_pin_guide -boundary { {0 360} {1 570} } -layers {M3 M5 M7 M9} -name
inputports [remove_from_collection [get_ports -filter "direction == in"]
{ sdram_clk sys_2x_clk sd_DQ_in[*] shutdown VSS VDD} ]
#create_pin_guide -boundary { {300 0} {560 1} } -layers {M2 M4 M6 M8} -name
inputports2 [get_ports -expect_each_pattern_matches { sdram_clk sys_2x_clk
sd_DQ_in[*] shutdown VSS VDD}] ]
###
#
############################################
# create keep out morgin
############################################
create_keepout_margin -type hard -outer {2.9184 15.808 3.1616 0.7296}
[get_selection]
[get_cell I_RISC_CORE/I_REG_FILE/REG_FILE_*]
set_fixed_objects [get_selection]
#####################################################
# power planing
#####################################################
######################### create ports vdd vss
create_port -port_type ground -direction in VSS
create_port -port_type power -direction in VDD
################## create nets vdd vss
create_net -power VDD
######################################################
# to create rail M1
########################################################
connect_pg_net -net VDD [get_pins -hierarchical */VDD]
connect_pg_net -net VSS [get_pins -hierarchical */VSS]
###### VSS
create_pg_mesh_pattern M6toM7_VSS -layers {{{vertical_layer: M6} {spacing: minimum}
{pitch: 9.728} {width: 0.608000} {offset: 5.776}}
check_pg_drc
check_pg_missing_vias
###################################################################################
###
# M8 MESH
###################################################################################
####
get_attribute [get_layers M8] pitch
###### VDD
create_pg_mesh_pattern M8_VDD -layers {{vertical_layer: M8 } {width: 1.216000}
{pitch: 19.456} {spacing: minimum} {offset: 2.608}}
set_pg_strategy ring_pg_M8_VDD -design_boundary -pattern {{name: M8_VDD } {nets:
VDD }} -extension {{stop: design_boundary} {layers: M8}}
compile_pg -strategies ring_pg_M8_VDD
###### VSS
create_pg_mesh_pattern M8_VSS -layers {{vertical_layer: M8 } {width: 1.216000}
{pitch: 19.456} {spacing: minimum} {offset: 12.336}}
set_pg_strategy ring_pg_M8_VSS -design_boundary -pattern {{name: M8_VSS } {nets:
VSS }} -extension {{stop: design_boundary} {layers: M8}}
compile_pg -strategies ring_pg_M8_VSS
###################################################################################
###
# M9 MESH
###################################################################################
####
######## M8 to M7
######## M7 to M6
######## M6 to M1
#####################################################################
##*solution to resolve floating macros RING AROUND MACRO
###############################################################
set macros [get_cell -physical_context -filter "is_hard_macro && !
is_physical_only"]
create_pg_macro_conn_pattern macro_connect_pattern -pin_conn_type scattered_pin -
nets {VDD VSS} -width {0.25 0.25} -layers {M5 M6}
set_pg_strategy macro_connect -pattern {{name: macro_connect_pattern} {nets: VDD
VSS}} -macros "$macros"
compile_pg -strategies macro_connect
#######################################################3
# creating tap cells
#########################################################
get_lib_cells */*FILL*
set_boundary_cell_rules -left_boundary_cell saed32_hvt_std/SHFILL1_HVT -
right_boundary_cell saed32_hvt_std/SHFILL1_HVT
create_boundary_cells -left_boundary_cell saed32_hvt_std/SHFILL1_HVT -
right_boundary_cell saed32_hvt_std/SHFILL1_HVT
connect_pg_net -automatic
check_pg_drc
check_pg_missing_vias
###################################################################################
########
# placement
###################################################################################
#########
create_placement -effort low
create_stdcell_fillers -lib_cells [get_lib_cells */*FILL*]
check_lvs
check_pg_drc
##########################33333####################
# buffwr adding at each ports
###########################3########################
#remove_from_collection [get_port *] {clk I1 I2 VDD VSS}
sizeof_collection [get_ports]
239
############################################################
# prefixing the newly added cells during place_opt
#############################################################
set_app_options -name opt.common.user_instance_name_prefix -value "newly_added"
#opt.common.user_instance_name_prefix newly_added
###################################################################################
#######
# READING SCAN DEF
###################################################################################
#######
read_def /home/sangamg/projects/orca/ref/ORCA_TOP_design_data/ORCA_TOP.scandef
######################################################
# DO NOT USE CK BUFFERS
#######################################################
#there are no CK BUFFS in 32 nm
###############################################################
#do not use high drive strength cell for better utilization
################################################################
set_lib_cell_purpose -include all [get_lib_cells]
set_lib_cell_purpose -include none [get_lib_cells {*/*X32*}]
############################################
# checks before plce cells
############################################
####################################3
# derates
#####################3##########
set_operating_conditions -analysis_type on_chip_variation
set_app_options -name time.si_enable_analysis -value true
#The flowing example enables both the macro and standard cell congestion reduction
strategies.
report_congestion
refine_placement
legalize_placement -incremental
check_legality
###################################################################################
#
# to fix max cap
###################################################################################
##
#########################################
#
#
##########################################
set a {I_RISC_CORE/div_4/u_div/u_fa_PartRem_0_1_2/
I_RISC_CORE/div_4/u_div/u_fa_PartRem_0_1_3/
I_RISC_CORE/div_4/u_div/u_fa_PartRem_0_0_1/
I_RISC_CORE/div_4/u_div/u_fa_PartRem_0_0_2/
I_RISC_CORE/div_4/u_div/u_fa_PartRem_0_0_3/
I_RISC_CORE/div_4/u_div/u_fa_PartRem_0_0_4/}
foreach b $a {
size_cell $b -lib_cell FADDX1_HVT
}
###################################################################################
####################################
###################################################################################
#####################################
## clock tree synthesis
###################################################################################
#####################################
###################################################################################
#####################################
################################
#
################################
## before checks
check_legality
should be clean
report_congestion
acceptable -----if there is no pin density and cell density
report_qor -summary
report_clock_qor
## set refernces
set_lib_cell_purpose -exclude cts [get_lib_cells */*]
##############################################
current_scenario func.ss_m40c
set real_clocks [remove_from_collection [get_clocks] [get_clocks "v_*
SD_DDR_CLK*"]]
###############################################################
current_scenario func.ff_125c
##############################################################
current_scenario test.ss_125c
#########################################################
current_scenario test.ff_125c
set_clock_uncertainty -setup 0.05 [get_clocks SYS_*]
set_clock_uncertainty -hold 0.05 [get_clocks SYS_*]
set_clock_uncertainty -setup 0.05 [get_clocks PCI_CLK]
set_clock_uncertainty -hold 0.05 [get_clocks PCI_CLK]
set_clock_uncertainty -setup 0.05 [get_clocks SDRAM_CLK]
set_clock_uncertainty -hold 0.05 [get_clocks SDRAM_CLK]
set_clock_uncertainty -setup 0.1 [get_clocks ate_clk]
set_clock_uncertainty -hold 0.05 [get_clocks ate_clk]
set_clock_tree_options -target_skew 0.05 -clock [get_clocks SYS_*]
set_clock_tree_options -target_skew 0.05 -clock [get_clocks PCI_CLK]
set_clock_tree_options -target_skew 0.1 -clock [get_clocks SDRAM_CLK]
set_clock_latency 0.2 [get_clocks *SDRAM_CLK]
#
#
#
current_scenario func_ss72125
#
#
create_routing_rule root_ref_rule -multiplier_width 2 -multiplier_spacing 2 -
default_reference_rule
create_routing_rule inter_ref_rule -multiplier_width 2 -multiplier_spacing 2 -
default_reference_rule
create_routing_rule sink_ref_rule -multiplier_width 1 -multiplier_spacing 2 -
default_reference_rule
report_routing_rules
report_clock_qor
report_clock_qor > ../reports/cts/report_clock_qor_befoe_clock_opt.rpt
report_qor -summary
report_qor -summary > ../reports/cts/report_qor_summary_befoe_clock_opt.rpt
report_clock_routing_rules
check_clock_tree
#SYNTAX
# status clock_opt
# [-list_only]
# [-from build_clock | route_clock | final_opto | global_route_opt]
# [-to build_clock | route_clock | final_opto | global_route_opt]
report_clock_qor
report_clock_qor > ../reports/cts/report_clock_qor_clock_build.rpt
report_qor -summary
report_qor -summary > ../reports/cts/report_qor_summary_clock_build.rpt
report_clock_settings
report_clock_settings > ../reports/cts/report_clock_settings_clock_build.rpt
report_qor -summary
report_qor -summary > ../reports/cts/report_qor_summary_clock_rout.rpt
report_clock_routing_rules
report_clock_settings
report_clock_settings
report_clock_settings > ../reports/cts/report_clock_settings_clock_rout.rpt
report_utilization -config config1
current_mode test
set_latency_adjustment_options -reference_clock PCI_CLK -clocks_to_update v_PCI_CLK
set_latency_adjustment_options -reference_clock SDRAM_CLK -clocks_to_update
v_SDRAM_CLK
compute_clock_latency
#################################
clock_opt -from final_opto -to final_opto
report_design
#################################################
# post cts
#################################################
report_qor -summary
report_routing_rules
report_clock_qor
report_timing
report_clock_routing_rules
report_clock_settings
report_clock_timing -type interclock_skew
report_clock_timing -type skew
report_clock_timing -type latency
report_clock_timing -type transition
report_timing
################################################
# routing
#################################################
#
check_design -checks pre_route_stage
#report_app_options *xtalk*
set_app_options -name route_opt.flow.xtalk_reduction -value true
set_app_options -name time.si_enable_analysis -value true
# }
route_global
report_qor -summary
route_track
report_qor -summary > ../reports/routing/report_qor_summary_route_track.rpt
route_detail
#The maximum number of iterations has been reached
# By default, the maximum number of iterations is 40. You can change this limit
by setting the -max_number_iterations option.
# icc2_shell> route_detail -max_number_iterations 20
################################3
# LAYOUT VS SCHEMATIC
#################################
check_lvs
report_clock_qor
report_clock_qor > ../reports/routing/report_clock_qor.rpt
###################################
#
##################################
connect_pg_net -automatic
check_routes
check_lvs
report_clock_qor
report_clock_qor > ../reports/routing/report_clock_qor.rpt