RP Top Design Optimization Guide
RP Top Design Optimization Guide
make Ml also H because to match std cells pins with power rail pattern )
Ito change routing direction in order to match with macros (default = HVH , changed to = VHV ,
[get_layers -filter is_routing_layer = true• ) routing_directio n
[get_layers {Ml H2 M4 M6 MB } J routing_directio n horizontal
[get_layers {M3 MS M7 M9 }) routing_directio n vertical
get_attribute [get_layers {Ml M2 H3 M4 MS M6 M7 MB M9} ] routing_directio n
routing direc tion s
-filter -"_c.:..~1>n1on = norizontal• #to see layers with direction
#pi n guides
create_pin_gu1de -boundary { {O 250} {::. • ~54} } -name I [all_inputs]
create_pin_guide -boundary { { 727 .16 2"r } {·25 ~5 290} } -name O [a ll_outputs]
place_pins -self /place_pins -ports [all_1nputs) /place_pins -ports [all_output]
#keep out ma r ginl to avoi d shorts [Link] std cells and macros D 48,63 Top
Q Search
ii lransale l ■ Gvim
#keep out 111arg1.n{to avoid shorts between std cells and 11acros I
9et_object_na11e [get_cells -physical_context -filter •is_hard_macro = true• ] #to find 11acro cells
create_keepout_ma rgin fi fo_top8/fi fo_co re_l/ rp_fi fo_me■_wrapper8/genb lkl. U8_ FIFO_MEH - type ha rd - outer {8. 28 8. 9 8. 9 e. 9}
create_keepout_margin fifo_top8/fifo_core_l/rp_fifo_me■_wrapper8/genblk1.U2_FIFO_MEH - type hard - outer {8.28 8.9 8.9 8.9}
create_keepout_margin fifo_top8/fifo_core_l/rp_fifo_me■_wrapper8/genblk1.U3_FIFO_MEM -type hard -outer {8.28 8.9 8.9 8.9}
create_keepout_margin fifo_t op8/fifo_col"e_l/rp_fifo_me■_wrapper8/genblk1.Ul_FIFO_MEH -type hard - outer {8.28 8.9 8.9 8.9}
#blockages (hard = same as keep out margin , soft = buffer only placement , partial = 49% utlilization)
create_p lace ■ ent_b lockage -type soft - boundary { {167 483 . 2} { 192 724. 5} }
Note : ■ in spacing can be given during placement blockage only by giving boundaries which creates both blockage and min spacing
#power p lann1ng
create_net -power v(lB #to create power nets
create_net -ground vss
create_port -port_type power -direction in v88 #to create power ports
create_port -port_type ground -direction in vss
connect_pg_net -net vGB [get_pins -physical_context */VDD] #to connect above created ports with nets (#global power connections pg net)
connect_pg_net -net vss [get_pins -physical_context */VSS)
Note : source the sir file fl pg. tc l
check_pg_drc # checks
check_pg_connect1 vi ty
check_pg_missing_vias
~~ ~ ., n (l ot)~
connect pg_net -net vss [get_pi ns - physical_context •/VSS]
Note : ;ource the sir file # pg . t el
chack_pg_drc # checks
check_pg_connectivi ty
check_pg_missing_vias
#tap
c,eat•cells (to prevent
_up_cells uPI
latchtcbn2Bhpcp lus bwp38pl 48hvtfTAPCELLBl<P38Pl48 • distance JO -pa tt• rn stagger ·no_lx - prefix we 11tap - skip_fixed_c e ll s
- lib_cell
get_lib_cells */TAP*
Note , give global power connections and do checks connect_pg_net
' m r t_ra_net-net·••'vss• OH[get_pins
[get_ pins-physical_context
- physical_coirtext •tVDDJ
*fVSS]
re■ove_cells
,, , " a
[get_cells •tap~] uo s tap cells
- remove
;tto """" • after every optimization stage of design"
-no_1x when this opt ion is specified tap cells are placed so that th e re
never is a one site width gap on the left or right side of the
tap cell.
-skl.p_h.xed_ce l ls :
Note:do global pg connections and chec k the reports like check_pg_drc , check_pg_connectivity and check_pg_missing_vias
and check the ti1111nmg reports like
ft (1+<+» 1111181 1~ 1i1 1, l li)II
#legalize_pl acement # to make the cells exactly between site rowl
Note:do [Link] pg connections and check the reports like check_pg_drc. check_pg_connectivity and check_pg_•issing_vias
and check the tillinnig reports like
i) report_tilling
ii) report_qor
iii)analyze_design_viloations # to check max_trans and •ax_cap
iv) report_congestion # better to check in gui {do partial blockage to overcome congestion)
note: check tilling reports after every place_opt steps , "u will be observe slack will be reduced as we are [Link] at every stagea
note:WNS should be <= : % of clock when you are proceeding for CTS (for rptop 0.125 ns )
Q Search
•lbnaal•
)felp
###POST CTS####
set_lib=cell_purpose - include hold [get_lib_cells */DEL* ]
set_scenario_status - active true [get_scenarios * ]
set_propagated_clock [get_clocks CLK]
set_app_options - name cts . common. user_1.nstance_name_prefix -value PST_cts
175,192 47'
da:73 (guepd0130124susdp22)] - VNC Viewer
ii lransole
- -- ii k:c2_shal-2
,Ecit lbols Syntax autr.s Window Help
set_app_options - na1De [Link].si_enable_analysis - value true {FOR ENABUNG THE CROSSTALK {Enables crosstalk analysis during ti■ing analysis)}
report_app_options •[Link]•driven•
set_app_options -name [Link]. timing_driven - value true
set_app_options -nll!De [Link]. t:iming_driven -value true
report_app_options •cross*<[Link]•
set_app_options -name [Link].crosstalk_driven -value true
set_app_options -naJlle route. track. cross ta lk_driven -value true
add_spare_ce l ls -ce ll_name spare - lib_ce ll { ,. /AN2• "'/0R2* "'/BUFFDB* .. /N02"' ~) NR* } -num_instances JO
connect_pg_net -automatic
create_stdcell_hllers -hb_cells [get_hb_cells r/DCAP¥]
214, 73 S8'
N . . ._Dp ions -nmie c [Link].-on.user_instance_naae_pre ix -va ue PST_cts
tlallTDG:
••t scen ■ no status -active true [get_scenarios )
nap;rt_■pp_options •si•enabla•
set_app_options - na11e tinle . si_enable_analysis - value true {FOR ENABUNG THE CROSSTALK {Enables crosstalk analysis during ti■ing analysis)}
niport_app_ optiom. •timing•driven•
set_app_options - nante [Link]. timing_driven - value true
set_app_options - name route . global. timing_driven - value true
route auto
#afte; preroute checks
che ck lvs
che ck=route s
#post route
route_opt
add_spare_cells cell_name spare - lib_cell { • /AN2"' ~ /OR2* "/BUFFDB"- */ND2"' "/NR~ } -num_instances JO
connect_pg_net -automatic
c reate_stdcel l_h l lers - hb_cells [get_lib_cel ls • /DCAP"'D
255 , S7
#?ZZSLLLLJLLLZJJIXfter rout1n~ffflfffftfflllf
add_spare_cells - cell_nanie spare - lib_cell { */AN2* */OR2* */BUFFDB* */ND2* */NR*} - nu ■_instances o
connect_pg_net -automatic
create_stdcell_fillers -lib_cells [get_lib_cells */DCAP-1
connect_pg_net -automatic
re■ove stdcell fillers with violation
create=stdcell=fillers--lib=cells [get_lib_cells */FILL*)
connect_pg_net - automatic
legalize_placement
route_eco
#our Dlethod
re~ove_vias [get_vias *}
remove_pg_strategies -all
remove_pg_patterns ~all
remove_shapes [get_shapes ~1
remove_via_rnaster_rules -all
#useful comands
change_selection [get_cells -physical_context -fil ter ref_name =- al
get_cells -physical_context -filter _la~- a "-= u~ for checking macros their 1n your design
set a [get_terminals -of_obJects [all_inputs]] #to remove terminals
rernove_Lerrninals S2~P+_ rell~ -physical_context -filter __ ~~rrl_-a -~=tr~ -
report_attributes [get_layers Ml] -application# to see attributes of layers
get_at~~ibute [get_layers] min_width # to get each attribute value separately like min width , m1n area etc .,
foreach_1 n_collect1on cl [get_cells ~1 { puts [get_attribute [get_cells ·:: ] name] }
s~zeof_col l ect1on [get_nets] # it will give all cells as it takes as collection of each cell
llength [get_nets ] # it wil l give l as it will take whole as one co llection
get_pin s -of [get_n ets dmuxl] - physical_context
save_bl ock - as bl ockna me - forcP # it will oven~rite the previous block with same name
IHI PROCEDURE TO INSERT FILLER CELLS ###
3 . Use the remove stdcell fillers with violation co1M1and to remove the
decoupling capicitors with violations.
#to remove ~ax cap violations after adding filler cells ###ECO### stage
•note• : first see the driver of the net usi ng report_net_fanout and if it is BUFF try to upsize the cell ot he rwise go for add buffe r or split fanout
add_buffer_on_route [get_nets rp_opa_wfm_gen_top8/ rp_opa_wfrn_gen_dpl/n4] -repeater_distance 38 - l i b_cell [get_lib_cells */ BUFFD8*] -cell_prefix Bl -net_prefix new
sizeof_collection [get_nets -physical_context */new* ] #gives t he collect i on of newly s pli tted nets
sizeof_collection [g__et_cells -physical_context */Bl*] #g i v,e s the collect i on of newly added buffers # use chang e_s elect i on to s ee t he nets
change_selection [get_nets -physical_context */new*l
change_selection [get_cells -physical_context */Bl~l
remove_cells [get_selection J # remove the fi lle r cells t hrough nets to accomoda t e t he buffe r s
legalize_placement
route eco
connect_pg_net -automatic or global pg connections
note : add fillers at last after fixing all violations
295,l
#### PRJIIE - TDIE ####
read_verilog .. /pnr/[Link]
link_design rp_top_top
source .. /pn r /eco2. sdc
read__parasitics -keep_capacitive_coupling .. /pnr/eco2. rp_top_top. cw_- 48 . spef
fix_eco_timing -type setup
fix_eco_timing -type hold -methods insert_buffer -buffer_list {BUFFD8BWP38Pl49HVT}
fix_eco_drc -type max_capacitance - buffer_list {BUFFD8BWP38Pl48HVT}
fix_eco_drc -type ■ax_transition - buffer_list {BUFFD8BWP38Pl49HVT}
write_changes -foraat icc2tcl -out put eco3. tc l
note Iterate the same loop fro m icc2 outputs to ([Link] to icc2) as many times as possible as a result [Link] violations will be reduced gradually
•note still if there are any v1olat1.0ns to fix use sizecell, add buffer , add_buffer_on_route
•note if you do any eco changes do place eco cells , legalize placement , route_eco
•note• : if you do any eco changes do place eco cells , legalize place11ent , route_ecol
report_timing - fro■ generate_ADC_ blocks[ Q) . rp_adc_ postproc_top8/averager/sl_right_shift_ reg[ 2 ) -to generate_ADC_ blocks[ 9] . rp_ adc_ postproc_top0/averagar/s2_data_reg[ 17 )
change_selection [get_ ti.ming_paths - from generate_ADC_b locks [ 9 J • rp_adc_postproc_top8/averager/sl_ right_shi ft_reg [ 2 ] -to generate_ADC_b locks [ IJ I • rp_adc:_postproc_top8/aver
ager/s2_data_reg[ ., ] ]
size_ ce l l generate_ADC_b locks [ ~]. rp_ adc_ postproc_top8/averager/sl_right_shi ft_reg [ 21 - lib_ce l l tcbn28hpc:p lusbwp39pl40hvt/EDFCNQD41NP39Pl49HVT
leg a lize_p la cement
route_eco
size cell
add buffe r on r oute
split fano~t -
set_re f _ libs - ref _libs {fproj l/pd/pdk/tsmc2B/9T_ libs/l vt28/ndm/tcbn2&hpcp lusbwp40pl40lvt_c. ndm} '# TO LOAD LVT LIBS ~
s i ze_ce l l generate_ADC_b locks [ ~ ] . rp_adc_postproc_t op9/decimato r/Ul9 - lib_ce l l tcbn28hpcp lus bwp48pl40lvt_c/INVD8P7BWP48Pl48LVT •# s, IG HVT rn
change_selectJ.on [get_timing_paths -from adc_dout[ l0 ) - to generate_AOC_blocks [ H> ] . rp_adc_postproc_top0/deci mator/sl_accum_reg [3] ] / report_timing t ,.
378,88 Bot