diff options
author | David Shah <dave@ds0.me> | 2019-10-18 15:58:57 +0100 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-10-18 15:58:57 +0100 |
commit | cf5cbd1153c3ebaf6bcff98f2d936e1663407dff (patch) | |
tree | ed5d58e7f7be8b6340ca0f357816fa3bdc5cd80b /common | |
parent | 872e296f7b6b679be89ad3757a9ff9936dc71ba9 (diff) | |
download | nextpnr-cf5cbd1153c3ebaf6bcff98f2d936e1663407dff.tar.gz nextpnr-cf5cbd1153c3ebaf6bcff98f2d936e1663407dff.tar.bz2 nextpnr-cf5cbd1153c3ebaf6bcff98f2d936e1663407dff.zip |
ecp5: Preserve top level IO properly
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'common')
-rw-r--r-- | common/design_utils.cc | 12 | ||||
-rw-r--r-- | common/design_utils.h | 3 |
2 files changed, 14 insertions, 1 deletions
diff --git a/common/design_utils.cc b/common/design_utils.cc index bdf5ca5c..10212a03 100644 --- a/common/design_utils.cc +++ b/common/design_utils.cc @@ -88,7 +88,7 @@ void connect_port(const Context *ctx, NetInfo *net, CellInfo *cell, IdString por NPNR_ASSERT(net->driver.cell == nullptr); net->driver.cell = cell; net->driver.port = port_name; - } else if (port.type == PORT_IN) { + } else if (port.type == PORT_IN || port.type == PORT_INOUT) { PortRef user; user.cell = cell; user.port = port_name; @@ -146,4 +146,14 @@ void rename_port(Context *ctx, CellInfo *cell, IdString old_name, IdString new_n cell->ports[new_name] = pi; } +void rename_net(Context *ctx, NetInfo *net, IdString new_name) +{ + if (net == nullptr) + return; + NPNR_ASSERT(!ctx->nets.count(new_name)); + std::swap(ctx->nets[net->name], ctx->nets[new_name]); + ctx->nets.erase(net->name); + net->name = new_name; +} + NEXTPNR_NAMESPACE_END diff --git a/common/design_utils.h b/common/design_utils.h index 3eb9024f..1ae1d648 100644 --- a/common/design_utils.h +++ b/common/design_utils.h @@ -94,6 +94,9 @@ void connect_ports(Context *ctx, CellInfo *cell1, IdString port1_name, CellInfo // Rename a port if it exists on a cell void rename_port(Context *ctx, CellInfo *cell, IdString old_name, IdString new_name); +// Rename a net without invalidating pointers to it +void rename_net(Context *ctx, NetInfo *net, IdString new_name); + void print_utilisation(const Context *ctx); NEXTPNR_NAMESPACE_END |