From ec53ae0c3ba7778f41274f05f4561a335a4b0b90 Mon Sep 17 00:00:00 2001 From: YRabbit Date: Fri, 25 Nov 2022 20:49:26 +1000 Subject: gowin: add information about pin configurations Includes information on additional pin functions such as RPLL_C_IN, GCLKC_3, SCLK and others. This allows a decision to be made about special network routing of such pins Signed-off-by: YRabbit --- gowin/arch.cc | 15 +++++++++++++-- gowin/arch.h | 11 +++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/gowin/arch.cc b/gowin/arch.cc index e6eeced3..756580e0 100644 --- a/gowin/arch.cc +++ b/gowin/arch.cc @@ -666,6 +666,17 @@ const PairPOD *pairLookup(const PairPOD *list, const size_t len, const int dest) return nullptr; } +const PinPOD *pinLookup(const PinPOD *list, const size_t len, const int idx) +{ + for (size_t i = 0; i < len; i++) { + const PinPOD *pin = &list[i]; + if (pin->index_id == idx) { + return pin; + } + } + return nullptr; +} + bool aliasCompare(GlobalAliasPOD i, GlobalAliasPOD j) { return (i.dest_row < j.dest_row) || (i.dest_row == j.dest_row && i.dest_col < j.dest_col) || @@ -947,9 +958,9 @@ void Arch::read_cst(std::istream &in) case ioloc: { // IO_LOC name pin IdString pinname = id(match[2]); pinline = match[2]; - const PairPOD *belname = pairLookup(package->pins.get(), package->num_pins, pinname.index); + const PinPOD *belname = pinLookup(package->pins.get(), package->num_pins, pinname.index); if (belname != nullptr) { - std::string bel = IdString(belname->src_id).str(this); + std::string bel = IdString(belname->loc_id).str(this); it->second->setAttr(IdString(ID_BEL), bel); } else { if (std::regex_match(pinline, match_pinloc, iobelre)) { diff --git a/gowin/arch.h b/gowin/arch.h index 994b6d98..0591e41a 100644 --- a/gowin/arch.h +++ b/gowin/arch.h @@ -140,10 +140,17 @@ NPNR_PACKED_STRUCT(struct PartnumberPOD { uint32_t speed_id; }); +NPNR_PACKED_STRUCT(struct PinPOD { + uint16_t index_id; + uint16_t loc_id; + uint32_t num_cfgs; + RelPtr cfgs; +}); + NPNR_PACKED_STRUCT(struct PackagePOD { uint32_t name_id; uint32_t num_pins; - RelPtr pins; + RelPtr pins; }); NPNR_PACKED_STRUCT(struct VariantPOD { @@ -475,7 +482,7 @@ struct Arch : BaseArch void route_gowin_globals(Context *ctx); // chip db version - unsigned int const chipdb_version = 1; + unsigned int const chipdb_version = 2; std::vector cell_types; -- cgit v1.2.3 From b0791a01c9f78856c3168528f256a14ab9bbd67d Mon Sep 17 00:00:00 2001 From: YRabbit Date: Fri, 2 Dec 2022 08:49:56 +1000 Subject: gowin: update the apicula version Signed-off-by: YRabbit --- .github/workflows/arch_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/arch_ci.yml b/.github/workflows/arch_ci.yml index 459a770c..63255a5b 100644 --- a/.github/workflows/arch_ci.yml +++ b/.github/workflows/arch_ci.yml @@ -18,7 +18,7 @@ jobs: TRELLIS_REVISION: 48486ebd1e03e4ac42c96299e881adf9d43bc241 PRJOXIDE_REVISION: c3fb1526cf4a2165e15b74f4a994d153c7695fe4 MISTRAL_REVISION: ebfc0dd2cc7d6d2159b641a397c88554840e93c9 - APYCULA_REVISION: 0.2a4 + APYCULA_REVISION: 0.5.1a1 steps: - uses: actions/checkout@v3 with: -- cgit v1.2.3