aboutsummaryrefslogtreecommitdiffstats
path: root/fpga_interchange/arch.cc
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-07-06 10:38:08 +0100
committergatecat <gatecat@ds0.me>2021-07-06 10:38:08 +0100
commit31abefc8e49edce55fb42c99ac99b81e948d9004 (patch)
tree11d7496a94275f54e98d566958890285e18a3104 /fpga_interchange/arch.cc
parent6fe071ad1d47c363f665995ae774edcd547e022d (diff)
downloadnextpnr-31abefc8e49edce55fb42c99ac99b81e948d9004.tar.gz
nextpnr-31abefc8e49edce55fb42c99ac99b81e948d9004.tar.bz2
nextpnr-31abefc8e49edce55fb42c99ac99b81e948d9004.zip
interchange: Allow pseudo pip wires to overlap with bound site wires on the same net
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'fpga_interchange/arch.cc')
-rw-r--r--fpga_interchange/arch.cc11
1 files changed, 3 insertions, 8 deletions
diff --git a/fpga_interchange/arch.cc b/fpga_interchange/arch.cc
index be40ddfd..901725d4 100644
--- a/fpga_interchange/arch.cc
+++ b/fpga_interchange/arch.cc
@@ -1518,11 +1518,6 @@ void Arch::remove_pip_pseudo_wires(PipId pip, NetInfo *net)
// This wire is part of net->wires, make sure it has no pip,
// but leave it alone. It will get cleaned up via
// unbindWire.
- if (wire_iter->second.pip != PipId() && wire_iter->second.pip != pip) {
- log_error("Wire %s report source'd from pip %s, which is not %s\n", nameOfWire(wire),
- nameOfPip(wire_iter->second.pip), nameOfPip(pip));
- }
- NPNR_ASSERT(wire_iter->second.pip == PipId() || wire_iter->second.pip == pip);
} else {
// This wire is not in net->wires, update wire_to_net.
#ifdef DEBUG_BINDING
@@ -1756,12 +1751,12 @@ bool Arch::checkPipAvailForNet(PipId pip, NetInfo *net) const
NPNR_ASSERT(src != wire);
NPNR_ASSERT(dst != wire);
- NetInfo *net = getConflictingWireNet(wire);
- if (net != nullptr) {
+ NetInfo *other_net = getConflictingWireNet(wire);
+ if (other_net != nullptr && other_net != net) {
#ifdef DEBUG_BINDING
if (getCtx()->verbose) {
log_info("Pip %s is not available because wire %s is tied to net %s\n", getCtx()->nameOfPip(pip),
- getCtx()->nameOfWire(wire), net->name.c_str(getCtx()));
+ getCtx()->nameOfWire(wire), other_net->name.c_str(getCtx()));
}
#endif
return false;