From 378ca60a2f29b7984c80f8ad9f665b5786fa524e Mon Sep 17 00:00:00 2001 From: YRabbit Date: Sun, 20 Nov 2022 22:04:09 +1000 Subject: [PATCH] gowin: mark the PLL ports that are not in use Unused ports are deactivated by special fuse combinations, rather than being left dangling in the air. Signed-off-by: YRabbit --- gowin/constids.inc | 8 ++++++++ gowin/pack.cc | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/gowin/constids.inc b/gowin/constids.inc index 59f364e7..e0b37b49 100644 --- a/gowin/constids.inc +++ b/gowin/constids.inc @@ -931,6 +931,14 @@ X(CLKOUTD) X(CLKOUTD3) X(LOCK) +// PLL parameters +X(CLKOUTPS) +X(CLKOUTDIV) +X(CLKOUTDIV3) +X(PWDEN) +X(RSTEN) +X(FLOCK) + // timing X(X0) X(FX1) diff --git a/gowin/pack.cc b/gowin/pack.cc index dc0b1461..1e0380c1 100644 --- a/gowin/pack.cc +++ b/gowin/pack.cc @@ -1019,6 +1019,14 @@ static void pack_plls(Context *ctx) switch (ci->type.hash()) { case ID_rPLL: { if (parm_device == "GW1N-1" || parm_device == "GW1NZ-1") { + // Unused ports will be disabled during image generation. Here we add flags for such ports. + Property pr_enable("ENABLE"), pr_disable("DISABLE"); + IdString ports[][2] = {{id_CLKOUTP, id_CLKOUTPS}, {id_CLKOUTD, id_CLKOUTDIV}, + {id_CLKOUTD3, id_CLKOUTDIV3}, {id_LOCK, id_FLOCK}, + {id_RESET_P, id_PWDEN}, {id_RESET, id_RSTEN}}; + for (int i = 0; i < 6; ++i) { + ci->setParam(ports[i][1], port_used(ci, ports[i][0]) ? pr_enable : pr_disable); + } // B half std::unique_ptr cell = create_generic_cell(ctx, id_RPLLB, ci->name.str(ctx) + "$rpllb"); reconnect_rpllb(ctx, ci, cell.get());