diff options
author | David Shah <dave@ds0.me> | 2020-02-03 13:48:51 +0000 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2020-02-03 13:48:51 +0000 |
commit | a1c902dadc3165fe9abab7c96a75b5f4808836cd (patch) | |
tree | a6aa1b900e2e8cefe89871b370ead2b8c98d84d7 /generic | |
parent | 2248e07b662bb99bbe053e485c5c4d8d10cf234b (diff) | |
download | nextpnr-a1c902dadc3165fe9abab7c96a75b5f4808836cd.tar.gz nextpnr-a1c902dadc3165fe9abab7c96a75b5f4808836cd.tar.bz2 nextpnr-a1c902dadc3165fe9abab7c96a75b5f4808836cd.zip |
generic: Implement getRouteBoundingBox
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'generic')
-rw-r--r-- | generic/arch.cc | 24 | ||||
-rw-r--r-- | generic/arch.h | 2 |
2 files changed, 26 insertions, 0 deletions
diff --git a/generic/arch.cc b/generic/arch.cc index 5d60d9c6..6979673a 100644 --- a/generic/arch.cc +++ b/generic/arch.cc @@ -515,6 +515,30 @@ delay_t Arch::predictDelay(const NetInfo *net_info, const PortRef &sink) const bool Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const { return false; } +ArcBounds Arch::getRouteBoundingBox(WireId src, WireId dst) const +{ + ArcBounds bb; + + int src_x = wires.at(src).x; + int src_y = wires.at(src).y; + int dst_x = wires.at(dst).x; + int dst_y = wires.at(dst).y; + + bb.x0 = src_x; + bb.y0 = src_y; + bb.x1 = src_x; + bb.y1 = src_y; + + auto extend = [&](int x, int y) { + bb.x0 = std::min(bb.x0, x); + bb.x1 = std::max(bb.x1, x); + bb.y0 = std::min(bb.y0, y); + bb.y1 = std::max(bb.y1, y); + }; + extend(dst_x, dst_y); + return bb; +} + // --------------------------------------------------------------- bool Arch::place() diff --git a/generic/arch.h b/generic/arch.h index 21e78e9a..cbfb943d 100644 --- a/generic/arch.h +++ b/generic/arch.h @@ -267,6 +267,8 @@ struct Arch : BaseCtx uint32_t getDelayChecksum(delay_t v) const { return 0; } bool getBudgetOverride(const NetInfo *net_info, const PortRef &sink, delay_t &budget) const; + ArcBounds getRouteBoundingBox(WireId src, WireId dst) const; + bool pack(); bool place(); bool route(); |