design_utils: Adding some design helper functions
Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
parent
d770eb672f
commit
a4ac174ccb
@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#include "design_utils.h"
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
@ -95,4 +96,33 @@ void connect_port(const Context *ctx, NetInfo *net, CellInfo *cell, IdString por
|
||||
}
|
||||
}
|
||||
|
||||
void disconnect_port(const Context *ctx, CellInfo *cell, IdString port_name)
|
||||
{
|
||||
if (!cell->ports.count(port_name))
|
||||
return;
|
||||
PortInfo &port = cell->ports.at(port_name);
|
||||
if (port.net != nullptr) {
|
||||
port.net->users.erase(std::remove_if(port.net->users.begin(), port.net->users.end(),
|
||||
[cell, port_name](const PortRef &user) {
|
||||
return user.cell == cell && user.port == port_name;
|
||||
}),
|
||||
port.net->users.end());
|
||||
}
|
||||
}
|
||||
|
||||
void connect_ports(Context *ctx, CellInfo *cell1, IdString port1_name, CellInfo *cell2, IdString port2_name)
|
||||
{
|
||||
PortInfo &port1 = cell1->ports.at(port1_name);
|
||||
if (port1.net == nullptr) {
|
||||
// No net on port1; need to create one
|
||||
std::unique_ptr<NetInfo> p1net(new NetInfo());
|
||||
p1net->name = ctx->id(cell1->name.str(ctx) + "$conn$" + port1_name.str(ctx));
|
||||
connect_port(ctx, p1net.get(), cell1, port1_name);
|
||||
IdString p1name = p1net->name;
|
||||
NPNR_ASSERT(!ctx->cells.count(p1name));
|
||||
ctx->nets[p1name] = std::move(p1net);
|
||||
}
|
||||
connect_port(ctx, port1.net, cell2, port2_name);
|
||||
}
|
||||
|
||||
NEXTPNR_NAMESPACE_END
|
||||
|
@ -85,6 +85,12 @@ template <typename F1> CellInfo *net_driven_by(const Context *ctx, const NetInfo
|
||||
// Connect a net to a port
|
||||
void connect_port(const Context *ctx, NetInfo *net, CellInfo *cell, IdString port_name);
|
||||
|
||||
// Disconnect a net from a port
|
||||
void disconnect_port(const Context *ctx, CellInfo *cell, IdString port_name);
|
||||
|
||||
// Connect two ports together
|
||||
void connect_ports(Context *ctx, CellInfo *cell1, IdString port1_name, CellInfo *cell2, IdString port2_name);
|
||||
|
||||
void print_utilisation(const Context *ctx);
|
||||
|
||||
NEXTPNR_NAMESPACE_END
|
||||
|
Loading…
Reference in New Issue
Block a user