Here, I am sharing some useful learning and setup details for DV. Mostly, GLS activity starting at last phase or near tap-out. By considering time to market with quality. we should complete GLS activity smart and effectively. I have already shared few key points like smart test suit selection, environment clean-up or confident before final post-layout netlist. GLS activity is really helpful to catch and resolve ECO at early stage before tap-out.
• Zero & Unit delay simulation : This step is not compulsory but generally very fruitful in the GLS execution. Before arriving final netlist. we can ensure environment clean-up.
• SDF Timing (MTM type) • Min(BC) • Max (WC) • Typical : After the SDF arrives, focus should be more on finding the real design/timing issues, so we need to make sure that the time does not get wasted in debugging the setup and testcase related issues at that time.
Useful setup details:
1. SDF Annotation: sdf file contains design delay(MIN:TYP:MAX) details. sdf_annotate cmd will annotate sdf delay details to design.
Syntax:
$sdf_annotate(["<sdffile>"], [<instance>], ["<config_file>"], ["<log_file>"], ["<mtm_spec>"], ["<scale_factor>"], ["<scale_type>"]);
Note: sdf cmd file is another way of applying annotation. Required cmd file and setup change, need to plug.
2. Timing check off for sync flop in design: Containing a list of all the first flops of the synchronizes in the design where a timing violation is guaranteed and thus taken cared of by the design such as placing synchronizers. Therefore we don't check timing violations in this path.
Syntax: PATH full_hierarchical_path -tcheck

FB1-DB1 entering to metastable state. it can corrupt related path/ logic. so, to prevent such
condition. its mandatory to apply timing check off for sync flops.
3. Initialization of non resettable flops: Due to undefined state of flop. Non resettable flops can cause "X" corruption. To prevent such unwanted corruption during gate level simulation. Its necessary to initialize non resettable flops.
deposit full_hierarchical_path.Q - 1'b0 -relative
Note: Don’t use simulator specific switch for initialization (nc_initialize). It can isolate/mask issues
other than non resettable flops. Recommendation to deposit output of non resettable flops.
• $setup (data_event, reference_event, limit[, notifier]) ;
Data cannot change within the setup time because flip-flops cannot detect the new value.
If data changes within a given time limit, $setup reports a timing violation
• $hold (reference_event, data_event, limit[,notifier]) ;
Data should remain stable for a given time after the active edge of the clock to allow
for propagation of data.
• $width (reference_event, limit, threshold [,notifier]) ;
When width of the active-edge is too small. In FF case it is very important to ensure
that the width of an active-edge is sufficient and FF will work properly.
• $period (reference_event, limit[,notifier]) ;
checks that a period of signal is sufficiently long.
• $recovery (reference_event, data_event, limit, [notifier]) ;
A timing violation occurs if the time interval between an edge-triggered reference event
and a data event exceeds the 'limit'
(time of data event) - (time of reference event) < limit
Please share your valuable inputs, if required more details on any point or any query.