From 3e631fe2f415adeb0205eff866aaea74b8ef3ed8 Mon Sep 17 00:00:00 2001 From: "D. Shah" Date: Fri, 5 Feb 2021 18:41:35 +0000 Subject: [PATCH] Add archArgs and archArgsToId to Arch API Signed-off-by: D. Shah --- common/nextpnr.h | 3 +++ docs/archapi.md | 10 +++++++++- ecp5/arch.h | 5 +++-- generic/arch.h | 5 +++-- gowin/arch.h | 5 +++-- ice40/arch.h | 5 +++-- nexus/arch.h | 5 +++-- 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 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 struct BaseArch : ArchAPI // 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 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 &; using TileBelsRange = const std::vector &; @@ -213,8 +214,8 @@ struct Arch : ArchAPI 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 &; using TileBelsRange = const std::vector &; @@ -345,8 +346,8 @@ struct Arch : BaseArch 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 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; @@ -934,8 +935,8 @@ struct Arch : BaseArch 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; }