diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-06-23 15:58:24 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-06-23 15:58:24 +0200 |
commit | a40d9dc514b680538d0ffa99873974a15bff9e97 (patch) | |
tree | 77bfff89429a52419ae77ce4b57416c4fbf315e5 /ice40/arch.h | |
parent | a1681560a3c46a0b785c33eddd0038f4fd662675 (diff) | |
download | nextpnr-a40d9dc514b680538d0ffa99873974a15bff9e97.tar.gz nextpnr-a40d9dc514b680538d0ffa99873974a15bff9e97.tar.bz2 nextpnr-a40d9dc514b680538d0ffa99873974a15bff9e97.zip |
Improve router ripup handling
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40/arch.h')
-rw-r--r-- | ice40/arch.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/ice40/arch.h b/ice40/arch.h index f13e3f72..ad69363e 100644 --- a/ice40/arch.h +++ b/ice40/arch.h @@ -617,7 +617,18 @@ struct Arch : BaseCtx { assert(wire != WireId()); assert(wire_to_net[wire.index] != IdString()); - nets[wire_to_net[wire.index]]->wires.erase(wire); + + auto &net_wires = nets[wire_to_net[wire.index]]->wires; + auto it = net_wires.find(wire); + assert(it != net_wires.end()); + + auto pip = it->second.pip; + if (pip != PipId()) { + pip_to_net[pip.index] = IdString(); + switches_locked[chip_info->pip_data[pip.index].switch_index] = IdString(); + } + + net_wires.erase(it); wire_to_net[wire.index] = IdString(); } |