@@ -92,6 +92,26 @@ void initialize_timing_info(float crit_exponent,
92
92
* All the pins with changed connection delays have already been added into
93
93
* the ClusteredPinTimingInvalidator to allow incremental STA update. These
94
94
* changed connection delays are a direct result of moved blocks in try_swap().
95
+ *
96
+ * @param crit_exponent Used to calculate `sharpened` criticalities.
97
+ *
98
+ * @param delay_model Used to calculate the delay between two locations.
99
+ *
100
+ * @param criticalities Mapping interface between atom pin criticalities
101
+ * and clb pin criticalities.
102
+ *
103
+ * @param setup_slacks Mapping interface between atom pin raw setup slacks
104
+ * and clb pin raw setup slacks.
105
+ *
106
+ * @param pin_timing_invalidator Stores all the pins that have their delay value changed
107
+ * and needs to be updated in the timing graph.
108
+ *
109
+ * @param timing_info Stores the timing graph and other important timing info.
110
+ *
111
+ * @param timing_update_mode Determines what should be updated when this routine is
112
+ * called, and using incremental techniques is appropriate.
113
+ *
114
+ * @param costs Stores the updated timing cost for the whole placement.
95
115
*/
96
116
void update_setup_slacks_and_criticalities (float crit_exponent,
97
117
const PlaceDelayModel* delay_model,
@@ -284,9 +304,19 @@ static double sum_td_costs() {
284
304
* @brief Commit all the setup slack values from the PlacerSetupSlacks
285
305
* class to a vtr matrix.
286
306
*
287
- * This incremental routine will be correct if and only if it is called
288
- * immediately after each time update_setup_slacks_and_criticalities
289
- * updates the setup slacks (i.e. update_setup_slacks = true).
307
+ * This routine is incremental since it relies on the pins_with_modified_setup_slack()
308
+ * to detect which pins need to be updated and which pins do not.
309
+ *
310
+ * Therefore, it is assumed that this routine is always called immediately after
311
+ * each time update_setup_slacks_and_criticalities() updates the setup slacks
312
+ * (i.e. t_placer_timing_update_mode::update_setup_slacks = true). Otherwise,
313
+ * pins_with_modified_setup_slack() cannot accurately account for all the pins
314
+ * that have their setup slacks changed, making this routine incorrect.
315
+ *
316
+ * Currently, the only exception to the rule above is when setup slack analysis is used
317
+ * during the placement quench. The new setup slacks might be either accepted or
318
+ * rejected, so for efficiency reasons, this routine is not called if the slacks are
319
+ * rejected in the end. For more detailed info, see the try_swap() routine.
290
320
*/
291
321
void commit_setup_slacks (const PlacerSetupSlacks* setup_slacks) {
292
322
const auto & clb_nlist = g_vpr_ctx.clustering ().clb_nlist ;
@@ -305,6 +335,12 @@ void commit_setup_slacks(const PlacerSetupSlacks* setup_slacks) {
305
335
* @brief Verify that the values in the vtr matrix matches the PlacerSetupSlacks class.
306
336
*
307
337
* Return true if all values are identical. Otherwise, return false.
338
+ * Used to check if the timing update has been succesfully revereted if a proposed move
339
+ * is rejected when applying setup slack analysis during the placement quench.
340
+ * If successful, the setup slacks in the timing analyzer should be the same as
341
+ * the setup slacks in connection_setup_slack matrix without running commit_setup_slacks().
342
+ *
343
+ * For more detailed info, see the try_swap() routine.
308
344
*/
309
345
bool verify_connection_setup_slacks (const PlacerSetupSlacks* setup_slacks) {
310
346
const auto & clb_nlist = g_vpr_ctx.clustering ().clb_nlist ;
0 commit comments