STA PT-SI flow

PT-SI:

PT-SI is PT with Signal Integrity. PT-SI is basically  timing tool with crosstalk (requires separate license of PT-SI, regular PT license won't work)

link for discussion of si_xtalk_delay_analysis_mode option in PT-SI:
https://solvnet.synopsys.com/retrieve/015943.html?otSearchResultSrc=advSearch&otSearchResultNumber=4&otPageNum=1

PT-SI runs thru these steps:
1. electrical filtering, where aggressor nets whose effects are too small to be significant, based on the calculated sizes of bump voltages on the victim nets re removed. You can specify the threshold level that determines which aggressor nets are filtered. If the bump height contribution of an aggressor on its victim net is very small (less than 0.00001 of the victim’s nominal voltage), this aggressor is automatically filtered.
2. After filtering, PT SI selects the initial set of nets to be analyzed for crosstalk effects from those not already eliminated by filtering. You can optionally specify that certain nets be included in, or excluded from, this initial selection set.
3. The next step is to perform delay calculation, taking into account the crosstalk effects on the selected nets. This step is just like ordinary timing analysis, but with the addition of crosstalk considerations. This step runs in 2 iterations:
I. For the initial delay calculation (using the initial set of selected nets), PrimeTime SI uses a conservative model that does not consider timing windows.
II. In the second and subsequent delay calculation iterations, PT SI considers timing windows, and removes from consideration any crosstalk delays that can never occur, based on the separation in time between the aggressor and victim transitions or the direction of the aggressor transition. The result is a more accurate, less pessimistic analysis of worst-case effects. By default only 2 iterations done, as these provide good results. This variable is used to set no. of iterations. si_xtalk_exit_on_max_iteration_count => default to 2

logical correlation for buffers and inverters is considered in PTSI. For ex, if there is an inverter and both i/p and o/p nets of buffer are aggressing to a net, than these switch in opposite dirn, cancelling the x coupling effect, and resulting in very small delta delay or noise effect.

PT-SI is same as normal flow, except that we have to enable SI. These are the steps:
1. set target lib, link lib same way. set op cond to ocv.
2. Enable PT-SI (if we want to run SI)
set si_enable_analysis TRUE

3. set parameter for xtalk analysis
#For xtalk, default is to calc max delta delay for all paths (all_paths).
#set si_xtalk_delay_analysis_mode
#all_paths -> Calculate Max delta delay for all path through victim net. Could be pessimistic for critical paths for 2 reasons: Firstly, switching region of the victim is derived from the early and late timing windows without considering the individual subwindows that constitute it. Therefore, this might include regions where there is no switching on the victim. Second, the entire on-chip variation of the path is considered, creating the effect of multiple paths even when only a single path exists, for example, in a chain of inverters.
#all_path_edges -> considers only the edges of transition on victim net. This eliminates false overlap due to timing window caused due to multiple paths, and results in more accurate xtalk delay.
# worst_path -> DEPRECATED. do not use. Calculate Max delta delay only for critical path through victim. Accurate for critical path but could be optimisitic for non-critical paths. We pick victim critical path, so victim window is discrete edge, and false overlap of timing window is eliminated.
# violating_path -> DEPRECATED. do not use. Calculate Max delta delay for worst path and all <0 slack paths (recommended)
set si_xtalk_delay_analysis_mode all_path_edges

4. read verilog and parasitics as normal.
read_verilog /db/DAYSTAR/NIGHTWALKER/design1p0/HDL/FinalFiles/digtop/digtop_final_route.v
current_design $TOP
link

read_parasitics -keep_capacitive_coupling -format spef /db/DAYSTAR/NIGHTWALKER/design1p0/HDL/FinalFiles/digtop/digtop_qrc_max_coupled.spef => -keep_capacitive_coupling is needed to preserve all coupling cap from spef file. else, they will be grounded, and we wont see any noise effect. NOTE: spef file used here should have been generated with coupling caps in it (they should not be grounded). In EDI, it's done by generating spef after doing "setExtractRCMode -coupled true".
report_annotated_parasitics -check => make sure that coupling cap is shown here

5. read sdc constraints, check_timing, and then report timing for setup/hold.
report_timing -crosstalk_delta -delay max|min -path full_clock_expanded -nets -capacitance -transition_time -max_paths 500 -slack_lesser 2.0 => reports delta delay due to noise in GBA (can use -cross also instead of -crosstalk_delta). dtrans col in report shows delta transition caused due to xtalk, while delta col shows delta delay caused.
report_timing -crosstalk_delta -pba_mode exhaustive -delay max|min -path full_clock_expanded -nets -capacitance -transition_time -nworst 1 -max_paths 50 -slack_lesser 0.2 => reports delta delay due to noise in PBA.

PBA mode improves noise delay significantly because of 3 reasons: (https://solvnet.synopsys.com/retrieve/012134.html?otSearchResultSrc=advSearch&otSearchResultNumber=6&otPageNum=1)
A. slew rate is improved.
B. only single victim edge is considered for a single path of victim. Aggressor still have windows, as they can have multiple paths, but this reduces the overlap b/w victim and aggressor, resulting in elimination of lot of false victim window.
C. CPRR is improved, resulting in hold time improvement.

NOTE: PBA can't be used in sdf, as sdf has single delay value associated with each cell (it's a graph based rep).

6. static noise analysis: noise related reports. It uses noise modling from .lib or estimates noise based on delays/slew.
PTSI uses the following order of precedence when choosing which noise immunity information to use:
1.Static noise immunity curve annotated using the set_noise_immunity_curve command
2.DC noise margin annotated using the set_noise_margin command
3.Arc-specific noise immunity curve from library
4.Pin-specific noise immunity curve from library
5.CCS noise model from library
6.DC noise margin from library

#bottleneck for xtalk delta delay
report_si_bottleneck -cost_type delta_delay -significant_digits 3 => determine the major victim nets or aggressor nets that are causing multiple violations. reports the nets having the highest “cost function”. Four different cost functions:
1. delta_delay – Lists the victim nets having the largest absolute delta delay, among all victim nets with less than a specified slack.
2. delta_delay_ratio – Lists the victim nets having the largest delta delay relative to stage delay, among all victim nets with less than a specified slack.
3. total_victim_delay_bump – Lists the victim nets having the largest sum of all unfiltered bump heights (as determined by the net attribute si_xtalk_bumps), irrespective of delta delay, among all victim nets with less than a specified slack.
4. delay_bump_per_aggressor – Lists the aggressor nets that cause crosstalk delay bumps on victim nets, listed in order according to the sum of all crosstalk delay bumps induced on affected victim nets, counting only those victim nets having less than a specified slack.
By default, the specified slack level is zero, which means that costs are associated with timing violations only. If there are no violations, there are no costs and the command does not return any nets.

#nets reported by the bottleneck cmd are investigated with this cmd.
report_delay_calcualtion -crosstalk -from -to => provides detailed information about crosstalk calculations for a particular victim net. It shows active aggressors, reason for inactive aggressor, delta delay/slew and victim analysis.
I - aggressor has Infinite arrival with respect to the victim
N - aggressor does not overlap for the worst case alignment

#update_timing => updates timing due to xtalk, after "what if" fixes are made using size_cell and set_coupling_separation.
#update_noise => detects functional errors resulting from the effects of crosstalk on steady-state nets.

report_si_double_switching => determine those victim nets with double-switch violations in the design. Double-switching errors such can cause incorrect circuit operation by false clocking on the inactive edge of a clock signal, by double clocking on the active edge of a clock signal, or glitch propagation through combinational logic.

#static noise analysis:
#set_noise_parameters -ignore_arrival -include_beyond_rails -enable_propagation -analysis_mode report_at_source | report_at_endpoint
#-ignore_arrival => causes the arrival window information of the aggressors to be ignored during the noise analysis. Therefore, the aggressors are assumed to be always overlapping to maximize the effect of coupled noise bump.
#-include_beyond_rails => By default, the analysis of noise above the high rail and below the low rail is disabled. This option, enables the analysis of noise beyond the high and low regions.
#-enable_propagation => Specifies whether or not to allow noise propagation. Propagated noise on a victim net is caused by noise at an input of the cell that is driving the victim net. PrimeTime SI can calculate propagated noise at a cell output, given the propagation characteristics of the cell, the noise bump at the cell input, and the load on the cell output.
#-analysis_mode report_at_source | report_at_endpoint => In report_at_source mode, viol are reported at the source of violations. In report_at_endpoint mode, violations are propagated through fanout and reported at endpoints. default value is report_at_source.

NOTE: no noise models needed, as default is "report_at_source" mode, where noise bumps are not propagated, but rather fixed at source. controlled by "set_noise_parameters".
set_noise_parameters -enable_propagation => noise propagated.

#set_noise_margin, set_noise_immunity_curve => Specifies the bump-height noise margins or 3 coefficient values for an input port of the design or an input pin of a library cell, that determine whether a noise bump of a given height at a cell input causes a logical failure at the cell output. noise immunity of cell is provided here.

#set_si_noise_analysis => Includes or excludes specified nets for crosstalk noise analysis.

check_noise => checks the design for the presence and validity of noise models at driver and load pins. No pins should be found w/o noise constraints i.e. The number of pins reported in the “none” row of the report must be zero.

update_noise => performs a noise analysis and updates the design with noise bump information using the aggressor timing windows previously determined by timing analysis.
report_noise -all_violators => generates a report on worst-case noise effects, including width, height, and noise slack. It also determine those victim nets with double-switch violations in the design. -all_violators reports only those pins/nets that have -ve noise slack (i.e noise bump is above noise threhold). To get more detailed report, use -verbose.

#report_noise_calculation => generates a detailed report on the calculation of the noise bump on a net arc (single net). same as report_delay_calculation except that it reports noise instead of delay. The startpoint is the driver pin or driver port of a victim net and the endpoint is a load pin or load port on the same net.

7. inlcuding/excluding certain nets: (if you still have failures), and run delay/noise analysis again.
#set_si_delay_analysis – Includes or excludes specified nets for crosstalk delay analysis.
#set_si_noise_analysis – Includes or excludes specified nets for crosstalk noise analysis.
#set_si_aggressor_exclusion – Excludes aggressor-to-aggressor nets that switch in the same direction. Only specified number of aggressors (default 1) is active at a time.
#set_coupling_separation – Excludes nets or net pairs from crosstalk delay and crosstalk noise analysis.