diff options
Diffstat (limited to 'common/nextpnr.h')
-rw-r--r-- | common/nextpnr.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h index 8d6ab4cc..b6ee33fe 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -833,6 +833,7 @@ struct BaseCtx // Top-level ports std::unordered_map<IdString, PortInfo> ports; + std::unordered_map<IdString, CellInfo *> port_cells; // Floorplanning regions std::unordered_map<IdString, std::unique_ptr<Region>> region; @@ -1099,6 +1100,7 @@ template <typename R> struct ArchAPI : BaseCtx virtual WireId getBelPinWire(BelId bel, IdString pin) const = 0; virtual PortType getBelPinType(BelId bel, IdString pin) const = 0; virtual typename R::BelPinsRangeT getBelPins(BelId bel) const = 0; + virtual typename R::CellBelPinRangeT getBelPinsForCellPin(CellInfo *cell_info, IdString pin) const = 0; // Wire methods virtual typename R::AllWiresRangeT getWires() const = 0; virtual WireId getWireByName(IdStringList name) const = 0; @@ -1182,6 +1184,8 @@ template <typename R> struct ArchAPI : BaseCtx // This contains the relevant range types for the default implementations of Arch functions struct BaseArchRanges { + // Bels + using CellBelPinRangeT = std::array<IdString, 1>; // Attributes using BelAttrsRangeT = std::vector<std::pair<IdString, std::string>>; using WireAttrsRangeT = std::vector<std::pair<IdString, std::string>>; @@ -1249,6 +1253,11 @@ template <typename R> struct BaseArch : ArchAPI<R> return empty_if_possible<typename R::BelAttrsRangeT>(); } + virtual typename R::CellBelPinRangeT getBelPinsForCellPin(CellInfo *cell_info, IdString pin) const override + { + return return_if_match<std::array<IdString, 1>, typename R::CellBelPinRangeT>({pin}); + } + // Wire methods virtual IdString getWireType(WireId wire) const override { return IdString(); } virtual typename R::WireAttrsRangeT getWireAttrs(WireId) const override @@ -1494,7 +1503,9 @@ struct Context : Arch, DeterministicRNG // -------------------------------------------------------------- WireId getNetinfoSourceWire(const NetInfo *net_info) const; - WireId getNetinfoSinkWire(const NetInfo *net_info, const PortRef &sink) const; + SSOArray<WireId, 2> getNetinfoSinkWires(const NetInfo *net_info, const PortRef &sink) const; + size_t getNetinfoSinkWireCount(const NetInfo *net_info, const PortRef &sink) const; + WireId getNetinfoSinkWire(const NetInfo *net_info, const PortRef &sink, size_t phys_idx) const; delay_t getNetinfoRouteDelay(const NetInfo *net_info, const PortRef &sink) const; // provided by router1.cc |