diff --git a/common/nextpnr.cc b/common/nextpnr.cc index d47a8525..068bca6f 100644 --- a/common/nextpnr.cc +++ b/common/nextpnr.cc @@ -89,6 +89,11 @@ WireId Context::getNetinfoSinkWire(const NetInfo *net_info, const PortRef &user_ delay_t Context::getNetinfoRouteDelay(const NetInfo *net_info, const PortRef &user_info) const { +#ifdef ARCH_ECP5 + if (net_info->is_global) + return 0; +#endif + WireId src_wire = getNetinfoSourceWire(net_info); if (src_wire == WireId()) return 0; @@ -102,12 +107,7 @@ delay_t Context::getNetinfoRouteDelay(const NetInfo *net_info, const PortRef &us if (it == net_info->wires.end()) break; -#ifdef ARCH_ECP5 - // ECP5 global nets currently appear part-unrouted due to arch database limitations - // Don't touch them in the router - if (it->second.strength == STRENGTH_LOCKED) - return 0; -#endif + PipId pip = it->second.pip; delay += getPipDelay(pip).maxDelay(); delay += getWireDelay(cursor).maxDelay(); diff --git a/common/router1.cc b/common/router1.cc index d29cdd68..c4708de7 100644 --- a/common/router1.cc +++ b/common/router1.cc @@ -535,7 +535,7 @@ void addNetRouteJobs(Context *ctx, const Router1Cfg &cfg, IdString net_name, #ifdef ARCH_ECP5 // ECP5 global nets currently appear part-unrouted due to arch database limitations // Don't touch them in the router - if (!net_info->wires.empty() && net_info->wires.begin()->second.strength == STRENGTH_LOCKED) + if (net_info->is_global) return; #endif if (net_info->driver.cell == nullptr) diff --git a/ecp5/archdefs.h b/ecp5/archdefs.h index c4e1413f..b5cdea3c 100644 --- a/ecp5/archdefs.h +++ b/ecp5/archdefs.h @@ -136,7 +136,9 @@ struct DecalId struct ArchNetInfo { + bool is_global = false; }; + struct ArchCellInfo { struct diff --git a/ecp5/globals.cc b/ecp5/globals.cc index 22fcbb05..91d224e5 100644 --- a/ecp5/globals.cc +++ b/ecp5/globals.cc @@ -280,6 +280,7 @@ class Ecp5GlobalRouter glbnet->name = ctx->id("$glbnet$" + net->name.str(ctx)); glbnet->driver.cell = dcc.get(); glbnet->driver.port = id_CLKO; + glbnet->is_global = true; dcc->ports[id_CLKO].net = glbnet.get(); glbnet->users = net->users;