ecp5: Use ArchNetInfo to mark global nets to ignore
Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
parent
ab063b2456
commit
0e0ad26f07
@ -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();
|
||||||
|
@ -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)
|
||||||
|
@ -136,7 +136,9 @@ struct DecalId
|
|||||||
|
|
||||||
struct ArchNetInfo
|
struct ArchNetInfo
|
||||||
{
|
{
|
||||||
|
bool is_global = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ArchCellInfo
|
struct ArchCellInfo
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user