interchange: Cope with undriven nets in more places
Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
parent
ee65e6f32d
commit
377f56c151
@ -356,13 +356,10 @@ bool DedicatedInterconnect::isBelLocationValid(BelId bel, const CellInfo *cell)
|
||||
for (const auto &port_pair : cell->ports) {
|
||||
IdString port_name = port_pair.first;
|
||||
NetInfo *net = port_pair.second.net;
|
||||
if (net == nullptr) {
|
||||
if (net == nullptr || net->driver.cell == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// This net doesn't have a driver, probably not valid?
|
||||
NPNR_ASSERT(net->driver.cell != nullptr);
|
||||
|
||||
// Only check sink BELs.
|
||||
if (net->driver.cell == cell && net->driver.port == port_name) {
|
||||
if (!is_driver_on_net_valid(bel, cell, port_name, net)) {
|
||||
|
@ -154,7 +154,8 @@ SiteArch::SiteArch(const SiteInformation *site_info) : ctx(site_info->ctx), site
|
||||
SiteNetInfo &net_info = net_pair.second;
|
||||
|
||||
// All nets require drivers
|
||||
NPNR_ASSERT(net->driver.cell != nullptr);
|
||||
if (net->driver.cell == nullptr)
|
||||
continue;
|
||||
|
||||
bool net_driven_out_of_site = false;
|
||||
if (net->driver.cell->bel == BelId()) {
|
||||
@ -259,6 +260,8 @@ SiteArch::SiteArch(const SiteInformation *site_info) : ctx(site_info->ctx), site
|
||||
}
|
||||
|
||||
for (auto &net_pair : nets) {
|
||||
if (net_pair.first->driver.cell == nullptr)
|
||||
continue;
|
||||
SiteNetInfo *net_info = &net_pair.second;
|
||||
auto result = wire_to_nets.emplace(net_info->driver, SiteNetMap{net_info, 1});
|
||||
// By this point, trivial congestion at sources should already by
|
||||
|
@ -706,6 +706,8 @@ static bool route_site(SiteArch *ctx, SiteRoutingCache *site_routing_cache, Rout
|
||||
expansions.reserve(ctx->nets.size());
|
||||
|
||||
for (auto &net_pair : ctx->nets) {
|
||||
if (net_pair.first->driver.cell == nullptr)
|
||||
continue;
|
||||
SiteNetInfo *net = &net_pair.second;
|
||||
|
||||
if (net->net->loop == nullptr) {
|
||||
@ -792,6 +794,8 @@ void check_routing(const SiteArch &site_arch)
|
||||
{
|
||||
for (auto &net_pair : site_arch.nets) {
|
||||
const NetInfo *net = net_pair.first;
|
||||
if (net->driver.cell == nullptr)
|
||||
continue;
|
||||
const SiteNetInfo &net_info = net_pair.second;
|
||||
|
||||
for (const auto &user : net_info.users) {
|
||||
|
Loading…
Reference in New Issue
Block a user