
The aim of this project is to conduct a Static Timing Analysis on an earlier project 'Alarm Clock'. Strict constraints will be used to push the system to its limits, with analysis and optimisations being conducted at various levels.
Static Timing Analysis (STA) is a method to verify that your digital design meets its timing requirements without running functional simulations. It checks whether all signal paths can transfer data within the required clock period, considering:
- Setup time
- Hold time
- Clock uncertainties (skew, jitter, variation)
- Data path delays (logic and routing)
In FPGAs, even if simulation works perfectly, you can fail on hardware if STA is ignored:
- Data corruption due to missed setup or hold
- Unstable operation under temperature/voltage variations
- Clock domain crossing failures
The STA that was performed has been explained with the commands used. The commands can also be found in the file titled 'commands':
Check the clock with various periods: create_clock -name clock_name -period [get_ports entity top_module_clock_name];
create_generated clock -name clock_name -source [get_pins mmcm_inst/CLKOUT 0]\ - divide_by 2 [get_pins bufg_div2/0]
set_input_delay 2.0 -clock entity_clock_name [get_ports entity_data_input_names]; set_output_delay 2.0 -clock entity_clock_name [get_ports entity_data_output_names];
report_timing_summary -report_unconstrained
open_run impl_1 report_timing -delay_type max -nworst 5 -max_paths 1 report_high_fanout_nets -max_nets 10 report_clock_interaction
Split long combinatorial logic across cycles
attribute use_dsp : string; attribute use_dsp of my_signal : signal is "yes";
Decompose giant case/if- trees Balance reductions (eg: trees of ladders instead of linear chain)
set_max_fanout 32 [get_nets en*]
phys_opt_design -directive AggressiceFanoutOpt
reset_runs synth_1 synth_design -top top_module_name -part part_name -retiming -flatten_hierarchy rebuilt
set_property STRATERGY Perfromance_Explore [get_runs impl_1] launch_runs impl_1 -to_step route_design
open_run impl_1 opt_design place_design -directive ExtraNetDelay_high phys_opt_design -directive AggressiveExplore route_design -directive Explore phys_opt_design -directive AggressiveExplore
The timing report noted a significant change in the timings in the pblock stage; however, the constraints were too stringent and had to be relaxed for proper functioning of the application.
If the path delay is mostly routing, keep related logic close create_pblock p_datapath add_cells_to_pblock p_datapath [get_cells -hier {source_cell dest_cell}]
resize_pblock p_datapath -add {SLICE_X10Y20 : SLICE_X60Y90}