Add archArgs and archArgsToId to Arch API

Signed-off-by: D. Shah <dave@ds0.me>
This commit is contained in:
D. Shah 2021-02-05 18:41:35 +00:00
parent 6575bfac3e
commit 3e631fe2f4
7 changed files with 27 additions and 11 deletions

View File

@ -1070,6 +1070,8 @@ template <typename R> struct ArchAPI : BaseCtx
// Basic config // Basic config
virtual IdString archId() const = 0; virtual IdString archId() const = 0;
virtual std::string getChipName() const = 0; virtual std::string getChipName() const = 0;
virtual typename R::ArchArgsType archArgs() const = 0;
virtual IdString archArgsToId(typename R::ArchArgsType args) const = 0;
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;
@ -1181,6 +1183,7 @@ template <typename R> struct BaseArch : ArchAPI<R>
// Basic config // Basic config
virtual IdString archId() const override { return this->id(STRINGIFY(ARCHNAME)); } virtual IdString archId() const override { return this->id(STRINGIFY(ARCHNAME)); }
virtual IdString archArgsToId(typename R::ArchArgsType args) const { return IdString(); }
virtual int getTilePipDimZ(int x, int y) const override { return 1; } virtual int getTilePipDimZ(int x, int y) const override { return 1; }
virtual char getNameDelimiter() const override { return ' '; } virtual char getNameDelimiter() const override { return ' '; }

View File

@ -74,7 +74,15 @@ Constructor. ArchArgs is a architecture-specific type (usually a struct also def
### std::string getChipName() const ### std::string getChipName() const
Return a string representation of the ArchArgs that was used to construct this object. Return a user-friendly string representation of the ArchArgs that was used to construct this object.
### ArchArgs archArgs() const
Return the `ArchArgs` used to construct this object.
### IdString archArgsToId(ArchArgs args) const
Return an internal IdString representation of the ArchArgs that was used to construct this object.
### int getGridDimX() const ### int getGridDimX() const

View File

@ -437,6 +437,7 @@ NEXTPNR_NAMESPACE_BEGIN
struct ArchRanges struct ArchRanges
{ {
using ArchArgsType = ArchArgs;
// Bels // Bels
using AllBelsRange = BelRange; using AllBelsRange = BelRange;
using TileBelsRange = BelRange; using TileBelsRange = BelRange;
@ -490,8 +491,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override; std::string getChipName() const override;
std::string get_full_chip_name() const; std::string get_full_chip_name() const;
ArchArgs archArgs() const { return args; } ArchArgs archArgs() const override { return args; }
IdString archArgsToId(ArchArgs args) const; IdString archArgsToId(ArchArgs args) const override;
// ------------------------------------------------- // -------------------------------------------------

View File

@ -118,6 +118,7 @@ struct CellTiming
struct ArchRanges struct ArchRanges
{ {
using ArchArgsType = ArchArgs;
// Bels // Bels
using AllBelsRange = const std::vector<BelId> &; using AllBelsRange = const std::vector<BelId> &;
using TileBelsRange = const std::vector<BelId> &; using TileBelsRange = const std::vector<BelId> &;
@ -213,8 +214,8 @@ struct Arch : ArchAPI<ArchRanges>
std::string getChipName() const override { return chipName; } std::string getChipName() const override { return chipName; }
IdString archId() const override { return id("generic"); } IdString archId() const override { return id("generic"); }
ArchArgs archArgs() const { return args; } ArchArgs archArgs() const override { return args; }
IdString archArgsToId(ArchArgs args) const { return id("none"); } IdString archArgsToId(ArchArgs args) const override { return id("none"); }
int getGridDimX() const override { return gridDimX; } int getGridDimX() const override { return gridDimX; }
int getGridDimY() const override { return gridDimY; } int getGridDimY() const override { return gridDimY; }

View File

@ -245,6 +245,7 @@ struct CellTiming
struct ArchRanges struct ArchRanges
{ {
using ArchArgsType = ArchArgs;
// Bels // Bels
using AllBelsRange = const std::vector<BelId> &; using AllBelsRange = const std::vector<BelId> &;
using TileBelsRange = const std::vector<BelId> &; using TileBelsRange = const std::vector<BelId> &;
@ -345,8 +346,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override { return device; } std::string getChipName() const override { return device; }
ArchArgs archArgs() const { return args; } ArchArgs archArgs() const override { return args; }
IdString archArgsToId(ArchArgs args) const { return id("none"); } IdString archArgsToId(ArchArgs args) const override { return id("none"); }
int getGridDimX() const override { return gridDimX; } int getGridDimX() const override { return gridDimX; }
int getGridDimY() const override { return gridDimY; } int getGridDimY() const override { return gridDimY; }

View File

@ -376,6 +376,7 @@ struct ArchArgs
struct ArchRanges struct ArchRanges
{ {
using ArchArgsType = ArchArgs;
// Bels // Bels
using AllBelsRange = BelRange; using AllBelsRange = BelRange;
using TileBelsRange = BelRange; using TileBelsRange = BelRange;
@ -434,8 +435,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override; std::string getChipName() const override;
ArchArgs archArgs() const { return args; } ArchArgs archArgs() const override { return args; }
IdString archArgsToId(ArchArgs args) const; IdString archArgsToId(ArchArgs args) const override;
// ------------------------------------------------- // -------------------------------------------------

View File

@ -857,6 +857,7 @@ struct ArchArgs
struct ArchRanges struct ArchRanges
{ {
using ArchArgsType = ArchArgs;
// Bels // Bels
using AllBelsRange = BelRange; using AllBelsRange = BelRange;
using TileBelsRange = std::vector<BelId>; using TileBelsRange = std::vector<BelId>;
@ -934,8 +935,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override; std::string getChipName() const override;
ArchArgs archArgs() const { return args; } ArchArgs archArgs() const override { return args; }
IdString archArgsToId(ArchArgs args) const; IdString archArgsToId(ArchArgs args) const override;
int getGridDimX() const override { return chip_info->width; } int getGridDimX() const override { return chip_info->width; }
int getGridDimY() const override { return chip_info->height; } int getGridDimY() const override { return chip_info->height; }