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 "design_utils.h"
|
||||||
|
#include <algorithm>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "util.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
|
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
|
// Connect a net to a port
|
||||||
void connect_port(const Context *ctx, NetInfo *net, CellInfo *cell, IdString port_name);
|
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);
|
void print_utilisation(const Context *ctx);
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
Loading…
Reference in New Issue
Block a user