ecp5: Improve global routing robustness
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
2aaef61547
commit
3c60ea383d
@ -63,6 +63,13 @@ class Ecp5GlobalRouter
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_logic_port(const PortRef &user)
|
||||||
|
{
|
||||||
|
if (user.cell->type == id_TRELLIS_SLICE && user.port != id_CLK && user.port != id_WCK)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<NetInfo *> get_clocks()
|
std::vector<NetInfo *> get_clocks()
|
||||||
{
|
{
|
||||||
std::unordered_map<IdString, int> clockCount;
|
std::unordered_map<IdString, int> clockCount;
|
||||||
@ -162,6 +169,8 @@ class Ecp5GlobalRouter
|
|||||||
if (ctx->checkWireAvail(next)) {
|
if (ctx->checkWireAvail(next)) {
|
||||||
for (auto pip : ctx->getPipsUphill(next)) {
|
for (auto pip : ctx->getPipsUphill(next)) {
|
||||||
WireId src = ctx->getPipSrcWire(pip);
|
WireId src = ctx->getPipSrcWire(pip);
|
||||||
|
if (backtrace.count(src))
|
||||||
|
continue;
|
||||||
backtrace[src] = pip;
|
backtrace[src] = pip;
|
||||||
upstream.push(src);
|
upstream.push(src);
|
||||||
}
|
}
|
||||||
@ -414,6 +423,8 @@ class Ecp5GlobalRouter
|
|||||||
keep_users.push_back(user);
|
keep_users.push_back(user);
|
||||||
} else if (net->driver.cell->type == id_EXTREFB && user.cell->type == id_DCUA) {
|
} else if (net->driver.cell->type == id_EXTREFB && user.cell->type == id_DCUA) {
|
||||||
keep_users.push_back(user);
|
keep_users.push_back(user);
|
||||||
|
} else if (is_logic_port(user)) {
|
||||||
|
keep_users.push_back(user);
|
||||||
} else {
|
} else {
|
||||||
glbnet->users.push_back(user);
|
glbnet->users.push_back(user);
|
||||||
user.cell->ports.at(user.port).net = glbnet.get();
|
user.cell->ports.at(user.port).net = glbnet.get();
|
||||||
|
Loading…
Reference in New Issue
Block a user