Add a few more functions to ArchBase

Signed-off-by: D. Shah <dave@ds0.me>
This commit is contained in:
D. Shah 2021-02-04 10:56:19 +00:00
parent d4363b7ee5
commit 6d794abf49
2 changed files with 18 additions and 11 deletions

View File

@ -99,6 +99,8 @@ inline void assert_fail_impl_str(std::string message, const char *expr_str, cons
#define NPNR_ASSERT_FALSE(msg) (assert_fail_impl(msg, "false", __FILE__, __LINE__)) #define NPNR_ASSERT_FALSE(msg) (assert_fail_impl(msg, "false", __FILE__, __LINE__))
#define NPNR_ASSERT_FALSE_STR(msg) (assert_fail_impl_str(msg, "false", __FILE__, __LINE__)) #define NPNR_ASSERT_FALSE_STR(msg) (assert_fail_impl_str(msg, "false", __FILE__, __LINE__))
#define STRINGIFY(x) #x
struct BaseCtx; struct BaseCtx;
struct Context; struct Context;
@ -1016,6 +1018,8 @@ template <typename R> struct ArchBase : BaseCtx
// Arch API base // Arch API base
// Basic config // Basic config
virtual std::string getChipName() const = 0;
virtual IdString archId() const { id(STRINGIFY(ARCHNAME)); }
virtual int getGridDimX() const = 0; virtual int getGridDimX() const = 0;
virtual int getGridDimY() const = 0; virtual int getGridDimY() const = 0;
virtual int getTileBelDimZ(int x, int y) const = 0; virtual int getTileBelDimZ(int x, int y) const = 0;
@ -1163,15 +1167,16 @@ template <typename R> struct ArchBase : BaseCtx
virtual Loc getPipLocation(PipId pip) const = 0; virtual Loc getPipLocation(PipId pip) const = 0;
// Group methods // Group methods
virtual GroupId getGroupByName(IdStringList name) const = 0; virtual GroupId getGroupByName(IdStringList name) const { return GroupId(); };
virtual IdStringList getGroupName(GroupId group) const = 0; virtual IdStringList getGroupName(GroupId group) const { return IdStringList(); };
virtual delay_t estimateDelay(WireId src, WireId dst) const = 0; virtual delay_t estimateDelay(WireId src, WireId dst) const = 0;
virtual ArcBounds getRouteBoundingBox(WireId src, WireId dst) const = 0; virtual ArcBounds getRouteBoundingBox(WireId src, WireId dst) const = 0;
virtual typename R::AllGroupsRange getGroups() const = 0; virtual typename R::AllGroupsRange getGroups() const = 0;
virtual typename R::GroupBelsRange getGroupBels(GroupId group) const = 0; // Default implementation of these assumes no groups so never called
virtual typename R::GroupWiresRange getGroupWires(GroupId group) const = 0; virtual typename R::GroupBelsRange getGroupBels(GroupId group) const { NPNR_ASSERT_FALSE("unreachable"); };
virtual typename R::GroupPipsRange getGroupPips(GroupId group) const = 0; virtual typename R::GroupWiresRange getGroupWires(GroupId group) const { NPNR_ASSERT_FALSE("unreachable"); };
virtual typename R::GroupGroupsRange getGroupGroups(GroupId group) const = 0; virtual typename R::GroupPipsRange getGroupPips(GroupId group) const { NPNR_ASSERT_FALSE("unreachable"); };
virtual typename R::GroupGroupsRange getGroupGroups(GroupId group) const { NPNR_ASSERT_FALSE("unreachable"); };
// Delay methods // Delay methods
virtual delay_t predictDelay(const NetInfo *net_info, const PortRef &sink) const = 0; virtual delay_t predictDelay(const NetInfo *net_info, const PortRef &sink) const = 0;
@ -1186,6 +1191,7 @@ template <typename R> struct ArchBase : BaseCtx
} }
// Decal methods // Decal methods
virtual typename R::DecalGfxRange getDecalGraphics(DecalId decal) const { NPNR_ASSERT_FALSE("unreachable"); };
virtual DecalXY getBelDecal(BelId bel) const { return DecalXY(); } virtual DecalXY getBelDecal(BelId bel) const { return DecalXY(); }
virtual DecalXY getWireDecal(WireId wire) const { return DecalXY(); } virtual DecalXY getWireDecal(WireId wire) const { return DecalXY(); }
virtual DecalXY getPipDecal(PipId pip) const { return DecalXY(); } virtual DecalXY getPipDecal(PipId pip) const { return DecalXY(); }
@ -1209,8 +1215,8 @@ template <typename R> struct ArchBase : BaseCtx
virtual bool isValidBelForCellType(IdString cell_type, BelId bel) const { return cell_type == getBelType(bel); } virtual bool isValidBelForCellType(IdString cell_type, BelId bel) const { return cell_type == getBelType(bel); }
virtual IdString getBelBucketName(BelBucketId bucket) const = 0; virtual IdString getBelBucketName(BelBucketId bucket) const = 0;
virtual BelBucketId getBelBucketByName(IdString name) const = 0; virtual BelBucketId getBelBucketByName(IdString name) const = 0;
virtual BelBucketId getBelBucketForBel(BelId bel) const = 0; virtual BelBucketId getBelBucketForBel(BelId bel) const { return getBelBucketForCellType(getBelType(bel)); };
virtual BelBucketId getBelBucketForCellType(IdString cell_type) const = 0; virtual BelBucketId getBelBucketForCellType(IdString cell_type) const { return getBelBucketByName(cell_type); };
virtual bool isValidBelForCell(CellInfo *cell, BelId bel) const { return true; } virtual bool isValidBelForCell(CellInfo *cell, BelId bel) const { return true; }
virtual bool isBelLocationValid(BelId bel) const { return true; } virtual bool isBelLocationValid(BelId bel) const { return true; }
virtual typename R::CellTypeRange getCellTypes() const = 0; virtual typename R::CellTypeRange getCellTypes() const = 0;

