Skip to content

Commit feae30b

Browse files
committed
mpl:
1) Improve naming; 2) Fix outline offset done in available regions for unconstrained pins. Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
1 parent 04ce233 commit feae30b

8 files changed

Lines changed: 41 additions & 28 deletions

File tree

src/mpl/src/MplObserver.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ class MplObserver
6262
const std::vector<odb::Rect>& blocked_regions_for_pins)
6363
{
6464
}
65-
virtual void setAvailableRegionsForPins(const BoundaryRegionList& regions) {}
65+
virtual void setAvailableRegionsForUnconstrainedPins(
66+
const BoundaryRegionList& regions)
67+
{
68+
}
6669

6770
virtual void setAreaPenalty(const PenaltyData& penalty) {}
6871
virtual void setBoundaryPenalty(const PenaltyData& penalty) {}

src/mpl/src/SimulatedAnnealingCore.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ SimulatedAnnealingCore<T>::SimulatedAnnealingCore(PhysicalHierarchy* tree,
6161
macros_ = macros;
6262

6363
setDieArea(tree->die_area);
64-
setAvailableRegionForPins(tree->available_regions_for_pins);
64+
setAvailableRegionsForUnconstrainedPins(
65+
tree->available_regions_for_unconstrained_pins);
6566

6667
io_cluster_to_constraint_ = tree->io_cluster_to_constraint;
6768
}
@@ -75,14 +76,14 @@ void SimulatedAnnealingCore<T>::setDieArea(const Rect& die_area)
7576
}
7677

