ecp5: Connect unused DQSBUF inputs to GND

Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
David Shah 2019-02-22 16:21:29 +00:00
parent ab50a6ef54
commit 0d83f3fcfe

View File

@ -1513,8 +1513,29 @@ class Ecp5Packer
cursor = ctx->getPipDstWire(fnd->second);
}
}
std::unordered_map<IdString, std::pair<bool, int>> dqsbuf_dqsg;
void tie_zero(CellInfo *ci, IdString port)
{
if (!ci->ports.count(port)) {
ci->ports[port].name = port;
ci->ports[port].type = PORT_IN;
}
std::unique_ptr<CellInfo> zero_cell{new CellInfo};
std::unique_ptr<NetInfo> zero_net{new NetInfo};
IdString name = ctx->id(ci->name.str(ctx) + "$zero$" + port.str(ctx));
zero_cell->type = ctx->id("GND");
zero_cell->name = name;
zero_net->name = name;
zero_cell->ports[ctx->id("GND")].type = PORT_OUT;
connect_port(ctx, zero_net.get(), zero_cell.get(), ctx->id("GND"));
connect_port(ctx, zero_net.get(), ci, port);
ctx->nets[name] = std::move(zero_net);
new_cells.push_back(std::move(zero_cell));
}
std::unordered_map<IdString, std::pair<bool, int>> dqsbuf_dqsg;
// Pack DQSBUFs
void pack_dqsbuf()
{
@ -1565,6 +1586,14 @@ class Ecp5Packer
}
pn->is_global = true;
}
for (auto zport :
{id_RDMOVE, id_RDDIRECTION, id_WRMOVE, id_WRDIRECTION, id_READ0, id_READ1, id_READCLKSEL0,
id_READCLKSEL1, id_READCLKSEL2, id_DYNDELAY0, id_DYNDELAY1, id_DYNDELAY2, id_DYNDELAY3,
id_DYNDELAY4, id_DYNDELAY5, id_DYNDELAY6, id_DYNDELAY7}) {
if (net_or_nullptr(ci, zport) == nullptr)
tie_zero(ci, zport);
}
}
}
}
@ -1733,19 +1762,6 @@ class Ecp5Packer
}
};
auto tie_zero = [&](CellInfo *ci, IdString port) {
std::unique_ptr<CellInfo> zero_cell{new CellInfo};
std::unique_ptr<NetInfo> zero_net{new NetInfo};
IdString name = ctx->id(ci->name.str(ctx) + "$zero$" + port.str(ctx));
zero_cell->type = ctx->id("GND");
zero_cell->name = name;
zero_net->name = name;
zero_cell->ports[ctx->id("GND")].type = PORT_OUT;
connect_port(ctx, zero_net.get(), zero_cell.get(), ctx->id("GND"));
ctx->nets[name] = std::move(zero_net);
new_cells.push_back(std::move(zero_cell));
};
for (auto cell : sorted(ctx->cells)) {
CellInfo *ci = cell.second;
if (ci->type == ctx->id("DELAYF") || ci->type == ctx->id("DELAYG")) {