aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-02-12 11:27:15 +0000
committerDavid Shah <davey1576@gmail.com>2019-02-24 10:28:25 +0100
commitfe2375324d33c0aeb6e08250b56859a5963e223c (patch)
tree3ce3743fa30801ab0500ce5e923e3f70bb80db9c /ecp5
parent8a64a72a2127d51cf5b90d9083d2ff0c49a6b30e (diff)
downloadnextpnr-fe2375324d33c0aeb6e08250b56859a5963e223c.tar.gz
nextpnr-fe2375324d33c0aeb6e08250b56859a5963e223c.tar.bz2
nextpnr-fe2375324d33c0aeb6e08250b56859a5963e223c.zip
ecp5: Add OSHX2A support
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ecp5')
-rw-r--r--ecp5/pack.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/ecp5/pack.cc b/ecp5/pack.cc
index 09a7f358..b6fd0881 100644
--- a/ecp5/pack.cc
+++ b/ecp5/pack.cc
@@ -1712,6 +1712,32 @@ class Ecp5Packer
iol->params[ctx->id("GSR")] = str_or_default(ci->params, ctx->id("GSR"), "DISABLED");
iol->params[ctx->id("IDDRXN.MODE")] = "IDDRX2";
packed_cells.insert(cell.first);
+ } else if (ci->type == ctx->id("OSHX2A")) {
+ CellInfo *pio = net_only_drives(ctx, ci->ports.at(ctx->id("Q")).net, is_trellis_io, id_I, true);
+ if (pio == nullptr)
+ log_error("OSHX2A '%s' Q output must be connected only to a top level output\n",
+ ci->name.c_str(ctx));
+ CellInfo *iol;
+ if (pio_iologic.count(pio->name))
+ iol = pio_iologic.at(pio->name);
+ else
+ iol = create_pio_iologic(pio, ci);
+ set_iologic_mode(iol, "MIDDRX_MODDRX");
+ replace_port(ci, ctx->id("Q"), iol, id_IOLDO);
+ if (!pio->ports.count(id_IOLDO)) {
+ pio->ports[id_IOLDO].name = id_IOLDO;
+ pio->ports[id_IOLDO].type = PORT_IN;
+ }
+ replace_port(pio, id_I, pio, id_IOLDO);
+ set_iologic_sclk(iol, ci, ctx->id("SCLK"), false);
+ set_iologic_eclk(iol, ci, id_ECLK);
+ set_iologic_lsr(iol, ci, ctx->id("RST"), false);
+ replace_port(ci, ctx->id("D0"), iol, id_TXDATA0);
+ replace_port(ci, ctx->id("D1"), iol, id_TXDATA2);
+ iol->params[ctx->id("GSR")] = str_or_default(ci->params, ctx->id("GSR"), "DISABLED");
+ iol->params[ctx->id("MODDRX.MODE")] = "MOSHX2";
+ pio->params[ctx->id("DATAMUX_MDDR")] = "IOLDO";
+ packed_cells.insert(cell.first);
}
}
flush_cells();