Skip to content

Commit 4087579

Browse files
committed
rsz: add -net and -subdivide_step to set_debug
Signed-off-by: Matt Liberty <[email protected]>
1 parent 6ed7f47 commit 4087579

File tree

8 files changed

+88
-11
lines changed

8 files changed

+88
-11
lines changed

src/rsz/src/Graphics.cc

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,45 @@ Graphics::Graphics()
4242
gui::Gui::get()->registerRenderer(this);
4343
}
4444

45+
void Graphics::setNet(odb::dbNet* net)
46+
{
47+
net_ = net;
48+
if (!net) {
49+
subdivide_ignore_ = false;
50+
}
51+
}
52+
53+
void Graphics::stopOnSubdivideStep(const bool stop)
54+
{
55+
stop_on_subdivide_step_ = stop;
56+
}
57+
58+
void Graphics::subdivideStart(odb::dbNet* net)
59+
{
60+
lines_.clear();
61+
if (net_) {
62+
subdivide_ignore_ = (net != net_);
63+
}
64+
}
65+
4566
void Graphics::subdivide(const odb::Line& line)
4667
{
68+
if (subdivide_ignore_) {
69+
return;
70+
}
4771
lines_.emplace_back(line);
48-
gui::Gui::get()->redraw();
49-
gui::Gui::get()->pause();
72+
if (stop_on_subdivide_step_) {
73+
gui::Gui::get()->redraw();
74+
gui::Gui::get()->pause();
75+
}
76+
}
77+
78+
void Graphics::subdivideDone()
79+
{
80+
if (!subdivide_ignore_) {
81+
gui::Gui::get()->redraw();
82+
gui::Gui::get()->pause();
83+
}
5084
}
5185

5286
void Graphics::drawObjects(gui::Painter& painter)

src/rsz/src/Graphics.hh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,22 @@ class Graphics : public gui::Renderer, public ResizerObserver
4646
Graphics();
4747

4848
// ResizerObserver
49+
void setNet(odb::dbNet* net) override;
50+
void stopOnSubdivideStep(bool stop) override;
51+
void subdivideStart(odb::dbNet* net) override;
4952
void subdivide(const odb::Line& line) override;
53+
void subdivideDone() override;
5054

5155
// Renderer
5256
void drawObjects(gui::Painter& painter) override;
5357

5458
private:
59+
odb::dbNet* net_{nullptr};
5560
std::vector<odb::Line> lines_;
61+
// Ingore this net if true
62+
bool subdivide_ignore_{false};
63+
// stop at each step?
64+
bool stop_on_subdivide_step_{false};
5665
};
5766

5867
} // namespace rsz

