Internals: Do not overload AstVar::isPrimaryIO() for sampled value vars

This commit is contained in:
Geza Lore 2026-06-15 09:17:41 +01:00
parent 5ab2bf1ec4
commit a07a980b73
3 changed files with 3 additions and 5 deletions

View File

@ -51,8 +51,6 @@ class SampledVisitor final : public VNVisitor {
AstVar* const newvarp = new AstVar{flp, VVarType::MODULETEMP, newvarname, varp->dtypep()};
m_scopep->modp()->addStmtsp(newvarp);
AstVarScope* const newvscp = new AstVarScope{flp, m_scopep, newvarp};
newvarp->direction(VDirection::INPUT); // Inform V3Sched that it will be driven later
newvarp->primaryIO(true);
newvarp->sampled(true);
vscp->user1p(newvscp);
m_scopep->addVarsp(newvscp);

View File

@ -608,7 +608,7 @@ AstNode* createInputCombLoop(AstNetlist* netlistp, AstCFunc* const initFuncp,
auto it = inp2changedp.find(vscp);
if (it != inp2changedp.end()) {
out.push_back(it->second);
} else if (varp->isPrimaryInish() || varp->isSigUserRWPublic()) {
} else if (varp->isPrimaryInish() || varp->isSigUserRWPublic() || varp->sampled()) {
if (!firstIterTriggerp) {
firstIterTriggerp
= trigKit.newExtraTriggerSenTree(trigKit.vscp(), firstIterationTrigger);

View File

@ -150,8 +150,8 @@ public:
: SchedReplicateVertex{graphp}
, m_vscp{vscp} {
// Top level inputs are
if (varp()->isPrimaryInish() || varp()->isSigUserRWPublic() || varp()->isWrittenByDpi()
|| varp()->sensIfacep() || varp()->isVirtIface()) {
if (varp()->isPrimaryInish() || varp()->isSigUserRWPublic() || varp()->sampled()
|| varp()->isWrittenByDpi() || varp()->sensIfacep() || varp()->isVirtIface()) {
addDrivingRegions(INPUT);
}
// Currently we always execute suspendable processes at the beginning of