Fix false sensitivity of signals to unrelated interface members

This commit is contained in:
Artur Bieniek
2026-03-30 09:42:51 +01:00
committed by GitHub
parent be6780e44b
commit 55958efbe1
3 changed files with 69 additions and 1 deletions
+5 -1
View File
@@ -109,9 +109,13 @@ findTriggeredIface(const AstVarScope* vscp,
UASSERT_OBJ(ifacep, vscp, "Variable is not sensitive for any interface");
std::vector<AstSenTree*> result;
for (const auto& memberIt : vifMemberTriggered) {
// Interface member variables already identify the exact member that can
// change externally. Sensitizing them to every triggered member of the interface causes
// false feedback paths, e.g. a block reading one signal becoming spuriously sensitive to
// another signal just because both belong to the same interface.
if (memberIt.first.m_memberp != vscp->varp()) continue;
if (memberIt.first.m_ifacep == ifacep) result.push_back(memberIt.second);
}
UASSERT_OBJ(!result.empty(), vscp, "Did not find virtual interface trigger");
return result;
}