View File

@ -457,6 +457,8 @@ struct ArchRanges
using GroupWiresRange = std::vector<WireId>; using GroupWiresRange = std::vector<WireId>;
using GroupPipsRange = std::vector<PipId>; using GroupPipsRange = std::vector<PipId>;
using GroupGroupsRange = std::vector<GroupId>; using GroupGroupsRange = std::vector<GroupId>;
// Decals
using DecalGfxRange = std::vector<GraphicElement>;
// Placement validity // Placement validity
using CellTypeRange = const std::vector<IdString> &; using CellTypeRange = const std::vector<IdString> &;
using BelBucketRange = std::vector<BelBucketId>; using BelBucketRange = std::vector<BelBucketId>;
@ -485,10 +487,9 @@ struct Arch : ArchBase<ArchRanges>
static bool is_available(ArchArgs::ArchArgsTypes chip); static bool is_available(ArchArgs::ArchArgsTypes chip);
static std::vector<std::string> get_supported_packages(ArchArgs::ArchArgsTypes chip); static std::vector<std::string> get_supported_packages(ArchArgs::ArchArgsTypes chip);
std::string getChipName() const; std::string getChipName() const override;
std::string get_full_chip_name() const; std::string get_full_chip_name() const;
IdString archId() const { return id("ecp5"); }
ArchArgs archArgs() const { return args; } ArchArgs archArgs() const { return args; }
IdString archArgsToId(ArchArgs args) const; IdString archArgsToId(ArchArgs args) const;
@ -864,7 +865,7 @@ struct Arch : ArchBase<ArchRanges>
// ------------------------------------------------- // -------------------------------------------------
std::vector<GraphicElement> getDecalGraphics(DecalId decal) const; std::vector<GraphicElement> getDecalGraphics(DecalId decal) const override;
DecalXY getBelDecal(BelId bel) const override; DecalXY getBelDecal(BelId bel) const override;
DecalXY getWireDecal(WireId wire) const override; DecalXY getWireDecal(WireId wire) const override;