diff options
author | gatecat <gatecat@ds0.me> | 2021-02-09 11:30:23 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-09 11:30:23 +0000 |
commit | f67d474edc3f95e830ec23156a90327ae446ce6f (patch) | |
tree | 7df5d4022a40969adcbbbc8fc7fdd841e09db2cc | |
parent | 1febb80a1e519719762aa471d34c3f9acbbe1751 (diff) | |
parent | 11db5a2f1df589ea8c5ba3c0b1cbbfaac77e3580 (diff) | |
download | nextpnr-f67d474edc3f95e830ec23156a90327ae446ce6f.tar.gz nextpnr-f67d474edc3f95e830ec23156a90327ae446ce6f.tar.bz2 nextpnr-f67d474edc3f95e830ec23156a90327ae446ce6f.zip |
Merge pull request #573 from YosysHQ/gatecat/basearchranges
Add BaseArchRanges for default ArchRanges types
-rw-r--r-- | common/nextpnr.h | 21 | ||||
-rw-r--r-- | docs/archapi.md | 2 | ||||
-rw-r--r-- | ecp5/arch.h | 17 | ||||
-rw-r--r-- | ice40/arch.h | 17 | ||||
-rw-r--r-- | nexus/arch.h | 17 |
5 files changed, 25 insertions, 49 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h index 2ecbaf0e..12462698 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -1176,6 +1176,27 @@ template <typename R> struct ArchAPI : BaseCtx virtual void assignArchInfo() = 0; }; +// This contains the relevant range types for the default implementations of Arch functions +struct BaseArchRanges +{ + // Attributes + using BelAttrsRangeT = std::vector<std::pair<IdString, std::string>>; + using WireAttrsRangeT = std::vector<std::pair<IdString, std::string>>; + using PipAttrsRangeT = std::vector<std::pair<IdString, std::string>>; + // Groups + using AllGroupsRangeT = std::vector<GroupId>; + using GroupBelsRangeT = std::vector<BelId>; + using GroupWiresRangeT = std::vector<WireId>; + using GroupPipsRangeT = std::vector<PipId>; + using GroupGroupsRangeT = std::vector<GroupId>; + // Decals + using DecalGfxRangeT = std::vector<GraphicElement>; + // Placement validity + using CellTypeRangeT = const std::vector<IdString> &; + using BelBucketRangeT = const std::vector<BelBucketId> &; + using BucketBelRangeT = const std::vector<BelId> &; +}; + template <typename R> struct BaseArch : ArchAPI<R> { // -------------------------------------------------------------- diff --git a/docs/archapi.md b/docs/archapi.md index 9e6b3a46..f6f184e0 100644 --- a/docs/archapi.md +++ b/docs/archapi.md @@ -29,7 +29,7 @@ The contents of `ArchRanges` is as follows: |`BelBucketRangeT` | `BelBucketRange` | |`BucketBelRangeT` | `BelId` | -The functions that return a particular type are described below +The functions that return a particular type are described below. Where a default function implementation is provided, `BaseArchRanges` (which `ArchRanges` can inherit from) will set the range type appropriately. archdefs.h ========== diff --git a/ecp5/arch.h b/ecp5/arch.h index 49582a6e..de8b225e 100644 --- a/ecp5/arch.h +++ b/ecp5/arch.h @@ -435,35 +435,20 @@ template <> struct hash<NEXTPNR_NAMESPACE_PREFIX DelayKey> } // namespace std NEXTPNR_NAMESPACE_BEGIN -struct ArchRanges +struct ArchRanges : BaseArchRanges { using ArchArgsT = ArchArgs; // Bels using AllBelsRangeT = BelRange; using TileBelsRangeT = BelRange; - using BelAttrsRangeT = std::vector<std::pair<IdString, std::string>>; using BelPinsRangeT = std::vector<IdString>; // Wires using AllWiresRangeT = WireRange; using DownhillPipRangeT = PipRange; using UphillPipRangeT = PipRange; using WireBelPinRangeT = BelPinRange; - using WireAttrsRangeT = std::vector<std::pair<IdString, std::string>>; // Pips using AllPipsRangeT = AllPipRange; - using PipAttrsRangeT = std::vector<std::pair<IdString, std::string>>; - // Groups - using AllGroupsRangeT = std::vector<GroupId>; - using GroupBelsRangeT = std::vector<BelId>; - using GroupWiresRangeT = std::vector<WireId>; - using GroupPipsRangeT = std::vector<PipId>; - using GroupGroupsRangeT = std::vector<GroupId>; - // Decals - using DecalGfxRangeT = std::vector<GraphicElement>; - // Placement validity - using CellTypeRangeT = const std::vector<IdString> &; - using BelBucketRangeT = const std::vector<BelBucketId> &; - using BucketBelRangeT = const std::vector<BelId> &; }; struct Arch : BaseArch<ArchRanges> diff --git a/ice40/arch.h b/ice40/arch.h index 85182a60..5df072f9 100644 --- a/ice40/arch.h +++ b/ice40/arch.h @@ -374,35 +374,20 @@ struct ArchArgs std::string package; }; -struct ArchRanges +struct ArchRanges : BaseArchRanges { using ArchArgsT = ArchArgs; // Bels using AllBelsRangeT = BelRange; using TileBelsRangeT = BelRange; - using BelAttrsRangeT = std::vector<std::pair<IdString, std::string>>; using BelPinsRangeT = std::vector<IdString>; // Wires using AllWiresRangeT = WireRange; using DownhillPipRangeT = PipRange; using UphillPipRangeT = PipRange; using WireBelPinRangeT = BelPinRange; - using WireAttrsRangeT = std::vector<std::pair<IdString, std::string>>; // Pips using AllPipsRangeT = AllPipRange; - using PipAttrsRangeT = std::vector<std::pair<IdString, std::string>>; - // Groups - using AllGroupsRangeT = std::vector<GroupId>; - using GroupBelsRangeT = std::vector<BelId>; - using GroupWiresRangeT = std::vector<WireId>; - using GroupPipsRangeT = std::vector<PipId>; - using GroupGroupsRangeT = std::vector<GroupId>; - // Decals - using DecalGfxRangeT = std::vector<GraphicElement>; - // Placement validity - using CellTypeRangeT = const std::vector<IdString> &; - using BelBucketRangeT = const std::vector<BelBucketId> &; - using BucketBelRangeT = const std::vector<BelId> &; }; struct Arch : BaseArch<ArchRanges> diff --git a/nexus/arch.h b/nexus/arch.h index 5d6d7d99..d81605af 100644 --- a/nexus/arch.h +++ b/nexus/arch.h @@ -855,35 +855,20 @@ struct ArchArgs std::string device; }; -struct ArchRanges +struct ArchRanges : BaseArchRanges { using ArchArgsT = ArchArgs; // Bels using AllBelsRangeT = BelRange; using TileBelsRangeT = std::vector<BelId>; - using BelAttrsRangeT = std::vector<std::pair<IdString, std::string>>; using BelPinsRangeT = std::vector<IdString>; // Wires using AllWiresRangeT = WireRange; using DownhillPipRangeT = UpDownhillPipRange; using UphillPipRangeT = UpDownhillPipRange; using WireBelPinRangeT = BelPinRange; - using WireAttrsRangeT = std::vector<std::pair<IdString, std::string>>; // Pips using AllPipsRangeT = AllPipRange; - using PipAttrsRangeT = std::vector<std::pair<IdString, std::string>>; - // Groups - using AllGroupsRangeT = std::vector<GroupId>; - using GroupBelsRangeT = std::vector<BelId>; - using GroupWiresRangeT = std::vector<WireId>; - using GroupPipsRangeT = std::vector<PipId>; - using GroupGroupsRangeT = std::vector<GroupId>; - // Decals - using DecalGfxRangeT = std::vector<GraphicElement>; - // Placement validity - using CellTypeRangeT = const std::vector<IdString> &; - using BelBucketRangeT = const std::vector<BelBucketId> &; - using BucketBelRangeT = const std::vector<BelId> &; }; struct Arch : BaseArch<ArchRanges> |