From 3ce13f676922cb70369fe960ac732133519b60db Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 26 Mar 2021 17:46:10 +0100 Subject: [PATCH] Attempt to get a better picture of mismatching device pins at the presence of device pin swapping --- .../laybasic/layNetlistBrowserModel.cc | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/laybasic/laybasic/layNetlistBrowserModel.cc b/src/laybasic/laybasic/layNetlistBrowserModel.cc index 697bb1c5e..72568aa67 100644 --- a/src/laybasic/laybasic/layNetlistBrowserModel.cc +++ b/src/laybasic/laybasic/layNetlistBrowserModel.cc @@ -530,10 +530,26 @@ static std::pairnormalize_terminal_id (td1->id ()); const db::Net *n2 = model->second_net_for (devices.first->net_for_terminal (terminal_id)); + // this scheme makes a guess what terminal to use when a pair of terminals does not connect + // to matching nets + std::set n2_excluded; + if (! n2) { + for (size_t i = 0; i < device_classes.first->terminal_definitions ().size (); ++i) { + const db::DeviceTerminalDefinition &td = device_classes.first->terminal_definitions () [i]; + if (device_classes.first->normalize_terminal_id (td.id ()) == td1_id_norm) { + const db::Net *n2x = model->second_net_for (devices.first->net_for_terminal (td.id ())); + if (n2x) { + n2_excluded.insert (n2x); + } + } + } + } + for (size_t i = 0; i < device_classes.second->terminal_definitions ().size (); ++i) { const db::DeviceTerminalDefinition &td = device_classes.second->terminal_definitions () [i]; if (device_classes.second->normalize_terminal_id (td.id ()) == td1_id_norm) { - if (devices.second->net_for_terminal (i) == n2) { + const db::Net *n2_actual = devices.second->net_for_terminal (i); + if ((! n2 || n2_actual == n2) && n2_excluded.find (n2_actual) == n2_excluded.end ()) { second_terminal_id = i; break; }