ecp5: Use ArchNetInfo to mark global nets to ignore

Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
David Shah 2018-09-29 19:31:49 +01:00
parent ab063b2456
commit 0e0ad26f07
4 changed files with 10 additions and 7 deletions

View File

@ -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 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); WireId src_wire = getNetinfoSourceWire(net_info);
if (src_wire == WireId()) if (src_wire == WireId())
return 0; return 0;
@ -102,12 +107,7 @@ delay_t Context::getNetinfoRouteDelay(const NetInfo *net_info, const PortRef &us
if (it == net_info->wires.end()) if (it == net_info->wires.end())
break; 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; PipId pip = it->second.pip;
delay += getPipDelay(pip).maxDelay(); delay += getPipDelay(pip).maxDelay();
delay += getWireDelay(cursor).maxDelay(); delay += getWireDelay(cursor).maxDelay();

View File

@ -535,7 +535,7 @@ void addNetRouteJobs(Context *ctx, const Router1Cfg &cfg, IdString net_name,
#ifdef ARCH_ECP5 #ifdef ARCH_ECP5
// ECP5 global nets currently appear part-unrouted due to arch database limitations // ECP5 global nets currently appear part-unrouted due to arch database limitations
// Don't touch them in the router // 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; return;
#endif #endif
if (net_info->driver.cell == nullptr) if (net_info->driver.cell == nullptr)

View File

@ -136,7 +136,9 @@ struct DecalId
struct ArchNetInfo struct ArchNetInfo
{ {
bool is_global = false;
}; };
struct ArchCellInfo struct ArchCellInfo
{ {
struct struct

View File

@ -280,6 +280,7 @@ class Ecp5GlobalRouter
glbnet->name = ctx->id("$glbnet$" + net->name.str(ctx)); glbnet->name = ctx->id("$glbnet$" + net->name.str(ctx));
glbnet->driver.cell = dcc.get(); glbnet->driver.cell = dcc.get();
glbnet->driver.port = id_CLKO; glbnet->driver.port = id_CLKO;
glbnet->is_global = true;
dcc->ports[id_CLKO].net = glbnet.get(); dcc->ports[id_CLKO].net = glbnet.get();
glbnet->users = net->users; glbnet->users = net->users;