aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5/pack.cc
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-08-27 13:14:41 +0100
committerDavid Shah <dave@ds0.me>2019-08-27 13:14:41 +0100
commit78f86ce67afebe20d6a152ac53cf0f8ff16132a7 (patch)
treec63c7d250c160471738a0e909c1a9337c7a92669 /ecp5/pack.cc
parentccd9ca2a30374341207a975cfd1de172b9a59480 (diff)
downloadnextpnr-78f86ce67afebe20d6a152ac53cf0f8ff16132a7.tar.gz
nextpnr-78f86ce67afebe20d6a152ac53cf0f8ff16132a7.tar.bz2
nextpnr-78f86ce67afebe20d6a152ac53cf0f8ff16132a7.zip
ecp5: Add GSR/SGSR support
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ecp5/pack.cc')
-rw-r--r--ecp5/pack.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/ecp5/pack.cc b/ecp5/pack.cc
index 7cf9df78..e610dfe5 100644
--- a/ecp5/pack.cc
+++ b/ecp5/pack.cc
@@ -1411,6 +1411,17 @@ class Ecp5Packer
rename_port(ctx, ci, ctx->id("USRMCLKI"), id_PADDO);
rename_port(ctx, ci, ctx->id("USRMCLKTS"), id_PADDT);
rename_port(ctx, ci, ctx->id("USRMCLKO"), id_PADDI);
+ } else if (ci->type == id_GSR || ci->type == ctx->id("SGSR")) {
+ ci->params[ctx->id("MODE")] = std::string("ACTIVE_LOW");
+ ci->params[ctx->id("SYNCMODE")] =
+ ci->type == ctx->id("SGSR") ? std::string("SYNC") : std::string("ASYNC");
+ ci->type = id_GSR;
+ for (BelId bel : ctx->getBels()) {
+ if (ctx->getBelType(bel) != id_GSR)
+ continue;
+ ci->attrs[ctx->id("BEL")] = ctx->getBelName(bel).str(ctx);
+ ctx->gsrclk_wire = ctx->getBelPinWire(bel, id_CLK);
+ }
}
}
}