7778
template <class T>
78-
void SimulatedAnnealingCore<T>::setAvailableRegionForPins(
79+
void SimulatedAnnealingCore<T>::setAvailableRegionsForUnconstrainedPins(
7980
const BoundaryRegionList& regions)
8081
{
81-
available_regions_for_pins_ = regions;
82+
available_regions_for_unconstrained_pins_ = regions;
8283

83-
for (BoundaryRegion& region : available_regions_for_pins_) {
84+
for (BoundaryRegion& region : available_regions_for_unconstrained_pins_) {
8485
region.line.addX(-block_->micronsToDbu(outline_.xMin()));
85-
region.line.addY(-block_->micronsToDbu(outline_.xMin()));
86+
region.line.addY(-block_->micronsToDbu(outline_.yMin()));
8687
}
8788
}
8889

@@ -318,15 +319,15 @@ void SimulatedAnnealingCore<T>::computeWLForClusterOfUnplacedIOPins(
318319
block_->micronsToDbu(macro.getPinY()));
319320
double smallest_distance;
320321
if (unplaced_ios.getCluster()->isClusterOfUnconstrainedIOPins()) {
321-
if (available_regions_for_pins_.empty()) {
322+
if (available_regions_for_unconstrained_pins_.empty()) {
322323
logger_->critical(
323324
utl::MPL,
324325
47,
325326
"There's no available region for the unconstrained pins!");
326327
}
327328

328329
smallest_distance = computeDistToNearestRegion(
329-
macro_location, available_regions_for_pins_, nullptr);
330+
macro_location, available_regions_for_unconstrained_pins_, nullptr);
330331
} else {
331332
Cluster* cluster = unplaced_ios.getCluster();
332333
const BoundaryRegion& constraint = io_cluster_to_constraint_.at(cluster);

src/mpl/src/SimulatedAnnealingCore.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ class SimulatedAnnealingCore
9898

9999
void fastSA();
100100

101-
void setAvailableRegionForPins(const BoundaryRegionList& regions);
101+
void setAvailableRegionsForUnconstrainedPins(
102+
const BoundaryRegionList& regions);
102103
void initSequencePair();
103104
void setDieArea(const Rect& die_area);
104105
void updateBestValidResult();
@@ -137,7 +138,7 @@ class SimulatedAnnealingCore
137138
Rect outline_;
138139
Rect die_area_; // Offset to the current outline.
139140

140-
BoundaryRegionList available_regions_for_pins_;
141+
BoundaryRegionList available_regions_for_unconstrained_pins_;
141142
ClusterToBoundaryRegionMap io_cluster_to_constraint_;
142143

143144
// Number of macros that will actually be part of the sequence pair

src/mpl/src/clusterEngine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ struct PhysicalHierarchy
9090
std::unique_ptr<Cluster> root;
9191
PhysicalHierarchyMaps maps;
9292

93-
BoundaryRegionList available_regions_for_pins;
93+
BoundaryRegionList available_regions_for_unconstrained_pins;
9494
ClusterToBoundaryRegionMap io_cluster_to_constraint;
9595

9696
float halo_width{0.0f};

src/mpl/src/graphics.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,8 @@ void Graphics::drawDistToRegion(gui::Painter& painter,
593593

594594
odb::Point to;
595595
if (io.getCluster()->isClusterOfUnconstrainedIOPins()) {
596-
computeDistToNearestRegion(from, available_regions_for_pins_, &to);
596+
computeDistToNearestRegion(
597+
from, available_regions_for_unconstrained_pins_, &to);
597598
} else {
598599
computeDistToNearestRegion(
599600
from, {io_cluster_to_constraint_.at(io.getCluster())}, &to);
@@ -719,9 +720,10 @@ void Graphics::setBlockedRegionsForPins(
719720
blocked_regions_for_pins_ = blocked_regions_for_pins;
720721
}
721722

722-
void Graphics::setAvailableRegionsForPins(const BoundaryRegionList& regions)
723+
void Graphics::setAvailableRegionsForUnconstrainedPins(
724+
const BoundaryRegionList& regions)
723725
{
724-
available_regions_for_pins_ = regions;
726+
available_regions_for_unconstrained_pins_ = regions;
725727
}
726728

727729
void Graphics::eraseDrawing()

src/mpl/src/graphics.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ class Graphics : public gui::Renderer, public MplObserver
6565
const ClusterToBoundaryRegionMap& io_cluster_to_constraint) override;
6666
void setBlockedRegionsForPins(
6767
const std::vector<odb::Rect>& blocked_regions_for_pins) override;
68-
void setAvailableRegionsForPins(const BoundaryRegionList& regions) override;
68+
void setAvailableRegionsForUnconstrainedPins(
69+
const BoundaryRegionList& regions) override;
6970

7071
void eraseDrawing() override;
7172

@@ -108,7 +109,7 @@ class Graphics : public gui::Renderer, public MplObserver
108109
int target_cluster_id_{-1};
109110
std::vector<std::vector<odb::Rect>> outlines_;
110111
std::vector<odb::Rect> blocked_regions_for_pins_;
111-
BoundaryRegionList available_regions_for_pins_;
112+
BoundaryRegionList available_regions_for_unconstrained_pins_;
112113
ClusterToBoundaryRegionMap io_cluster_to_constraint_;
113114

114115
// In Soft SA, we're shaping/placing the children of a certain parent,

src/mpl/src/hier_rtlmp.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ void HierRTLMP::runCoarseShaping()
317317

318318
calculateChildrenTilings(tree_->root.get());
319319

320-
searchForAvailableRegionsForPins();
320+
searchAvailableRegionsForUnconstrainedPins();
321321
createPinAccessBlockages();
322322
setPlacementBlockages();
323323
}
@@ -872,7 +872,7 @@ void HierRTLMP::setTightPackingTilings(Cluster* macro_array)
872872
macro_array->setTilings(tight_packing_tilings);
873873
}
874874

875-
void HierRTLMP::searchForAvailableRegionsForPins()
875+
void HierRTLMP::searchAvailableRegionsForUnconstrainedPins()
876876
{
877877
if (treeHasConstrainedIOs()) {
878878
return;
@@ -886,15 +886,17 @@ void HierRTLMP::searchForAvailableRegionsForPins()
886886
std::vector<odb::Rect> available_regions
887887
= computeAvailableRegions(boundary_to_blocked_regions);
888888

889-
tree_->available_regions_for_pins.reserve(available_regions.size());
889+
tree_->available_regions_for_unconstrained_pins.reserve(
890+
available_regions.size());
890891
for (const odb::Rect& region : available_regions) {
891-
tree_->available_regions_for_pins.emplace_back(
892+
tree_->available_regions_for_unconstrained_pins.emplace_back(
892893
rectToLine(block_, region, logger_), getBoundary(block_, region));
893894
}
894895

895896
if (graphics_) {
896897
graphics_->setBlockedRegionsForPins(blocked_regions_for_pins);
897-
graphics_->setAvailableRegionsForPins(tree_->available_regions_for_pins);
898+
graphics_->setAvailableRegionsForUnconstrainedPins(
899+
tree_->available_regions_for_unconstrained_pins);
898900
}
899901
}
900902

@@ -923,7 +925,7 @@ void HierRTLMP::createPinAccessBlockages()
923925

924926
computePinAccessDepthLimits();
925927

926-
if (!tree_->available_regions_for_pins.empty()) {
928+
if (!tree_->available_regions_for_unconstrained_pins.empty()) {
927929
createBlockagesForAvailableRegions();
928930
} else {
929931
createBlockagesForConstraintRegions();
@@ -953,14 +955,16 @@ bool HierRTLMP::treeHasConstrainedIOs() const
953955
void HierRTLMP::createBlockagesForAvailableRegions()
954956
{
955957
double io_span = 0.0;
956-
for (const BoundaryRegion& region : tree_->available_regions_for_pins) {
958+
for (const BoundaryRegion& region :
959+
tree_->available_regions_for_unconstrained_pins) {
957960
io_span += std::sqrt(
958961
odb::Point::squaredDistance(region.line.pt0(), region.line.pt1()));
959962
}
960963

961964
const float depth = computePinAccessBaseDepth(block_->dbuToMicrons(io_span));
962965

963-
for (const BoundaryRegion region : tree_->available_regions_for_pins) {
966+
for (const BoundaryRegion region :
967+
tree_->available_regions_for_unconstrained_pins) {
964968
createPinAccessBlockage(region, depth);
965969
}
966970
}
@@ -2754,9 +2758,10 @@ float HierRTLMP::calculateRealMacroWirelength(odb::dbInst* macro)
27542758
computeDistToNearestRegion(
27552759
macro_pin->getBBox().center(), {constraint}, &nearest_point);
27562760
} else {
2757-
computeDistToNearestRegion(macro_pin->getBBox().center(),
2758-
tree_->available_regions_for_pins,
2759-
&nearest_point);
2761+
computeDistToNearestRegion(
2762+
macro_pin->getBBox().center(),
2763+
tree_->available_regions_for_unconstrained_pins,
2764+
&nearest_point);
27602765
}
27612766
odb::Rect point_rect(nearest_point, nearest_point);
27622767
net_box.merge(point_rect);

src/mpl/src/hier_rtlmp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class HierRTLMP
148148
void calculateMacroTilings(Cluster* cluster);
149149
IntervalList computeWidthIntervals(const TilingList& tilings);
150150
void setTightPackingTilings(Cluster* macro_array);
151-
void searchForAvailableRegionsForPins();
151+
void searchAvailableRegionsForUnconstrainedPins();
152152
BoundaryToRegionsMap getBoundaryToBlockedRegionsMap(
153153
const std::vector<odb::Rect>& blocked_regions_for_pins) const;
154154
std::vector<odb::Rect> computeAvailableRegions(

0 commit comments

Comments
 (0)