1616#include " timing_info.h"
1717
1818// /@brief Allocates space for the timing_place_crit_ data structure.
19- PlacerCriticalities::PlacerCriticalities (const ClusteredNetlist& clb_nlist, const ClusteredPinAtomPinsLookup& netlist_pin_lookup)
19+ PlacerCriticalities::PlacerCriticalities (const ClusteredNetlist& clb_nlist,
20+ const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
21+ std::shared_ptr<const SetupTimingInfo> timing_info)
2022 : clb_nlist_(clb_nlist)
2123 , pin_lookup_(netlist_pin_lookup)
24+ , timing_info_(std::move(timing_info))
2225 , timing_place_crit_(make_net_pins_matrix(clb_nlist_, std::numeric_limits<float >::quiet_NaN())) {
2326}
2427
@@ -32,8 +35,7 @@ PlacerCriticalities::PlacerCriticalities(const ClusteredNetlist& clb_nlist, cons
3235 *
3336 * If the criticality exponent has changed, we also need to update from scratch.
3437 */
35- void PlacerCriticalities::update_criticalities (const SetupTimingInfo* timing_info,
36- const PlaceCritParams& crit_params,
38+ void PlacerCriticalities::update_criticalities (const PlaceCritParams& crit_params,
3739 PlacerState& placer_state) {
3840 /* If update is not enabled, exit the routine. */
3941 if (!update_enabled) {
@@ -44,7 +46,7 @@ void PlacerCriticalities::update_criticalities(const SetupTimingInfo* timing_inf
4446
4547 /* Determine what pins need updating */
4648 if (!recompute_required && crit_params.crit_exponent == last_crit_exponent_) {
47- incr_update_criticalities (timing_info );
49+ incr_update_criticalities ();
4850 } else {
4951 recompute_criticalities ();
5052
@@ -63,7 +65,7 @@ void PlacerCriticalities::update_criticalities(const SetupTimingInfo* timing_inf
6365 ClusterNetId clb_net = clb_nlist_.pin_net (clb_pin);
6466 int pin_index_in_net = clb_nlist_.pin_net_index (clb_pin);
6567 // Routing for placement is not flat (at least for the time being)
66- float clb_pin_crit = calculate_clb_net_pin_criticality (*timing_info , pin_lookup_, ParentPinId (size_t (clb_pin)), /* is_flat=*/ false );
68+ float clb_pin_crit = calculate_clb_net_pin_criticality (*timing_info_ , pin_lookup_, ParentPinId (size_t (clb_pin)), /* is_flat=*/ false );
6769
6870 float new_crit = pow (clb_pin_crit, crit_params.crit_exponent );
6971 /*
@@ -114,10 +116,10 @@ void PlacerCriticalities::set_recompute_required() {
114116 * atom pin criticalities.
115117 */
116118
117- void PlacerCriticalities::incr_update_criticalities (const SetupTimingInfo* timing_info ) {
119+ void PlacerCriticalities::incr_update_criticalities () {
118120 cluster_pins_with_modified_criticality_.clear ();
119121
120- for (AtomPinId atom_pin : timing_info ->pins_with_modified_setup_criticality ()) {
122+ for (AtomPinId atom_pin : timing_info_ ->pins_with_modified_setup_criticality ()) {
121123 ClusterPinId clb_pin = pin_lookup_.connected_clb_pin (atom_pin);
122124
123125 // Some atom pins correspond to connections which are completely
@@ -164,9 +166,12 @@ PlacerCriticalities::pin_range PlacerCriticalities::pins_with_modified_criticali
164166/* *************************************/
165167
166168// /@brief Allocates space for the timing_place_setup_slacks_ data structure.
167- PlacerSetupSlacks::PlacerSetupSlacks (const ClusteredNetlist& clb_nlist, const ClusteredPinAtomPinsLookup& netlist_pin_lookup)
169+ PlacerSetupSlacks::PlacerSetupSlacks (const ClusteredNetlist& clb_nlist,
170+ const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
171+ std::shared_ptr<const SetupTimingInfo> timing_info)
168172 : clb_nlist_(clb_nlist)
169173 , pin_lookup_(netlist_pin_lookup)
174+ , timing_info_(std::move(timing_info))
170175 , timing_place_setup_slacks_(make_net_pins_matrix(clb_nlist_, std::numeric_limits<float >::quiet_NaN())) {
171176}
172177
@@ -180,7 +185,7 @@ PlacerSetupSlacks::PlacerSetupSlacks(const ClusteredNetlist& clb_nlist, const Cl
180185 * In this case, `recompute_required` would be true, and we update all setup slacks
181186 * from scratch.
182187 */
183- void PlacerSetupSlacks::update_setup_slacks (const SetupTimingInfo* timing_info ) {
188+ void PlacerSetupSlacks::update_setup_slacks () {
184189 /* If update is not enabled, exit the routine. */
185190 if (!update_enabled) {
186191 /* re-computation is required on the next iteration */
@@ -190,7 +195,7 @@ void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info)
190195
191196 /* Determine what pins need updating */
192197 if (!recompute_required) {
193- incr_update_setup_slacks (timing_info );
198+ incr_update_setup_slacks ();
194199 } else {
195200 recompute_setup_slacks ();
196201 }
@@ -200,7 +205,7 @@ void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info)
200205 ClusterNetId clb_net = clb_nlist_.pin_net (clb_pin);
201206 int pin_index_in_net = clb_nlist_.pin_net_index (clb_pin);
202207
203- float clb_pin_setup_slack = calculate_clb_net_pin_setup_slack (*timing_info , pin_lookup_, clb_pin);
208+ float clb_pin_setup_slack = calculate_clb_net_pin_setup_slack (*timing_info_ , pin_lookup_, clb_pin);
204209
205210 timing_place_setup_slacks_[clb_net][pin_index_in_net] = clb_pin_setup_slack;
206211 }
@@ -217,10 +222,10 @@ void PlacerSetupSlacks::update_setup_slacks(const SetupTimingInfo* timing_info)
217222 * Note we use the set of pins reported by the *timing_info* as having modified
218223 * setup slacks, rather than those marked as modified by the timing analyzer.
219224 */
220- void PlacerSetupSlacks::incr_update_setup_slacks (const SetupTimingInfo* timing_info ) {
225+ void PlacerSetupSlacks::incr_update_setup_slacks () {
221226 cluster_pins_with_modified_setup_slack_.clear ();
222227
223- for (AtomPinId atom_pin : timing_info ->pins_with_modified_setup_slack ()) {
228+ for (AtomPinId atom_pin : timing_info_ ->pins_with_modified_setup_slack ()) {
224229 ClusterPinId clb_pin = pin_lookup_.connected_clb_pin (atom_pin);
225230
226231 // Some atom pins correspond to connections which are completely
0 commit comments