diff options
author | David Shah <dave@ds0.me> | 2020-08-13 13:24:52 +0100 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2020-08-13 13:24:52 +0100 |
commit | fd5d95320bb68a570d77f3b0a3d4b41df383e8d3 (patch) | |
tree | 88a2a7512f3e54b6946a619f7ef4cc378c6bba5c | |
parent | fbe486df459909065d6852a7495a212dfd2accef (diff) | |
download | nextpnr-fd5d95320bb68a570d77f3b0a3d4b41df383e8d3.tar.gz nextpnr-fd5d95320bb68a570d77f3b0a3d4b41df383e8d3.tar.bz2 nextpnr-fd5d95320bb68a570d77f3b0a3d4b41df383e8d3.zip |
ecp5: Fix how ODDRX2 SCLK/RST are set
Signed-off-by: David Shah <dave@ds0.me>
-rw-r--r-- | ecp5/pack.cc | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/ecp5/pack.cc b/ecp5/pack.cc index 501f55b6..83ffc223 100644 --- a/ecp5/pack.cc +++ b/ecp5/pack.cc @@ -1992,7 +1992,7 @@ class Ecp5Packer { std::unordered_map<IdString, CellInfo *> pio_iologic; - auto set_iologic_sclk = [&](CellInfo *iol, CellInfo *prim, IdString port, bool input) { + auto set_iologic_sclk = [&](CellInfo *iol, CellInfo *prim, IdString port, bool input, bool disconnect = true) { NetInfo *sclk = nullptr; if (prim->ports.count(port)) sclk = prim->ports[port].net; @@ -2008,7 +2008,7 @@ class Ecp5Packer connect_port(ctx, sclk, iol, id_CLK); } } - if (prim->ports.count(port)) + if (prim->ports.count(port) && disconnect) disconnect_port(ctx, prim, port); }; @@ -2030,7 +2030,7 @@ class Ecp5Packer disconnect_port(ctx, prim, port); }; - auto set_iologic_lsr = [&](CellInfo *iol, CellInfo *prim, IdString port, bool input) { + auto set_iologic_lsr = [&](CellInfo *iol, CellInfo *prim, IdString port, bool input, bool disconnect = true) { NetInfo *lsr = nullptr; if (prim->ports.count(port)) lsr = prim->ports[port].net; @@ -2046,7 +2046,7 @@ class Ecp5Packer connect_port(ctx, lsr, iol, id_LSR); } } - if (prim->ports.count(port)) + if (prim->ports.count(port) && disconnect) disconnect_port(ctx, prim, port); }; @@ -2282,10 +2282,10 @@ class Ecp5Packer 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_sclk(iol, ci, ctx->id("SCLK"), false, false); set_iologic_sclk(iol, ci, ctx->id("SCLK"), true); set_iologic_eclk(iol, ci, id_ECLK); - set_iologic_lsr(iol, ci, ctx->id("RST"), false); + set_iologic_lsr(iol, ci, ctx->id("RST"), false, false); set_iologic_lsr(iol, ci, ctx->id("RST"), true); replace_port(ci, ctx->id("D0"), iol, id_TXDATA0); replace_port(ci, ctx->id("D1"), iol, id_TXDATA1); @@ -2359,7 +2359,7 @@ class Ecp5Packer 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); + set_iologic_lsr(iol, ci, ctx->id("RST"), false, false); set_iologic_lsr(iol, ci, ctx->id("RST"), true); replace_port(ci, ctx->id("D0"), iol, id_TXDATA0); replace_port(ci, ctx->id("D1"), iol, id_TXDATA2); @@ -2386,7 +2386,7 @@ class Ecp5Packer 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); + set_iologic_lsr(iol, ci, ctx->id("RST"), false, false); set_iologic_lsr(iol, ci, ctx->id("RST"), true); replace_port(ci, ctx->id("D0"), iol, id_TXDATA0); replace_port(ci, ctx->id("D1"), iol, id_TXDATA1); |