Search This Blog

Friday, February 28, 2020

Static Timing Analysis Overview

Static timing Analysis and issues solving techniques and commands

Inputs For Static timing Analysis
  • Verilog netlist (.V)
  • Library files (.LIB)
  • SPEF (standard parasitic extraction files) (.SPEF)
  • DEF (design exchange format) (.DEF)
  • SDC (synopsys Design Constraints) (.SDC)
Sanity Checks
  • Check_timing
  • checkDesign -all
  • checkLibrary
  • All_analysis_view
  • report_annotated_delay
1.Check_timing : issues
  • Unconstrained endpoint
  • Clock_expecting
  • No drive assertion
  • Ideal wave forms
  • Input delay 
  • Timing Loops
Unconstrained endpoint & clock_expecting
Fixing techniques :
  • For port we will create the clocks
  • For pin we will createthe generated clocks
Example to create generated clock : check_timing -verbose > check_timing.rpt1
get_property [get_pins reg/CK ] clock_sources
foreach_in_collection a [all_fanin -to reg/CK] {
puts [get_object_name $a]
}
get_property [get_pins reg[0]/Q ] clock_sources
create_generated_clock -source clk -divide_by 2 -name nag_gen_clk1 [get_pins reg[0]/Q ]
No drive assertion: 
Set_drive 100 [get_pins pin_name]
Set_input_delay -clock V_clk  -add_delay 1.2 [get_pins /ports pin/port_name]
Ideal waveforms:
Set_propageted_clocks [get_clocks*]
Timing Loops
Timing_enable_mmmc_loop_handling true
Set_disable_timing [get_cells cell_name]

2)checkDesign -all
 It will give all design statistics 
  • Macro cell count 
  • Combinational 
  • Sequential cell count
  • Instance count 
  • Area
  • Floating pins  
  • Unresolved References
3). All_analysis_views
It will display all the analysis views 
  • Av_max1 , av_max2, av_max3 ,av_min1,av_min2

If we have more analysis views you can set the view and debug the timing issues
How to set the analysis views
Set_analysis_view -setup [list av_max1] -hold [list av_min1]

Timing Fixing techniques
Commands to report the timing violations
Report_timing 
Report_timing -early
Report_timing -early -max_paths 100 -nworst 10 -collection
Report_timing -early -path_group r2r -max_paths 100 -nworst 20 -path_type full_clock
Report_timing -late -path_group r2r -max_paths 100 -nworst 20 -path_type full_clock
report_constraint -all_violators -drv_violation_type max_transition
report_constraint -all_violators -drv_violation_type max_cpacitance
report_constraint -all_violators -drv_violation_type max_fanout
report_constraint -all_violators -early
report_constraint -all_violators -late
Report_timing -late -collection
Report_analysis_summary -late
Report_analysis_summary -early
ECO DRV's, HOLD & SETUP FIXING
#### system generated file##################
write_eco_opt_db
set_eco_opt_mode -load_eco_opt_db ecoTimingDB/
eco_opt_design -hold
#### individual own name ##############################
set_eco_opt_mode -save_eco_opt_db file_name
write_eco_opt_db
eco_opt_design -hold/setup/drv
The above commands will generate the three files ,They are 
Innovus.tcl
Tempus.tcl
ecoTimingDB
###########By manual fixing of setup /hold/drv################
Add_repeater -term pin/name -cell BUX_16 //adding buffer
Change_cell -inst instance_name  -cell BUX_16 // cell swapping
Change_cell -inst instance_name -down/upsize_cell //up_sizing//down_sizing
Dumping the Eco's
Write_eco  -format innovus -out Eco_DRV_innovus.tcl
write_eco -format tempus -out Eco_DRV_tempus.tcl

Useful COMMANDS
  • filter_collection [all_registers] "is_memory_cell==true"
  • report_timing -collection
  • get_arcs
  • get_cells
  • all_instances
  • all_registers
  • all_fanin/all_fanout -only_cells
  • get_clocks / get_generated_clocks /all_clocks
  • get_designs
  • lib_timing_arc 
  • get_lib_arcs
  • get_lib_cells
  • get_libs
  • get_nets
  • all_connected
  • To get the Path groups, get_path_groups
  • pg_net Power / Ground nets get_pg_nets
  • pg_pin Power / Ground pins get_pg_pins
  • lib_pg_pin Power/Ground pins in Library get_lib_pg_pins
  • get_pins
  • all_fanin
  • all_fanout
  • get_property [get_clocks clk] period 
  • get_ports / all_inputs / all_outputs / all_connected /
  • group_path -name r2r -from [all_registers] -to [all_registers]
  • group_path -name r2o -from [all_registers] -to [all_outputs]
  • group_path -name i20 -from [all_inputs] -to [all_outputs]
  • group_path -name i2r -from [all_inputs] -to [all_registers]
  • filter_collection [all_registers] "is_memory_cell==true" 
  • report_property [get_cells clock_cell_1] -property_list {ref_lib_cell_name area}
  • get_property [get_clocks gen_clock1] clock_sources 
  • get_property [get_clocks gen_clock1] sources 
  • get_property [get_property [get_clocks gen_clock1] sources] object_type 
  • set worst_path [report_timing –collection]
  • get_object_name [get_property $worst_path capturing_clock]
  • get_property [get_property $worst_path capturing_clock] object_type
  • sort_collection [get_ports *] {direction full_name}
  • Report_delay_calculation -from abc/a -to adc/b
  • report_timing -path_type end_slack_only -early 
  • report_timing -path_type end_slack_only -early -max_paths
  • report_timing -path_group r2r -path_type full_clock -format {instances arc cell delay arrival required slew fanout net incr_delay}
  • get_pins -hier -filter "hierarchical_name =~ */D" to report all_end_points 

No comments:

Post a Comment

What is the sanity checks you have done for STA?

 Sanity checks for STA: Linking Checks: We need to check., is there any missing modules or missing pins in a library. this is done by link c...