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]
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