From a8a88d4813b63d8ec1ed93eaedc27ec2c8e14c7c Mon Sep 17 00:00:00 2001 From: gatecat Date: Thu, 9 Feb 2023 11:12:15 +0100 Subject: ecp5: Handle the case where both CE are the same constant Signed-off-by: gatecat --- ecp5/pack.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'ecp5/pack.cc') diff --git a/ecp5/pack.cc b/ecp5/pack.cc index 79d1688f..23d3a1ae 100644 --- a/ecp5/pack.cc +++ b/ecp5/pack.cc @@ -1508,6 +1508,10 @@ class Ecp5Packer // Check if two nets have identical constant drivers bool equal_constant(NetInfo *a, NetInfo *b) { + if (a == nullptr && b == nullptr) + return true; + if ((a == nullptr) != (b == nullptr)) + return false; if (a->driver.cell == nullptr || b->driver.cell == nullptr) return (a->driver.cell == nullptr && b->driver.cell == nullptr); if (a->driver.cell->type != id_GND && a->driver.cell->type != id_VCC) @@ -2237,7 +2241,8 @@ class Ecp5Packer iol->params[id_CEMUX] = str_or_default(ci->params, id_CEMUX, "CE"); ci->movePortTo(id_CE, iol, id_CE); } else { - if (iol->getPort(id_CE) != ci->getPort(id_CE) || + if ((iol->getPort(id_CE) != ci->getPort(id_CE) && + !equal_constant(iol->getPort(id_CE), ci->getPort(id_CE))) || str_or_default(ci->params, id_CEMUX, "CE") != str_or_default(iol->params, id_CEMUX, "CE")) log_error("CE signal or polarity mismatch for IO flipflop %s with other IOFFs at " @@ -2303,7 +2308,8 @@ class Ecp5Packer iol->params[id_CEMUX] = str_or_default(ci->params, id_CEMUX, "CE"); ci->movePortTo(id_CE, iol, id_CE); } else { - if (iol->getPort(id_CE) != ci->getPort(id_CE) || + if ((iol->getPort(id_CE) != ci->getPort(id_CE) && + !equal_constant(iol->getPort(id_CE), ci->getPort(id_CE))) || str_or_default(ci->params, id_CEMUX, "CE") != str_or_default(iol->params, id_CEMUX, "CE")) log_error("CE signal or polarity mismatch for IO flipflop %s with other IOFFs at " -- cgit v1.2.3