@@ -436,33 +436,28 @@ bool SetupSlackCrit::verify_pin_criticalities(const tatum::TimingGraph& timing_g
436
436
437
437
bool SetupSlackCrit::verify_max_req_worst_slack (const tatum::TimingGraph& timing_graph, const tatum::SetupTimingAnalyzer& analyzer) {
438
438
auto calc_max_req = max_req_;
439
- auto calc_max_req_node = max_req_node_;
440
-
441
439
auto calc_worst_slack = worst_slack_;
442
- auto calc_worst_slack_node = worst_slack_node_;
443
440
444
441
recompute_max_req_and_worst_slack (timing_graph, analyzer);
445
442
443
+ // NOTE: We only check if the required time and the worst slack matches, we
444
+ // do not check if the max required nodes or the worst slack nodes
445
+ // match. This is because the incremental timing analysis and the non-
446
+ // incremental timing analysis do not break ties deterministically,
447
+ // so they may get different nodes; but they should always get the same
448
+ // required time and worst slack. If the incremental timing analysis
449
+ // gets different nodes, this will not change the results of the
450
+ // timing analysis.
446
451
if (calc_max_req != max_req_) {
447
452
VPR_ERROR (VPR_ERROR_TIMING,
448
453
" Calculated max required times does not match value calculated from scratch" );
449
454
return false ;
450
455
}
451
- if (calc_max_req_node != max_req_node_) {
452
- VPR_ERROR (VPR_ERROR_TIMING,
453
- " Calculated max required nodes does not match value calculated from scratch" );
454
- return false ;
455
- }
456
456
if (calc_worst_slack != worst_slack_) {
457
457
VPR_ERROR (VPR_ERROR_TIMING,
458
458
" Calculated worst slack does not match value calculated from scratch" );
459
459
return false ;
460
460
}
461
- if (calc_worst_slack_node != worst_slack_node_) {
462
- VPR_ERROR (VPR_ERROR_TIMING,
463
- " Calculated worst slack nodes does not match value calculated from scratch" );
464
- return false ;
465
- }
466
461
467
462
return true ;
468
463
}
0 commit comments