src/rsz/src/RepairDesign.cc

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ void RepairDesign::repairNet(Net* net,
671671
repaired_net = true;
672672

673673
debugPrint(logger_, RSZ, "repair_net", 3, "fanout violation");
674-
LoadRegion region = findLoadRegions(drvr_pin, max_fanout);
674+
LoadRegion region = findLoadRegions(net, drvr_pin, max_fanout);
675675
corner_ = corner;
676676
makeRegionRepeaters(region,
677677
max_fanout,
@@ -1481,12 +1481,21 @@ LoadRegion::LoadRegion(PinSeq& pins, Rect& bbox) : pins_(pins), bbox_(bbox)
14811481
{
14821482
}
14831483

1484-
LoadRegion RepairDesign::findLoadRegions(const Pin* drvr_pin, int max_fanout)
1484+
LoadRegion RepairDesign::findLoadRegions(const Net* net,
1485+
const Pin* drvr_pin,
1486+
int max_fanout)
14851487
{
14861488
PinSeq loads = findLoads(drvr_pin);
14871489
Rect bbox = findBbox(loads);
14881490
LoadRegion region(loads, bbox);
1491+
if (graphics_) {
1492+
odb::dbNet* db_net = db_network_->staToDb(net);
1493+
graphics_->subdivideStart(db_net);
1494+
}
14891495
subdivideRegion(region, max_fanout);
1496+
if (graphics_) {
1497+
graphics_->subdivideDone();
1498+
}
14901499
return region;
14911500
}
14921501

@@ -2242,7 +2251,7 @@ void RepairDesign::reportViolationCounters(bool invalidate_driver_vertices,
22422251

22432252
void RepairDesign::setDebugGraphics(std::shared_ptr<ResizerObserver> graphics)
22442253
{
2245-
graphics_ = graphics;
2254+
graphics_ = std::move(graphics);
22462255
}
22472256

22482257
} // namespace rsz

src/rsz/src/RepairDesign.hh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ class RepairDesign : dbStaState
199199
double load_cap,
200200
double slew,
201201
const DcalcAnalysisPt* dcalc_ap);
202-
LoadRegion findLoadRegions(const Pin* drvr_pin, int max_fanout);
202+
LoadRegion findLoadRegions(const Net* net,
203+
const Pin* drvr_pin,
204+
int max_fanout);
203205
void subdivideRegion(LoadRegion& region, int max_fanout);
204206
void makeRegionRepeaters(LoadRegion& region,
205207
int max_fanout,

src/rsz/src/Resizer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4609,8 +4609,8 @@ void Resizer::copyDontUseFromLiberty()
46094609

46104610
void Resizer::setDebugGraphics(std::shared_ptr<ResizerObserver> graphics)
46114611
{
4612-
graphics_ = graphics;
46134612
repair_design_->setDebugGraphics(graphics);
4613+
graphics_ = std::move(graphics);
46144614
}
46154615

46164616
} // namespace rsz

src/rsz/src/Resizer.i

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,10 +778,20 @@ void report_equiv_cells_cmd(LibertyCell* cell, bool match_cell_footprint)
778778
resizer->reportEquivalentCells(cell, match_cell_footprint);
779779
}
780780

781-
void set_debug_cmd()
781+
void set_debug_cmd(const char* net_name,
782+
const bool subdivide_step)
782783
{
783784
Resizer* resizer = getResizer();
785+
786+
odb::dbNet* net = nullptr;
787+
if (net_name) {
788+
auto block = ord::OpenRoad::openRoad()->getDb()->getChip()->getBlock();
789+
net = block->findNet(net_name);
790+
}
791+
784792
auto graphics = std::make_shared<Graphics>();
793+
graphics->setNet(net);
794+
graphics->stopOnSubdivideStep(subdivide_step);
785795
resizer->setDebugGraphics(std::move(graphics));
786796
}
787797

src/rsz/src/Resizer.tcl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -982,10 +982,17 @@ proc repair_setup_pin { end_pin } {
982982

983983
proc set_debug { args } {
984984
sta::parse_key_args "set_debug" args \
985-
keys { } \
986-
flags { } ;# checker off
985+
keys { -net } \
986+
flags { -subdivide_step } ;# checker off
987987

988-
rsz::set_debug_cmd
988+
set net ""
989+
if { [info exists keys(-net)] } {
990+
set net $keys(-net)
991+
}
992+
993+
set subdivide_step [info exists flags(-subdivide_step)]
994+
995+
rsz::set_debug_cmd $net $subdivide_step
989996
}
990997

991998
proc report_swappable_pins { } {

src/rsz/src/ResizerObserver.hh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
#pragma once
3737

38+
#include "odb/db.h"
3839
#include "odb/geom.h"
3940

4041
namespace rsz {
@@ -44,7 +45,12 @@ class ResizerObserver
4445
public:
4546
virtual ~ResizerObserver() = default;
4647

48+
virtual void setNet(odb::dbNet* net) {}
49+
virtual void stopOnSubdivideStep(bool stop) {}
50+
51+
virtual void subdivideStart(odb::dbNet* net) {}
4752
virtual void subdivide(const odb::Line& line) {}
53+
virtual void subdivideDone() {}
4854
};
4955

5056
} // namespace rsz

0 commit comments

Comments
 (0)