aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/nextpnr.h3
-rw-r--r--docs/archapi.md10
-rw-r--r--ecp5/arch.h5
-rw-r--r--generic/arch.h5
-rw-r--r--gowin/arch.h5
-rw-r--r--ice40/arch.h5
-rw-r--r--nexus/arch.h5
7 files changed, 27 insertions, 11 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h
index 78ac2e71..43c092f8 100644
--- a/common/nextpnr.h
+++ b/common/nextpnr.h
@@ -1070,6 +1070,8 @@ template <typename R> struct ArchAPI : BaseCtx
// Basic config
virtual IdString archId() 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 getGridDimY() const = 0;
virtual int getTileBelDimZ(int x, int y) const = 0;
@@ -1181,6 +1183,7 @@ template <typename R> struct BaseArch : ArchAPI<R>
// Basic config
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 char getNameDelimiter() const override { return ' '; }
diff --git a/docs/archapi.md b/docs/archapi.md
index e3c06efd..0cd6632c 100644
--- a/docs/archapi.md
+++ b/docs/archapi.md
@@ -74,7 +74,15 @@ Constructor. ArchArgs is a architecture-specific type (usually a struct also def
### 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
diff --git a/ecp5/arch.h b/ecp5/arch.h
index 15520c18..87cf4037 100644
--- a/ecp5/arch.h
+++ b/ecp5/arch.h
@@ -437,6 +437,7 @@ NEXTPNR_NAMESPACE_BEGIN
struct ArchRanges
{
+ using ArchArgsType = ArchArgs;
// Bels
using AllBelsRange = BelRange;
using TileBelsRange = BelRange;
@@ -490,8 +491,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override;
std::string get_full_chip_name() const;
- ArchArgs archArgs() const { return args; }
- IdString archArgsToId(ArchArgs args) const;
+ ArchArgs archArgs() const override { return args; }
+ IdString archArgsToId(ArchArgs args) const override;
// -------------------------------------------------
diff --git a/generic/arch.h b/generic/arch.h
index 920f630b..d153182e 100644
--- a/generic/arch.h
+++ b/generic/arch.h
@@ -118,6 +118,7 @@ struct CellTiming
struct ArchRanges
{
+ using ArchArgsType = ArchArgs;
// Bels
using AllBelsRange = 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; }
IdString archId() const override { return id("generic"); }
- ArchArgs archArgs() const { return args; }
- IdString archArgsToId(ArchArgs args) const { return id("none"); }
+ ArchArgs archArgs() const override { return args; }
+ IdString archArgsToId(ArchArgs args) const override { return id("none"); }
int getGridDimX() const override { return gridDimX; }
int getGridDimY() const override { return gridDimY; }
diff --git a/gowin/arch.h b/gowin/arch.h
index 8f41657c..5c595bac 100644
--- a/gowin/arch.h
+++ b/gowin/arch.h
@@ -245,6 +245,7 @@ struct CellTiming
struct ArchRanges
{
+ using ArchArgsType = ArchArgs;
// Bels
using AllBelsRange = 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; }
- ArchArgs archArgs() const { return args; }
- IdString archArgsToId(ArchArgs args) const { return id("none"); }
+ ArchArgs archArgs() const override { return args; }
+ IdString archArgsToId(ArchArgs args) const override { return id("none"); }
int getGridDimX() const override { return gridDimX; }
int getGridDimY() const override { return gridDimY; }
diff --git a/ice40/arch.h b/ice40/arch.h
index 30a31432..dd771c0f 100644
--- a/ice40/arch.h
+++ b/ice40/arch.h
@@ -376,6 +376,7 @@ struct ArchArgs
struct ArchRanges
{
+ using ArchArgsType = ArchArgs;
// Bels
using AllBelsRange = BelRange;
using TileBelsRange = BelRange;
@@ -434,8 +435,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override;
- ArchArgs archArgs() const { return args; }
- IdString archArgsToId(ArchArgs args) const;
+ ArchArgs archArgs() const override { return args; }
+ IdString archArgsToId(ArchArgs args) const override;
// -------------------------------------------------
diff --git a/nexus/arch.h b/nexus/arch.h
index 8215c60c..f835a6b3 100644
--- a/nexus/arch.h
+++ b/nexus/arch.h
@@ -857,6 +857,7 @@ struct ArchArgs
struct ArchRanges
{
+ using ArchArgsType = ArchArgs;
// Bels
using AllBelsRange = BelRange;
using TileBelsRange = std::vector<BelId>;
@@ -934,8 +935,8 @@ struct Arch : BaseArch<ArchRanges>
std::string getChipName() const override;
- ArchArgs archArgs() const { return args; }
- IdString archArgsToId(ArchArgs args) const;
+ ArchArgs archArgs() const override { return args; }
+ IdString archArgsToId(ArchArgs args) const override;
int getGridDimX() const override { return chip_info->width; }
int getGridDimY() const override { return chip_info->height; }