From fe2375324d33c0aeb6e08250b56859a5963e223c Mon Sep 17 00:00:00 2001 From: David Shah Date: Tue, 12 Feb 2019 11:27:15 +0000 Subject: ecp5: Add OSHX2A support Signed-off-by: David Shah --- ecp5/pack.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'ecp5') 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(); -- cgit v1.2.3