From cfa9a9daec648384a7337a504759ec81ba9d5870 Mon Sep 17 00:00:00 2001 From: "D. Shah" Date: Wed, 3 Feb 2021 12:10:53 +0000 Subject: nextpnr: Use templates to specify range types Signed-off-by: D. Shah --- ecp5/arch.h | 64 ++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 18 deletions(-) (limited to 'ecp5') diff --git a/ecp5/arch.h b/ecp5/arch.h index 2cb6d526..1fb05620 100644 --- a/ecp5/arch.h +++ b/ecp5/arch.h @@ -435,7 +435,35 @@ template <> struct hash } // namespace std NEXTPNR_NAMESPACE_BEGIN -struct Arch : BaseCtx +struct ArchRanges +{ + // Bels + using AllBelsRange = BelRange; + using TileBelsRange = BelRange; + using BelAttrsRange = std::vector>; + using BelPinsRange = std::vector; + // Wires + using AllWiresRange = WireRange; + using DownhillPipRange = PipRange; + using UphillPipRange = PipRange; + using WireBelPinRange = BelPinRange; + using WireAttrsRange = std::vector>; + // Pips + using AllPipsRange = AllPipRange; + using PipAttrsRange = std::vector>; + // Groups + using AllGroupsRange = std::vector; + using GroupBelsRange = std::vector; + using GroupWiresRange = std::vector; + using GroupPipsRange = std::vector; + using GroupGroupsRange = std::vector; + // Placement validity + using CellTypeRange = const std::vector &; + using BelBucketRange = std::vector; + using BucketBelRange = std::vector; +}; + +struct Arch : ArchBase { const ChipInfoPOD *chip_info; const PackageInfoPOD *package_info; @@ -532,7 +560,7 @@ struct Arch : BaseCtx } BelId getBelByLocation(Loc loc) const override; - BelRange getBelsByTile(int x, int y) const; + BelRange getBelsByTile(int x, int y) const override; bool getBelGlobalBuf(BelId bel) const override { return getBelType(bel) == id_DCCA; } @@ -554,7 +582,7 @@ struct Arch : BaseCtx return bel_to_cell[get_bel_flat_index(bel)]; } - BelRange getBels() const + BelRange getBels() const override { BelRange range; range.b.cursor_tile = 0; @@ -575,7 +603,7 @@ struct Arch : BaseCtx return id; } - std::vector> getBelAttrs(BelId) const + std::vector> getBelAttrs(BelId) const override { std::vector> ret; return ret; @@ -583,7 +611,7 @@ struct Arch : BaseCtx WireId getBelPinWire(BelId bel, IdString pin) const override; - BelPinRange getWireBelPins(WireId wire) const + BelPinRange getWireBelPins(WireId wire) const override { BelPinRange range; NPNR_ASSERT(wire != WireId()); @@ -616,7 +644,7 @@ struct Arch : BaseCtx return id; } - std::vector> getWireAttrs(WireId) const; + std::vector> getWireAttrs(WireId) const override; uint32_t getWireChecksum(WireId wire) const override { return wire.index; } @@ -673,7 +701,7 @@ struct Arch : BaseCtx return delay; } - WireRange getWires() const + WireRange getWires() const override { WireRange range; range.b.cursor_tile = 0; @@ -771,7 +799,7 @@ struct Arch : BaseCtx return pip_to_net.at(pip); } - AllPipRange getPips() const + AllPipRange getPips() const override { AllPipRange range; range.b.cursor_tile = 0; @@ -819,7 +847,7 @@ struct Arch : BaseCtx return delay; } - PipRange getPipsDownhill(WireId wire) const + PipRange getPipsDownhill(WireId wire) const override { PipRange range; NPNR_ASSERT(wire != WireId()); @@ -830,7 +858,7 @@ struct Arch : BaseCtx return range; } - PipRange getPipsUphill(WireId wire) const + PipRange getPipsUphill(WireId wire) const override { PipRange range; NPNR_ASSERT(wire != WireId()); @@ -880,11 +908,11 @@ struct Arch : BaseCtx GroupId getGroupByName(IdStringList name) const override; IdStringList getGroupName(GroupId group) const override; - std::vector getGroups() const; - std::vector getGroupBels(GroupId group) const; - std::vector getGroupWires(GroupId group) const; - std::vector getGroupPips(GroupId group) const; - std::vector getGroupGroups(GroupId group) const; + std::vector getGroups() const override; + std::vector getGroupBels(GroupId group) const override; + std::vector getGroupWires(GroupId group) const override; + std::vector getGroupPips(GroupId group) const override; + std::vector getGroupGroups(GroupId group) const override; // ------------------------------------------------- @@ -938,9 +966,9 @@ struct Arch : BaseCtx // ------------------------------------------------- // Placement validity checks - const std::vector &getCellTypes() const { return cell_types; } + const std::vector &getCellTypes() const override { return cell_types; } - std::vector getBelBuckets() const { return buckets; } + std::vector getBelBuckets() const override { return buckets; } IdString getBelBucketName(BelBucketId bucket) const override { return bucket.name; } @@ -965,7 +993,7 @@ struct Arch : BaseCtx return bucket; } - std::vector getBelsInBucket(BelBucketId bucket) const + std::vector getBelsInBucket(BelBucketId bucket) const override { std::vector bels; for (BelId bel : getBels()) { -- cgit v1.2.3