@@ -124,10 +124,19 @@ SimPLGlobalPlacer::SimPLGlobalPlacer(e_ap_analytical_solver analytical_solver_ty
124
124
*/
125
125
static void print_placement_stats (const PartialPlacement& p_placement,
126
126
const APNetlist& ap_netlist,
127
- FlatPlacementDensityManager& density_manager) {
127
+ FlatPlacementDensityManager& density_manager,
128
+ const PreClusterTimingManager& pre_cluster_timing_manager) {
128
129
// Print the placement HPWL
129
130
VTR_LOG (" \t Placement HPWL: %f\n " , p_placement.get_hpwl (ap_netlist));
130
131
132
+ // Print the timing information.
133
+ if (pre_cluster_timing_manager.is_valid ()) {
134
+ float cpd_ns = pre_cluster_timing_manager.get_timing_info ().least_slack_critical_path ().delay () * 1e9 ;
135
+ float stns_ns = pre_cluster_timing_manager.get_timing_info ().setup_total_negative_slack () * 1e9 ;
136
+ VTR_LOG (" \t Placement estimated CPD: %f ns\n " , cpd_ns);
137
+ VTR_LOG (" \t Placement estimated sTNS: %f ns\n " , stns_ns);
138
+ }
139
+
131
140
// Print density information. Need to reset the density manager to ensure
132
141
// the data is valid.
133
142
density_manager.import_placement_into_bins (p_placement);
@@ -424,7 +433,8 @@ PartialPlacement SimPLGlobalPlacer::place() {
424
433
VTR_LOG (" Placement after Global Placement:\n " );
425
434
print_placement_stats (best_p_placement,
426
435
ap_netlist_,
427
- *density_manager_);
436
+ *density_manager_,
437
+ pre_cluster_timing_manager_);
428
438
429
439
// Return the placement from the final iteration.
430
440
return best_p_placement;
0 commit comments