Support $monitor and $strobe.

This commit is contained in:
Wilson Snyder
2020-11-29 11:31:38 -05:00
parent 67103d346b
commit 665e8edaff
23 changed files with 548 additions and 22 deletions
+8 -1
View File
@@ -673,6 +673,7 @@ private:
bool m_inClkAss = false; // Underneath AstAssign
bool m_inPre = false; // Underneath AstAssignPre
bool m_inPost = false; // Underneath AstAssignPost
bool m_inPostponed = false; // Underneath AstAssignPostponed
OrderLogicVertex* m_activeSenVxp = nullptr; // Sensitivity vertex
std::deque<OrderUser*> m_orderUserps; // All created OrderUser's for later deletion.
// STATE... for inside process
@@ -1044,7 +1045,8 @@ private:
// We don't want to add extra edges if the logic block has many usages of same var
bool gen = false;
bool con = false;
if (nodep->access().isWriteOrRW()) gen = !(varscp->user4() & VU_GEN);
if (nodep->access().isWriteOrRW() && !m_inPostponed)
gen = !(varscp->user4() & VU_GEN);
if (nodep->access().isReadOrRW()) {
con = !(varscp->user4() & VU_CON);
if ((varscp->user4() & VU_GEN) && !m_inClocked) {
@@ -1174,6 +1176,11 @@ private:
iterateNewStmt(nodep);
m_inPost = false;
}
virtual void visit(AstAlwaysPostponed* nodep) override {
VL_RESTORER(m_inPostponed);
m_inPostponed = true;
iterateNewStmt(nodep);
}
virtual void visit(AstAlways* nodep) override { iterateNewStmt(nodep); }
virtual void visit(AstAlwaysPublic* nodep) override { iterateNewStmt(nodep); }
virtual void visit(AstAssignAlias* nodep) override { iterateNewStmt(nodep); }