ecp5: Fix USRMCLK primitive
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
5344bc3b65
commit
12f375a239
@ -129,4 +129,21 @@ void connect_ports(Context *ctx, CellInfo *cell1, IdString port1_name, CellInfo
|
|||||||
connect_port(ctx, port1.net, cell2, port2_name);
|
connect_port(ctx, port1.net, cell2, port2_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rename_port(Context *ctx, CellInfo *cell, IdString old_name, IdString new_name)
|
||||||
|
{
|
||||||
|
if (!cell->ports.count(old_name))
|
||||||
|
return;
|
||||||
|
PortInfo pi = cell->ports.at(old_name);
|
||||||
|
if (pi.net != nullptr) {
|
||||||
|
if (pi.net->driver.cell == cell && pi.net->driver.port == old_name)
|
||||||
|
pi.net->driver.port = new_name;
|
||||||
|
for (auto &usr : pi.net->users)
|
||||||
|
if (usr.cell == cell && usr.port == old_name)
|
||||||
|
usr.port = new_name;
|
||||||
|
}
|
||||||
|
cell->ports.erase(old_name);
|
||||||
|
pi.name = new_name;
|
||||||
|
cell->ports[new_name] = pi;
|
||||||
|
}
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
@ -91,6 +91,9 @@ void disconnect_port(const Context *ctx, CellInfo *cell, IdString port_name);
|
|||||||
// Connect two ports together
|
// Connect two ports together
|
||||||
void connect_ports(Context *ctx, CellInfo *cell1, IdString port1_name, CellInfo *cell2, IdString port2_name);
|
void connect_ports(Context *ctx, CellInfo *cell1, IdString port1_name, CellInfo *cell2, IdString port2_name);
|
||||||
|
|
||||||
|
// Rename a port if it exists on a cell
|
||||||
|
void rename_port(Context *ctx, CellInfo *cell, IdString old_name, IdString new_name);
|
||||||
|
|
||||||
void print_utilisation(const Context *ctx);
|
void print_utilisation(const Context *ctx);
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
14
ecp5/pack.cc
14
ecp5/pack.cc
@ -1390,6 +1390,19 @@ class Ecp5Packer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Miscellaneous packer tasks
|
||||||
|
void pack_misc()
|
||||||
|
{
|
||||||
|
for (auto cell : sorted(ctx->cells)) {
|
||||||
|
CellInfo *ci = cell.second;
|
||||||
|
if (ci->type == id_USRMCLK) {
|
||||||
|
rename_port(ctx, ci, ctx->id("USRMCLKI"), id_PADDO);
|
||||||
|
rename_port(ctx, ci, ctx->id("USRMCLKTS"), id_PADDT);
|
||||||
|
rename_port(ctx, ci, ctx->id("USRMCLKO"), id_PADDI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Preplace PLL
|
// Preplace PLL
|
||||||
void preplace_plls()
|
void preplace_plls()
|
||||||
{
|
{
|
||||||
@ -2371,6 +2384,7 @@ class Ecp5Packer
|
|||||||
pack_ebr();
|
pack_ebr();
|
||||||
pack_dsps();
|
pack_dsps();
|
||||||
pack_dcus();
|
pack_dcus();
|
||||||
|
pack_misc();
|
||||||
preplace_plls();
|
preplace_plls();
|
||||||
pack_constants();
|
pack_constants();
|
||||||
pack_dram();
|
pack_dram();
|
||||||
|
Loading…
Reference in New Issue
Block a user