From 5a69321be3709b53f98eb70b12d1faa17d628a6f Mon Sep 17 00:00:00 2001 From: Geza Lore Date: Sat, 9 Mar 2024 12:43:09 +0000 Subject: [PATCH] Split V3Order into further part and decouple various components (#4953) Continuing the idea of decoupling the implementations of the various algorithms. The main points: -Move the former "processDomain" stuff, dealing with assigning combinational logic into the relevant sensitivity domains into V3OrderProcessDomains.cpp -Move the parallel code construction in V3OrderParallel.cpp (Could combine this with some parts of V3Partition - those not called from V3Partition::finalize - but that's not for this patch). -Move the serial code construction into V3OrderSerial.cpp -Factored the very small common code between the parallel and serial code construction (processMoveOneLogic) into V3OrderCFuncEmitter.cpp --- src/CMakeLists.txt | 4 +- src/Makefile_obj.in | 3 + src/V3Ast.h | 16 +- src/V3AstNodeOther.h | 5 - src/V3Order.cpp | 872 +--------------- src/V3Order.h | 5 +- src/V3OrderCFuncEmitter.h | 163 +++ src/V3OrderGraphBuilder.cpp | 18 +- src/V3OrderInternal.h | 27 +- src/V3OrderMoveGraph.h | 143 --- src/V3OrderMoveGraphBuilder.h | 11 +- src/V3OrderParallel.cpp | 207 ++++ src/V3OrderProcessDomains.cpp | 245 +++++ src/V3OrderSerial.cpp | 385 ++++++++ src/V3Partition.h | 22 - src/V3PartitionGraph.h | 50 +- src/V3Sched.cpp | 10 +- src/V3SchedPartition.cpp | 1 - src/V3SenExprBuilder.h | 2 - test_regress/t/t_json_only_debugcheck.out | 1094 ++++++++++----------- test_regress/t/t_xml_debugcheck.out | 32 +- 21 files changed, 1718 insertions(+), 1597 deletions(-) create mode 100644 src/V3OrderCFuncEmitter.h delete mode 100644 src/V3OrderMoveGraph.h create mode 100644 src/V3OrderParallel.cpp create mode 100644 src/V3OrderProcessDomains.cpp create mode 100644 src/V3OrderSerial.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 143ae2811..0dd9d1991 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -123,7 +123,6 @@ set(HEADERS V3Order.h V3OrderInternal.h V3OrderGraph.h - V3OrderMoveGraph.h V3OrderMoveGraphBuilder.h V3Os.h V3PairingHeap.h @@ -278,6 +277,9 @@ set(COMMON_SOURCES V3Options.cpp V3Order.cpp V3OrderGraphBuilder.cpp + V3OrderParallel.cpp + V3OrderProcessDomains.cpp + V3OrderSerial.cpp V3Os.cpp V3Param.cpp V3Partition.cpp diff --git a/src/Makefile_obj.in b/src/Makefile_obj.in index 5302ccdf8..8df1de31f 100644 --- a/src/Makefile_obj.in +++ b/src/Makefile_obj.in @@ -266,6 +266,9 @@ RAW_OBJS_PCH_ASTNOMT = \ V3Name.o \ V3Order.o \ V3OrderGraphBuilder.o \ + V3OrderParallel.o \ + V3OrderProcessDomains.o \ + V3OrderSerial.o \ V3Param.o \ V3Partition.o \ V3Premit.o \ diff --git a/src/V3Ast.h b/src/V3Ast.h index 86b1c266f..0126271dd 100644 --- a/src/V3Ast.h +++ b/src/V3Ast.h @@ -323,7 +323,6 @@ public: enum en : uint8_t { // These must be in general -> most specific order, as we sort by it // in V3Const::visit AstSenTree - ET_ILLEGAL, // Involving a variable ET_CHANGED, // Value changed ET_BOTHEDGE, // POSEDGE | NEGEDGE (i.e.: 'edge' in Verilog) @@ -343,8 +342,6 @@ public: enum en m_e; bool clockedStmt() const { static const bool clocked[] = { - false, // ET_ILLEGAL - true, // ET_CHANGED true, // ET_BOTHEDGE true, // ET_POSEDGE @@ -368,20 +365,19 @@ public: case ET_BOTHEDGE: return ET_BOTHEDGE; case ET_POSEDGE: return ET_NEGEDGE; case ET_NEGEDGE: return ET_POSEDGE; - default: UASSERT_STATIC(0, "Inverting bad edgeType()"); + default: UASSERT_STATIC(0, "Inverting bad edgeType()"); return ET_NEGEDGE; } - return VEdgeType::ET_ILLEGAL; } const char* ascii() const { static const char* const names[] - = {"%E-edge", "CHANGED", "BOTH", "POS", "NEG", "EVENT", "TRUE", - "COMBO", "HYBRID", "STATIC", "INITIAL", "FINAL", "NEVER"}; + = {"CHANGED", "BOTH", "POS", "NEG", "EVENT", "TRUE", + "COMBO", "HYBRID", "STATIC", "INITIAL", "FINAL", "NEVER"}; return names[m_e]; } const char* verilogKwd() const { static const char* const names[] - = {"%E-edge", "[changed]", "edge", "posedge", "negedge", "[event]", "[true]", - "*", "[hybrid]", "[static]", "[initial]", "[final]", "[never]"}; + = {"[changed]", "edge", "posedge", "negedge", "[event]", "[true]", + "*", "[hybrid]", "[static]", "[initial]", "[final]", "[never]"}; return names[m_e]; } // Return true iff this and the other have mutually exclusive transitions @@ -397,8 +393,6 @@ public: } return false; } - VEdgeType() - : m_e{ET_ILLEGAL} {} // cppcheck-suppress noExplicitConstructor constexpr VEdgeType(en _e) : m_e{_e} {} diff --git a/src/V3AstNodeOther.h b/src/V3AstNodeOther.h index 89481bd76..3b621ff42 100644 --- a/src/V3AstNodeOther.h +++ b/src/V3AstNodeOther.h @@ -1514,7 +1514,6 @@ class AstSenItem final : public AstNode { VEdgeType m_edgeType; // Edge type public: class Combo {}; // for constructor type-overload selection - class Illegal {}; // for constructor type-overload selection class Static {}; // for constructor type-overload selection class Initial {}; // for constructor type-overload selection class Final {}; // for constructor type-overload selection @@ -1528,9 +1527,6 @@ public: AstSenItem(FileLine* fl, Combo) : ASTGEN_SUPER_SenItem(fl) , m_edgeType{VEdgeType::ET_COMBO} {} - AstSenItem(FileLine* fl, Illegal) - : ASTGEN_SUPER_SenItem(fl) - , m_edgeType{VEdgeType::ET_ILLEGAL} {} AstSenItem(FileLine* fl, Static) : ASTGEN_SUPER_SenItem(fl) , m_edgeType{VEdgeType::ET_STATIC} {} @@ -1562,7 +1558,6 @@ public: bool isStatic() const { return edgeType() == VEdgeType::ET_STATIC; } bool isInitial() const { return edgeType() == VEdgeType::ET_INITIAL; } bool isFinal() const { return edgeType() == VEdgeType::ET_FINAL; } - bool isIllegal() const { return edgeType() == VEdgeType::ET_ILLEGAL; } bool isNever() const { return edgeType() == VEdgeType::ET_NEVER; } }; class AstSenTree final : public AstNode { diff --git a/src/V3Order.cpp b/src/V3Order.cpp index 24ce809e8..980b546b1 100644 --- a/src/V3Order.cpp +++ b/src/V3Order.cpp @@ -73,863 +73,89 @@ #include "V3PchAstNoMT.h" // VL_MT_DISABLED_CODE_UNIT -#include "V3Order.h" - -#include "V3Const.h" -#include "V3EmitV.h" -#include "V3File.h" -#include "V3Graph.h" -#include "V3GraphStream.h" -#include "V3List.h" #include "V3OrderInternal.h" -#include "V3OrderMoveGraph.h" -#include "V3OrderMoveGraphBuilder.h" -#include "V3Partition.h" -#include "V3PartitionGraph.h" #include "V3Sched.h" -#include "V3SenTree.h" -#include "V3SplitVar.h" -#include "V3Stats.h" -#include -#include #include -#include -#include #include VL_DEFINE_DEBUG_FUNCTIONS; -//###################################################################### - -class OrderProcess; - -class OrderMoveDomScope final { - // Information stored for each unique loop, domain & scope trifecta -public: - V3ListEnt m_readyDomScopeE; // List of next ready dom scope - V3List m_readyVertices; // Ready vertices with same domain & scope -private: - bool m_onReadyList = false; // True if DomScope is already on list of ready dom/scopes - const AstSenTree* const m_domainp; // Domain all vertices belong to - const AstScope* const m_scopep; // Scope all vertices belong to - - using DomScopeKey = std::pair; - using DomScopeMap = std::map; - static DomScopeMap s_dsMap; // Structure registered for each dom/scope pairing - -public: - OrderMoveDomScope(const AstSenTree* domainp, const AstScope* scopep) - : m_domainp{domainp} - , m_scopep{scopep} {} - OrderMoveDomScope* readyDomScopeNextp() const { return m_readyDomScopeE.nextp(); } - const AstSenTree* domainp() const { return m_domainp; } - const AstScope* scopep() const { return m_scopep; } - // Check the domScope is on ready list, add if not - void ready(OrderProcess* opp); - // Mark one vertex as finished, remove from ready list if done - void movedVertex(OrderProcess* opp, OrderMoveVertex* vertexp); - // STATIC MEMBERS (for lookup) - static void clear() { - for (const auto& itr : s_dsMap) delete itr.second; - s_dsMap.clear(); - } - V3List& readyVertices() { return m_readyVertices; } - static OrderMoveDomScope* findCreate(const AstSenTree* domainp, const AstScope* scopep) { - const DomScopeKey key = std::make_pair(domainp, scopep); - const auto pair = s_dsMap.emplace(key, nullptr); - if (pair.second) pair.first->second = new OrderMoveDomScope{domainp, scopep}; - return pair.first->second; - } - string name() const { - return string{"MDS:"} + " d=" + cvtToHex(domainp()) + " s=" + cvtToHex(scopep()); - } -}; - -OrderMoveDomScope::DomScopeMap OrderMoveDomScope::s_dsMap; - -std::ostream& operator<<(std::ostream& lhs, const OrderMoveDomScope& rhs) { - lhs << rhs.name(); - return lhs; -} - -// ###################################################################### -// OrderMoveVertexMaker and related - -class OrderMoveVertexMaker final - : public V3OrderMoveGraphBuilder::MoveVertexMaker { - // MEMBERS - V3Graph* m_pomGraphp; - V3List* m_pomWaitingp; - -public: - // CONSTRUCTORS - OrderMoveVertexMaker(V3Graph* pomGraphp, V3List* pomWaitingp) - : m_pomGraphp{pomGraphp} - , m_pomWaitingp{pomWaitingp} {} - // METHODS - OrderMoveVertex* makeVertexp(OrderLogicVertex* lvertexp, const OrderEitherVertex*, - const AstSenTree* domainp) override { - OrderMoveVertex* const resultp = new OrderMoveVertex{m_pomGraphp, lvertexp}; - AstScope* const scopep = lvertexp ? lvertexp->scopep() : nullptr; - resultp->domScopep(OrderMoveDomScope::findCreate(domainp, scopep)); - resultp->m_pomWaitingE.pushBack(*m_pomWaitingp, resultp); - return resultp; - } - -private: - VL_UNCOPYABLE(OrderMoveVertexMaker); -}; - -class OrderMTaskMoveVertexMaker final - : public V3OrderMoveGraphBuilder::MoveVertexMaker { - V3Graph* m_pomGraphp; - -public: - explicit OrderMTaskMoveVertexMaker(V3Graph* pomGraphp) - : m_pomGraphp{pomGraphp} {} - MTaskMoveVertex* makeVertexp(OrderLogicVertex* lvertexp, const OrderEitherVertex* varVertexp, - const AstSenTree* domainp) override { - return new MTaskMoveVertex{m_pomGraphp, lvertexp, varVertexp, domainp}; - } - -private: - VL_UNCOPYABLE(OrderMTaskMoveVertexMaker); -}; - -class OrderVerticesByDomainThenScope final { - PartPtrIdMap m_ids; - -public: - bool operator()(const V3GraphVertex* lhsp, const V3GraphVertex* rhsp) const { - const MTaskMoveVertex* const l_vxp = static_cast(lhsp); - const MTaskMoveVertex* const r_vxp = static_cast(rhsp); - uint64_t l_id = m_ids.findId(l_vxp->domainp()); - uint64_t r_id = m_ids.findId(r_vxp->domainp()); - if (l_id < r_id) return true; - if (l_id > r_id) return false; - l_id = m_ids.findId(l_vxp->scopep()); - r_id = m_ids.findId(r_vxp->scopep()); - return l_id < r_id; - } -}; - -struct MTaskVxIdLessThan final { - // Sort vertex's, which must be AbstractMTask's, into a deterministic - // order by comparing their serial IDs. - bool operator()(const V3GraphVertex* lhsp, const V3GraphVertex* rhsp) const { - const AbstractMTask* const lmtaskp = static_cast(lhsp); - const AbstractMTask* const rmtaskp = static_cast(rhsp); - return lmtaskp->id() < rmtaskp->id(); - } -}; - -//###################################################################### -// OrderProcess class - -class OrderProcess final { - // NODE STATE - // AstNode::user4 -> Used by V3Const::constifyExpensiveEdit - - // STATE - OrderGraph& m_graph; // The ordering graph - - // Map from Trigger reference AstSenItem to the original AstSenTree - const std::unordered_map& m_trigToSen; - - // This is a function provided by the invoker of the ordering that can provide additional - // sensitivity expression that when triggered indicates the passed AstVarScope might have - // changed external to the code being ordered. - const V3Order::ExternalDomainsProvider m_externalDomains; - - SenTreeFinder m_finder; // Global AstSenTree manager - AstSenTree* const m_deleteDomainp; // Dummy AstSenTree indicating needs deletion - const string m_tag; // Substring to add to generated names - const bool m_slow; // Ordering slow code - std::vector m_result; // The result nodes (~statements) in their sequential order - - AstCFunc* m_pomNewFuncp = nullptr; // Current function being created - int m_pomNewStmts = 0; // Statements in function being created - V3Graph m_pomGraph; // Graph of logic elements to move - V3List m_pomWaiting; // List of nodes needing inputs to become ready - friend class OrderMoveDomScope; - V3List m_pomReadyDomScope; // List of ready domain/scope pairs, by loopId - std::map, unsigned> m_funcNums; // Function ordinals - VNDeleter m_deleter; // Used to delay deletion of nodes - - // METHODS - - void process(bool multiThreaded); - void processDomains(); - void processDomainsIterate(OrderEitherVertex* vertexp); - void processEdgeReport(); - - // processMove* routines schedule serial execution - void processMove(); - void processMoveClear(); - void processMoveBuildGraph(); - void processMovePrepReady(); - void processMoveReadyOne(OrderMoveVertex* vertexp); - void processMoveDoneOne(OrderMoveVertex* vertexp); - void processMoveOne(OrderMoveVertex* vertexp, const OrderMoveDomScope* domScopep, int level); - AstActive* processMoveOneLogic(const OrderLogicVertex* lvertexp, AstCFunc*& newFuncpr, - int& newStmtsr); - - // processMTask* routines schedule threaded execution - struct MTaskState final { - AstMTaskBody* m_mtaskBodyp = nullptr; - std::list m_logics; - ExecMTask* m_execMTaskp = nullptr; - MTaskState() = default; - }; - void processMTasks(); - - string cfuncName(AstNodeModule* modp, AstSenTree* domainp, AstScope* scopep, - AstNode* forWhatp) { - string name = "_" + m_tag; - name += domainp->isMulti() ? "_comb" : "_sequent"; - name = name + "__" + scopep->nameDotless(); - const unsigned funcnum = m_funcNums[{modp, name}]++; - name = name + "__" + cvtToStr(funcnum); - if (v3Global.opt.profCFuncs()) { - name += "__PROF__" + forWhatp->fileline()->profileFuncname(); - } - return name; - } - - // Make a domain that merges the two domains - AstSenTree* combineDomains(AstSenTree* ap, AstSenTree* bp) { - if (ap == m_deleteDomainp) return bp; - UASSERT_OBJ(bp != m_deleteDomainp, bp, "Should not be delete domain"); - AstSenTree* const senTreep = ap->cloneTree(false); - senTreep->addSensesp(bp->sensesp()->cloneTree(true)); - V3Const::constifyExpensiveEdit(senTreep); // Remove duplicates - senTreep->multi(true); // Comment that it was made from 2 domains - AstSenTree* const resultp = m_finder.getSenTree(senTreep); - VL_DO_DANGLING(senTreep->deleteTree(), senTreep); // getSenTree clones, so delete this - return resultp; - } - - // Only for member initialization in constructor - static AstSenTree* makeDeleteDomainSenTree(FileLine* fl) { - return new AstSenTree{fl, new AstSenItem{fl, AstSenItem::Illegal{}}}; - } - - // CONSTRUCTOR - OrderProcess(AstNetlist* netlistp, OrderGraph& graph, - const std::unordered_map& trigToSen, - const string& tag, bool slow, - const V3Order::ExternalDomainsProvider& externalDomains) - : m_graph{graph} - , m_trigToSen{trigToSen} - , m_externalDomains{externalDomains} - , m_finder{netlistp} - , m_deleteDomainp{makeDeleteDomainSenTree(netlistp->fileline())} - , m_tag{tag} - , m_slow{slow} { - m_deleter.pushDeletep(m_deleteDomainp); - } - - ~OrderProcess() = default; - -public: - // Order the logic - static std::vector - main(AstNetlist* netlistp, OrderGraph& graph, - const std::unordered_map& trigToSen, - const string& tag, bool parallel, bool slow, - const V3Order::ExternalDomainsProvider& externalDomains) { - OrderProcess visitor{netlistp, graph, trigToSen, tag, slow, externalDomains}; - visitor.process(parallel); - return std::move(visitor.m_result); - } -}; - -//###################################################################### -// OrderMoveDomScope methods - -// Check the domScope is on ready list, add if not -void OrderMoveDomScope::ready(OrderProcess* opp) { - if (!m_onReadyList) { - m_onReadyList = true; - m_readyDomScopeE.pushBack(opp->m_pomReadyDomScope, this); - } -} - -// Mark one vertex as finished, remove from ready list if done -void OrderMoveDomScope::movedVertex(OrderProcess* opp, OrderMoveVertex* vertexp) { - UASSERT_OBJ(m_onReadyList, vertexp, - "Moving vertex from ready when nothing was on que as ready."); - if (m_readyVertices.empty()) { // Else more work to get to later - m_onReadyList = false; - m_readyDomScopeE.unlink(opp->m_pomReadyDomScope, this); - } -} - -//###################################################################### - -void OrderProcess::processDomains() { - for (V3GraphVertex* itp = m_graph.verticesBeginp(); itp; itp = itp->verticesNextp()) { - UASSERT(itp, "Vertex should not be null"); - OrderEitherVertex* const vertexp = itp->as(); - processDomainsIterate(vertexp); - } -} - -void OrderProcess::processDomainsIterate(OrderEitherVertex* vertexp) { - // The graph routines have already sorted the vertexes and edges into best->worst order - // Assign clock domains to each signal. - // Sequential logic is forced into the same sequential domain. - // Combo logic may be pushed into a seq domain if all its inputs are the same domain, - // else, if all inputs are from flops, it's end-of-sequential code - // else, it's full combo code - if (vertexp->domainp()) return; // Already processed, or sequential logic - - UINFO(5, " pdi: " << vertexp << endl); - AstSenTree* domainp = nullptr; - if (OrderLogicVertex* const lvtxp = vertexp->cast()) { - domainp = lvtxp->hybridp(); - } - - std::vector externalDomainps; - - for (V3GraphEdge* edgep = vertexp->inBeginp(); edgep; edgep = edgep->inNextp()) { - OrderEitherVertex* const fromVertexp = static_cast(edgep->fromp()); - if (edgep->weight() && fromVertexp->domainMatters()) { - AstSenTree* fromDomainp = fromVertexp->domainp(); - UASSERT(!fromDomainp->hasCombo(), "There should be no need for combinational domains"); - - if (OrderVarVertex* const varVtxp = fromVertexp->cast()) { - AstVarScope* const vscp = varVtxp->vscp(); - // Add in any external domains - externalDomainps.clear(); - m_externalDomains(vscp, externalDomainps); - for (AstSenTree* const externalDomainp : externalDomainps) { - UASSERT_OBJ(!externalDomainp->hasCombo(), vscp, - "There should be no need for combinational domains"); - fromDomainp = combineDomains(fromDomainp, externalDomainp); - } - } - - // Irrelevant input vertex (never triggered) - if (fromDomainp == m_deleteDomainp) continue; - - // First input to this vertex - if (!domainp) domainp = fromDomainp; - - // Make a domain that merges the two domains - if (domainp != fromDomainp) domainp = combineDomains(domainp, fromDomainp); - } - } - - // If nothing triggers this vertex, we can delete the corresponding logic - if (!domainp) domainp = m_deleteDomainp; - - // Set the domain of the vertex - vertexp->domainp(domainp); - UINFO(5, " done d=" << cvtToHex(vertexp->domainp()) - << (domainp == m_deleteDomainp ? " [DEL]" - : vertexp->domainp()->hasCombo() ? " [COMB]" - : vertexp->domainp()->isMulti() ? " [MULT]" - : "") - << " " << vertexp << endl); -} - -//###################################################################### -// OrderProcess - Move graph construction - -void OrderProcess::processEdgeReport() { - // Make report of all signal names and what clock edges they have - const string filename = v3Global.debugFilename(m_tag + "_order_edges.txt"); - const std::unique_ptr logp{V3File::new_ofstream(filename)}; - if (logp->fail()) v3fatal("Can't write " << filename); - - std::deque report; - - // Rebuild the trigger to original AstSenTree map using equality key comparison, as - // merging domains have created new AstSenTree instances which are not in the map - std::unordered_map, const AstSenTree*> trigToSen; - for (const auto& pair : m_trigToSen) trigToSen.emplace(*pair.first, pair.second); - - for (V3GraphVertex* itp = m_graph.verticesBeginp(); itp; itp = itp->verticesNextp()) { - if (OrderVarVertex* const vvertexp = itp->cast()) { - string name(vvertexp->vscp()->prettyName()); - if (itp->is()) { - name += " {PRE}"; - } else if (itp->is()) { - name += " {POST}"; - } else if (itp->is()) { - name += " {PORD}"; - } - std::ostringstream os; - os.setf(std::ios::left); - os << " " << cvtToHex(vvertexp->vscp()) << " " << std::setw(50) << name << " "; - AstSenTree* const senTreep = vvertexp->domainp(); - if (senTreep == m_deleteDomainp) { - os << "DELETED"; - } else { - for (AstSenItem* senItemp = senTreep->sensesp(); senItemp; - senItemp = VN_AS(senItemp->nextp(), SenItem)) { - if (senItemp != senTreep->sensesp()) os << " or "; - const auto it = trigToSen.find(*senItemp); - if (it != trigToSen.end()) { - V3EmitV::verilogForTree(it->second, os); - } else { - V3EmitV::verilogForTree(senItemp, os); - } - } - } - report.push_back(os.str()); - } - } - - *logp << "Signals and their clock domains:\n"; - stable_sort(report.begin(), report.end()); - for (const string& i : report) *logp << i << '\n'; -} - -void OrderProcess::processMoveClear() { - OrderMoveDomScope::clear(); - m_pomWaiting.reset(); - m_pomReadyDomScope.reset(); - m_pomGraph.clear(); -} - -void OrderProcess::processMoveBuildGraph() { - // Build graph of only vertices - UINFO(5, " MoveBuildGraph\n"); - processMoveClear(); - // Vertex::user->OrderMoveVertex*, last edge added or nullptr=none - m_pomGraph.userClearVertices(); - - OrderMoveVertexMaker createOrderMoveVertex(&m_pomGraph, &m_pomWaiting); - V3OrderMoveGraphBuilder serialPMBG(&m_graph, &m_pomGraph, m_trigToSen, - &createOrderMoveVertex); - serialPMBG.build(); -} - -//###################################################################### -// OrderVisitor - Moving - -void OrderProcess::processMove() { - // The graph routines have already sorted the vertexes and edges into best->worst order - // Make a new waiting graph with only OrderLogicVertex's - // (Order is preserved in the recreation so the sorting is preserved) - // Move any node with all inputs ready to a "ready" graph mapped by domain and then scope - // While waiting graph ! empty (and also known: something in ready graph) - // For all scopes in domain of top ready vertex - // For all vertexes in domain&scope of top ready vertex - // Make ordered activation block for this module - // Add that new activation to the list of calls to make. - // Move logic to ordered active - // Any children that have all inputs now ready move from waiting->ready graph - // (This may add nodes the for loop directly above needs to detext) - processMovePrepReady(); - - // New domain... another loop - UINFO(5, " MoveIterate\n"); - while (!m_pomReadyDomScope.empty()) { - // Start with top node on ready list's domain & scope - OrderMoveDomScope* domScopep = m_pomReadyDomScope.begin(); - OrderMoveVertex* const topVertexp - = domScopep->readyVertices().begin(); // lintok-begin-on-ref - UASSERT(topVertexp, "domScope on ready list without any nodes ready under it"); - // Work on all scopes ready inside this domain - while (domScopep) { - UINFO(6, " MoveDomain l=" << domScopep->domainp() << endl); - // Process all nodes ready under same domain & scope - m_pomNewFuncp = nullptr; - while (OrderMoveVertex* vertexp - = domScopep->readyVertices().begin()) { // lintok-begin-on-ref - processMoveOne(vertexp, domScopep, 1); - } - // Done with scope/domain pair, pick new scope under same domain, or nullptr if none - // left - OrderMoveDomScope* domScopeNextp = nullptr; - for (OrderMoveDomScope* huntp = m_pomReadyDomScope.begin(); huntp; - huntp = huntp->readyDomScopeNextp()) { - if (huntp->domainp() == domScopep->domainp()) { - domScopeNextp = huntp; - break; - } - } - domScopep = domScopeNextp; - } - } - UASSERT(m_pomWaiting.empty(), - "Didn't converge; nodes waiting, none ready, perhaps some input activations lost."); - // Cleanup memory - processMoveClear(); -} - -void OrderProcess::processMovePrepReady() { - // Make list of ready nodes - UINFO(5, " MovePrepReady\n"); - for (OrderMoveVertex* vertexp = m_pomWaiting.begin(); vertexp;) { - OrderMoveVertex* const nextp = vertexp->pomWaitingNextp(); - if (vertexp->isWait() && vertexp->inEmpty()) processMoveReadyOne(vertexp); - vertexp = nextp; - } -} - -void OrderProcess::processMoveReadyOne(OrderMoveVertex* vertexp) { - // Recursive! - // Move one node from waiting to ready list - vertexp->setReady(); - // Remove node from waiting list - vertexp->m_pomWaitingE.unlink(m_pomWaiting, vertexp); - if (vertexp->logicp()) { - // Add to ready list (indexed by domain and scope) - vertexp->m_readyVerticesE.pushBack(vertexp->domScopep()->m_readyVertices, vertexp); - vertexp->domScopep()->ready(this); - } else { - // vertexp represents a non-logic vertex. - // Recurse to mark its following neighbors ready. - processMoveDoneOne(vertexp); - } -} - -void OrderProcess::processMoveDoneOne(OrderMoveVertex* vertexp) { - // Move one node from ready to completion - vertexp->setMoved(); - // Unlink from ready lists - if (vertexp->logicp()) { - vertexp->m_readyVerticesE.unlink(vertexp->domScopep()->m_readyVertices, vertexp); - vertexp->domScopep()->movedVertex(this, vertexp); - } - // Don't need to add it to another list, as we're done with it - // Mark our outputs as one closer to ready - for (V3GraphEdge *edgep = vertexp->outBeginp(), *nextp; edgep; edgep = nextp) { - nextp = edgep->outNextp(); - OrderMoveVertex* const toVertexp = static_cast(edgep->top()); - UINFO(9, " Clear to " << (toVertexp->inEmpty() ? "[EMP] " : " ") << toVertexp - << endl); - // Delete this edge - VL_DO_DANGLING(edgep->unlinkDelete(), edgep); - if (toVertexp->inEmpty()) { - // If destination node now has all inputs resolved; recurse to move that vertex - // This is thus depth first (before width) which keeps the - // resulting executable's d-cache happy. - processMoveReadyOne(toVertexp); - } - } -} - -void OrderProcess::processMoveOne(OrderMoveVertex* vertexp, const OrderMoveDomScope* domScopep, - int level) { - UASSERT_OBJ(vertexp->domScopep() == domScopep, vertexp, "Domain mismatch; list misbuilt?"); - const OrderLogicVertex* const lvertexp = vertexp->logicp(); - const AstScope* const scopep = lvertexp->scopep(); - UINFO(5, " POSmove l" << std::setw(3) << level << " d=" << cvtToHex(lvertexp->domainp()) - << " s=" << cvtToHex(scopep) << " " << lvertexp << endl); - AstActive* const newActivep - = processMoveOneLogic(lvertexp, m_pomNewFuncp /*ref*/, m_pomNewStmts /*ref*/); - if (newActivep) m_result.push_back(newActivep); - processMoveDoneOne(vertexp); -} - -AstActive* OrderProcess::processMoveOneLogic(const OrderLogicVertex* lvertexp, - AstCFunc*& newFuncpr, int& newStmtsr) { - AstActive* activep = nullptr; - AstScope* const scopep = lvertexp->scopep(); - AstSenTree* const domainp = lvertexp->domainp(); - AstNode* nodep = lvertexp->nodep(); - AstNodeModule* const modp = scopep->modp(); - UASSERT(modp, "nullptr"); - - // We are move the logic into a CFunc, so unlink it from the AstActive - nodep->unlinkFrBack(); - - // Process procedures per statement (unless profCFuncs), so we can split CFuncs within - // procedures. Everything else is handled in one go - bool suspendable = false; - bool needProcess = false; - bool slow = m_slow; - if (AstNodeProcedure* const procp = VN_CAST(nodep, NodeProcedure)) { - suspendable = procp->isSuspendable(); - needProcess = procp->needProcess(); - if (suspendable) slow = slow && !VN_IS(procp, Always); - nodep = procp->stmtsp(); - m_deleter.pushDeletep(procp); - } - - // Put suspendable processes into individual functions on their own - if (suspendable) newFuncpr = nullptr; - - // When profCFuncs, create a new function for all logic block - if (v3Global.opt.profCFuncs()) newFuncpr = nullptr; - - while (nodep) { - // Split the CFunc if too large (but not when profCFuncs) - if (!suspendable && !v3Global.opt.profCFuncs() - && (v3Global.opt.outputSplitCFuncs() - && v3Global.opt.outputSplitCFuncs() < newStmtsr)) { - // Put every statement into a unique function to ease profiling or reduce function - // size - newFuncpr = nullptr; - } - if (!newFuncpr && domainp != m_deleteDomainp) { - const string name = cfuncName(modp, domainp, scopep, nodep); - newFuncpr - = new AstCFunc{nodep->fileline(), name, scopep, suspendable ? "VlCoroutine" : ""}; - if (needProcess) newFuncpr->setNeedProcess(); - newFuncpr->isStatic(false); - newFuncpr->isLoose(true); - newFuncpr->slow(slow); - newStmtsr = 0; - scopep->addBlocksp(newFuncpr); - // Create top call to it - AstCCall* const callp = new AstCCall{nodep->fileline(), newFuncpr}; - callp->dtypeSetVoid(); - // Where will we be adding the call? - AstActive* const newActivep = new AstActive{nodep->fileline(), name, domainp}; - newActivep->addStmtsp(callp->makeStmt()); - if (!activep) { - activep = newActivep; - } else { - activep->addNext(newActivep); - } - UINFO(6, " New " << newFuncpr << endl); - } - - AstNode* const nextp = nodep->nextp(); - // When processing statements in a procedure, unlink the current statement - if (nodep->backp()) nodep->unlinkFrBack(); - - if (domainp == m_deleteDomainp) { - VL_DO_DANGLING(m_deleter.pushDeletep(nodep), nodep); - } else { - newFuncpr->addStmtsp(nodep); - // Add in the number of nodes we're adding - if (v3Global.opt.outputSplitCFuncs()) newStmtsr += nodep->nodeCount(); - } - - nodep = nextp; - } - // Put suspendable processes into individual functions on their own - if (suspendable) newFuncpr = nullptr; - - return activep; -} - -void OrderProcess::processMTasks() { - // For nondeterminism debug: - V3Partition::hashGraphDebug(&m_graph, "V3Order's m_graph"); - - // We already produced a graph of every var, input, and logic - // block and all dependencies; this is 'm_graph'. - // - // Now, starting from m_graph, make a slightly-coarsened graph representing - // only logic, and discarding edges we know we can ignore. - // This is quite similar to the 'm_pomGraph' of the serial code gen: - V3Graph logicGraph; - { - OrderMTaskMoveVertexMaker create_mtask_vertex(&logicGraph); - V3OrderMoveGraphBuilder mtask_pmbg(&m_graph, &logicGraph, m_trigToSen, - &create_mtask_vertex); - mtask_pmbg.build(); - } - - // Needed? We do this for m_pomGraph in serial mode, so do it here too: - logicGraph.removeRedundantEdgesMax(&V3GraphEdge::followAlwaysTrue); - - // Partition logicGraph into LogicMTask's. The partitioner will annotate - // each vertex in logicGraph with a 'color' which is really an mtask ID - // in this context. - V3Partition partitioner{&m_graph, &logicGraph}; - V3Graph mtasks; - partitioner.go(&mtasks); - - std::unordered_map mtaskStates; - - // Iterate through the entire logicGraph. For each logic node, - // attach it to a per-MTask ordered list of logic nodes. - // This is the order we'll execute logic nodes within the MTask. - // - // MTasks may span scopes and domains, so sort by both here: - GraphStream emit_logic{&logicGraph}; - const V3GraphVertex* moveVxp; - while ((moveVxp = emit_logic.nextp())) { - const MTaskMoveVertex* const movep = static_cast(moveVxp); - // Only care about logic vertices - if (!movep->logicp()) continue; - - const unsigned mtaskId = movep->color(); - UASSERT(mtaskId > 0, "Every MTaskMoveVertex should have an mtask assignment >0"); - - // Add this logic to the per-mtask order - mtaskStates[mtaskId].m_logics.push_back(movep->logicp()); - - // Since we happen to be iterating over every logic node, - // take this opportunity to annotate each AstVar with the id's - // of mtasks that consume it and produce it. We'll use this - // information in V3EmitC when we lay out var's in memory. - const OrderLogicVertex* const logicp = movep->logicp(); - for (const V3GraphEdge* edgep = logicp->inBeginp(); edgep; edgep = edgep->inNextp()) { - const OrderVarVertex* const pre_varp = edgep->fromp()->cast(); - if (!pre_varp) continue; - AstVar* const varp = pre_varp->vscp()->varp(); - // varp depends on logicp, so logicp produces varp, - // and vice-versa below - varp->addProducingMTaskId(mtaskId); - } - for (const V3GraphEdge* edgep = logicp->outBeginp(); edgep; edgep = edgep->outNextp()) { - const OrderVarVertex* const post_varp = edgep->top()->cast(); - if (!post_varp) continue; - AstVar* const varp = post_varp->vscp()->varp(); - varp->addConsumingMTaskId(mtaskId); - } - // TODO? We ignore IO vars here, so those will have empty mtask - // signatures. But we could also give those mtask signatures. - } - - // Create the AstExecGraph node which represents the execution - // of the MTask graph. - FileLine* const rootFlp = v3Global.rootp()->fileline(); - AstExecGraph* const execGraphp = new AstExecGraph{rootFlp, m_tag}; - m_result.push_back(execGraphp); - - // Create CFuncs and bodies for each MTask. - GraphStream emit_mtasks(&mtasks); - const V3GraphVertex* mtaskVxp; - while ((mtaskVxp = emit_mtasks.nextp())) { - const AbstractLogicMTask* const mtaskp = static_cast(mtaskVxp); - - // Create a body for this mtask - AstMTaskBody* const bodyp = new AstMTaskBody{rootFlp}; - MTaskState& state = mtaskStates[mtaskp->id()]; - state.m_mtaskBodyp = bodyp; - - // Create leaf CFunc's to run this mtask's logic, - // and create a set of AstActive's to call those CFuncs. - // Add the AstActive's into the AstMTaskBody. - const AstSenTree* last_domainp = nullptr; - AstCFunc* leafCFuncp = nullptr; - int leafStmts = 0; - for (const OrderLogicVertex* logicp : state.m_logics) { - if (logicp->domainp() != last_domainp) { - // Start a new leaf function. - leafCFuncp = nullptr; - } - last_domainp = logicp->domainp(); - - AstActive* const newActivep - = processMoveOneLogic(logicp, leafCFuncp /*ref*/, leafStmts /*ref*/); - if (newActivep) bodyp->addStmtsp(newActivep); - } - - // Translate the LogicMTask graph into the corresponding ExecMTask - // graph, which will outlive V3Order and persist for the remainder - // of verilator's processing. - // - The LogicMTask graph points to MTaskMoveVertex's - // and OrderLogicVertex's which are ephemeral to V3Order. - // - The ExecMTask graph and the AstMTaskBody's produced here - // persist until code generation time. - V3Graph* const depGraphp = execGraphp->depGraphp(); - state.m_execMTaskp = new ExecMTask{depGraphp, bodyp, mtaskp->id()}; - // Cross-link each ExecMTask and MTaskBody - // Q: Why even have two objects? - // A: One is an AstNode, the other is a GraphVertex, - // to combine them would involve multiple inheritance... - state.m_mtaskBodyp->execMTaskp(state.m_execMTaskp); - for (V3GraphEdge* inp = mtaskp->inBeginp(); inp; inp = inp->inNextp()) { - const V3GraphVertex* fromVxp = inp->fromp(); - const AbstractLogicMTask* const fromp - = static_cast(fromVxp); - const MTaskState& fromState = mtaskStates[fromp->id()]; - new V3GraphEdge{depGraphp, fromState.m_execMTaskp, state.m_execMTaskp, 1}; - } - execGraphp->addMTaskBodiesp(bodyp); - } -} - -//###################################################################### -// OrderVisitor - Top processing - -void OrderProcess::process(bool multiThreaded) { +void V3Order::orderOrderGraph(OrderGraph& graph, const std::string& tag) { // Dump data - if (dumpGraphLevel()) m_graph.dumpDotFilePrefixed(m_tag + "_orderg_pre"); + if (dumpGraphLevel()) graph.dumpDotFilePrefixed(tag + "_orderg_pre"); - // Break cycles. Each strongly connected subgraph (including cutable - // edges) will have its own color, and corresponds to a loop in the - // original graph. However the new graph will be acyclic (the removed - // edges are actually still there, just with weight 0). - UINFO(2, " Acyclic and Order...\n"); - m_graph.acyclic(&V3GraphEdge::followAlwaysTrue); - if (dumpGraphLevel()) m_graph.dumpDotFilePrefixed(m_tag + "_orderg_acyc"); + // Break cycles. Note that the OrderGraph only contains cuttable cycles + // (soft constraints). Actual logic loops must have been eliminated by + // the introduction of Hybid sensitivity expressions, before invoking + // ordering (e.g. in V3SchedAcyclic). + graph.acyclic(&V3GraphEdge::followAlwaysTrue); + if (dumpGraphLevel()) graph.dumpDotFilePrefixed(tag + "_orderg_acyc"); - // Assign ranks so we know what to follow - // Then, sort vertices and edges by that ordering - m_graph.order(); - if (dumpGraphLevel()) m_graph.dumpDotFilePrefixed(m_tag + "_orderg_order"); - - // Assign logic vertices to new domains - UINFO(2, " Domains...\n"); - processDomains(); - if (dumpGraphLevel()) m_graph.dumpDotFilePrefixed(m_tag + "_orderg_domain"); - - if (dumpLevel()) processEdgeReport(); - - if (!multiThreaded) { - UINFO(2, " Construct Move Graph...\n"); - processMoveBuildGraph(); - // Different prefix (ordermv) as it's not the same graph - if (dumpGraphLevel() >= 4) m_pomGraph.dumpDotFilePrefixed(m_tag + "_ordermv_start"); - m_pomGraph.removeRedundantEdgesMax(&V3GraphEdge::followAlwaysTrue); - if (dumpGraphLevel() >= 4) m_pomGraph.dumpDotFilePrefixed(m_tag + "_ordermv_simpl"); - - UINFO(2, " Move...\n"); - processMove(); - } else { - UINFO(2, " Set up mtasks...\n"); - processMTasks(); - } - - // Dump data - if (dumpGraphLevel()) m_graph.dumpDotFilePrefixed(m_tag + "_orderg_done"); + // Assign ranks so we know what to follow, then sort vertices and edges by that ordering + graph.order(); + if (dumpGraphLevel()) graph.dumpDotFilePrefixed(tag + "_orderg_order"); } //###################################################################### AstCFunc* V3Order::order(AstNetlist* netlistp, // const std::vector& logic, // - const std::unordered_map& trigToSen, + const V3Order::TrigToSenMap& trigToSen, const string& tag, // bool parallel, // bool slow, // const ExternalDomainsProvider& externalDomains) { - // Order the code - const std::unique_ptr graph = buildOrderGraph(netlistp, logic, trigToSen); - const auto& nodeps - = OrderProcess::main(netlistp, *graph, trigToSen, tag, parallel, slow, externalDomains); + FileLine* const flp = netlistp->fileline(); // Create the result function - AstScope* const scopeTopp = netlistp->topScopep()->scopep(); - FileLine* const flp = netlistp->fileline(); - AstCFunc* const funcp = new AstCFunc{flp, "_eval_" + tag, scopeTopp, ""}; - funcp->dontCombine(true); - funcp->isStatic(false); - funcp->isLoose(true); - funcp->slow(slow); - funcp->isConst(false); - funcp->declPrivate(true); - scopeTopp->addBlocksp(funcp); + AstCFunc* const funcp = [&]() { + AstScope* const scopeTopp = netlistp->topScopep()->scopep(); + AstCFunc* const resp = new AstCFunc{flp, "_eval_" + tag, scopeTopp, ""}; + resp->dontCombine(true); + resp->isStatic(false); + resp->isLoose(true); + resp->slow(slow); + resp->isConst(false); + resp->declPrivate(true); + scopeTopp->addBlocksp(resp); + return resp; + }(); if (v3Global.opt.profExec()) { funcp->addStmtsp(new AstCStmt{flp, "VL_EXEC_TRACE_ADD_RECORD(vlSymsp).sectionPush(\"func " + tag + "\");\n"}); } - // Add ordered statements to the result function - for (AstNode* const nodep : nodeps) funcp->addStmtsp(nodep); + // Build the OrderGraph + const std::unique_ptr graph = buildOrderGraph(netlistp, logic, trigToSen); + // Order it + orderOrderGraph(*graph, tag); + // Assign sensitivity domains to combinational logic + processDomains(netlistp, *graph, tag, trigToSen, externalDomains); + + if (parallel) { + // Construct the parallel ExecGraph + AstExecGraph* const execGraphp = createParallel(*graph, tag, trigToSen, slow); + // Add the ExecGraph to the result function. + funcp->addStmtsp(execGraphp); + } else { + // Construct the serial code + const std::vector activeps = createSerial(*graph, tag, trigToSen, slow); + // Add the resulting Active blocks to the result function + for (AstNode* const nodep : activeps) funcp->addStmtsp(nodep); + } + + // Dump data + if (dumpGraphLevel()) graph->dumpDotFilePrefixed(tag + "_orderg_done"); + + // Dispose of the remnants of the inputs + for (auto* const lbsp : logic) lbsp->deleteActives(); if (v3Global.opt.profExec()) { funcp->addStmtsp(new AstCStmt{flp, "VL_EXEC_TRACE_ADD_RECORD(vlSymsp).sectionPop();\n"}); } - // Dispose of the remnants of the inputs - for (auto* const lbsp : logic) lbsp->deleteActives(); - // Done return funcp; } diff --git a/src/V3Order.h b/src/V3Order.h index dd7c42255..0300256e4 100644 --- a/src/V3Order.h +++ b/src/V3Order.h @@ -40,12 +40,15 @@ struct LogicByScope; namespace V3Order { +// Callable to add extra external Triggers to a variable using ExternalDomainsProvider = std::function&)>; +// Map from Trigger expression to original Sensitivity tree +using TrigToSenMap = std::unordered_map; AstCFunc* order( AstNetlist* netlistp, // const std::vector& logic, // - const std::unordered_map& trigToSen, + const TrigToSenMap& trigToSen, // const string& tag, // bool parallel, // bool slow, // diff --git a/src/V3OrderCFuncEmitter.h b/src/V3OrderCFuncEmitter.h new file mode 100644 index 000000000..ed0c0d4db --- /dev/null +++ b/src/V3OrderCFuncEmitter.h @@ -0,0 +1,163 @@ +// -*- mode: C++; c-file-style: "cc-mode" -*- +//************************************************************************* +// DESCRIPTION: Verilator: Block code ordering +// +// Code available from: https://verilator.org +// +//************************************************************************* +// +// Copyright 2003-2024 by Wilson Snyder. This program is free software; you +// can redistribute it and/or modify it under the terms of either the GNU +// Lesser General Public License Version 3 or the Perl Artistic License +// Version 2.0. +// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 +// +//************************************************************************* +// +// Class used to construct AstCFuncs from a sequence of OrderLogicVertex's +// +//************************************************************************* + +#ifndef VERILATOR_V3ORDERCFUNCEMITTER_H_ +#define VERILATOR_V3ORDERCFUNCEMITTER_H_ + +#include "config_build.h" +#include "verilatedos.h" + +#include "V3Ast.h" +#include "V3Graph.h" +#include "V3OrderGraph.h" + +#include +#include +#include + +class V3OrderCFuncEmitter final { + // Name component to add to function - must be unique + const std::string m_tag; + // True if creating slow functions + const bool m_slow; + // Whether to split functions + const bool m_split = v3Global.opt.outputSplitCFuncs(); + // Size of code emitted so in the current function - for splitting + size_t m_size = 0; + // Maximum size of code per function + const size_t m_splitSize = []() -> size_t { + // Don't want to split with procCFuncs + if (v3Global.opt.profCFuncs()) return std::numeric_limits::max(); + // Otherwise split at the specified size (- 1, so we can do >= comparison) + if (const size_t limit = v3Global.opt.outputSplitCFuncs()) return limit - 1; + return std::numeric_limits::max(); + }(); + // Current function being populated + AstCFunc* m_funcp = nullptr; + // Function ordinals to ensure unique names + std::map, unsigned> m_funcNums; + // The result Active blocks that must be invoked to run the code in the order it was emitted + std::vector m_activeps; + + // Create a unique name for a new function + std::string cfuncName(FileLine* flp, AstScope* scopep, AstNodeModule* modp, + AstSenTree* domainp) { + std::string name = "_" + m_tag; + name += domainp->isMulti() ? "_comb" : "_sequent"; + name += "__" + scopep->nameDotless(); + name += "__" + std::to_string(m_funcNums[{modp, name}]++); + if (v3Global.opt.profCFuncs()) name += "__PROF__" + flp->profileFuncname(); + return name; + } + +public: + // CONSTRUCTOR + V3OrderCFuncEmitter(const std::string& tag, bool slow) + : m_tag{tag} + , m_slow{slow} {} + VL_UNCOPYABLE(V3OrderCFuncEmitter); + VL_UNMOVABLE(V3OrderCFuncEmitter); + + // Force the creation of a new function + void forceNewFunction() { + m_size = 0; + m_funcp = nullptr; + } + + // Retrieve Active block, which when executed will call the constructed functions + std::vector getAndClearActiveps() { + forceNewFunction(); + return std::move(m_activeps); + } + + // Emit one logic vertex + void emitLogic(const OrderLogicVertex* lVtxp) { + // Sensitivity domain of logic we are emitting + AstSenTree* const domainp = lVtxp->domainp(); + // We are move the logic into a CFunc, so unlink it from the input AstActive + AstNode* const logicp = lVtxp->nodep()->unlinkFrBack(); + // If the logic is a procedure, we need to do a few special things + AstNodeProcedure* const procp = VN_CAST(logicp, NodeProcedure); + + // Some properties to consider + const bool suspendable = procp && procp->isSuspendable(); + const bool needProcess = procp && procp->needProcess(); + // TODO: This is a bit muddy: 'initial forever @(posedge clk) begin ... end' is a fancy + // way of saying always @(posedge clk), so it might be quite hot... + // Also, if m_funcp is slow, but this one isn't we should force a new function + const bool slow = m_slow && !(suspendable && VN_IS(procp, Always)); + + // Put suspendable processes into individual functions on their own + if (suspendable) forceNewFunction(); + // When profCFuncs, create a new function for each logic vertex + if (v3Global.opt.profCFuncs()) forceNewFunction(); + // If the new domain is different, force a new function as it needs to be called separately + if (!m_activeps.empty() && m_activeps.back()->sensesp() != domainp) forceNewFunction(); + + // Process procedures per statement, so we can split CFuncs within procedures. + // Everything else is handled as a unit. + AstNode* const headp = [&]() -> AstNode* { + if (!procp) return logicp; // Not a procedure, handle as a unit + AstNode* const stmtsp = procp->stmtsp(); + if (stmtsp) stmtsp->unlinkFrBackWithNext(); + // Procedure is no longer needed and can be deleted right now + VL_DO_DANGLING(procp->deleteTree(), procp); + return stmtsp; + }(); + // Process each statement in the list starting at headp + for (AstNode *currp = headp, *nextp; currp; currp = nextp) { + nextp = currp->nextp(); + // Unlink the current statement from the next statement (if any) + if (nextp) nextp->unlinkFrBackWithNext(); + // Split the function if too large, but don't split suspendable processes + if (!suspendable && m_size >= m_splitSize) forceNewFunction(); + // Create a new function if we don't have a current one + if (!m_funcp) { + UASSERT_OBJ(!m_size, currp, "Should have used forceNewFunction"); + FileLine* const flp = currp->fileline(); + AstScope* const scopep = lVtxp->scopep(); + AstNodeModule* const modp = scopep->modp(); + const std::string name = cfuncName(flp, scopep, modp, domainp); + m_funcp = new AstCFunc{flp, name, scopep, suspendable ? "VlCoroutine" : ""}; + if (needProcess) m_funcp->setNeedProcess(); + m_funcp->isStatic(false); + m_funcp->isLoose(true); + m_funcp->slow(slow); + scopep->addBlocksp(m_funcp); + // Create call to the new functino + AstCCall* const callp = new AstCCall{flp, m_funcp}; + callp->dtypeSetVoid(); + // Call it under an AstActive with the same sensitivity + if (m_activeps.empty() || m_activeps.back()->sensesp() != domainp) { + m_activeps.emplace_back(new AstActive{flp, name, domainp}); + } + m_activeps.back()->addStmtsp(callp->makeStmt()); + } + // Add the code to the current function + m_funcp->addStmtsp(currp); + // If splitting, add in the size of the code we just added + if (m_split) m_size += currp->nodeCount(); + } + // Put suspendable processes into individual functions on their own + if (suspendable) forceNewFunction(); + } +}; + +#endif // Guard diff --git a/src/V3OrderGraphBuilder.cpp b/src/V3OrderGraphBuilder.cpp index f668c53f9..633a6b664 100644 --- a/src/V3OrderGraphBuilder.cpp +++ b/src/V3OrderGraphBuilder.cpp @@ -92,7 +92,7 @@ class OrderGraphBuilder final : public VNVisitor { OrderLogicVertex* m_logicVxp = nullptr; // Current logic block being analyzed // Map from Trigger reference AstSenItem to the original AstSenTree - const std::unordered_map& m_trigToSen; + const V3Order::TrigToSenMap& m_trigToSen; // Current AstScope being processed AstScope* m_scopep = nullptr; @@ -363,7 +363,7 @@ class OrderGraphBuilder final : public VNVisitor { // CONSTRUCTOR OrderGraphBuilder(AstNetlist* /*nodep*/, const std::vector& coll, - const std::unordered_map& trigToSen) + const V3Order::TrigToSenMap& trigToSen) : m_trigToSen{trigToSen} { // Build the graph for (const V3Sched::LogicByScope* const lbsp : coll) { @@ -379,16 +379,16 @@ class OrderGraphBuilder final : public VNVisitor { public: // Process the netlist and return the constructed ordering graph. It's 'process' because // this visitor does change the tree (removes some nodes related to DPI export trigger). - static std::unique_ptr - apply(AstNetlist* nodep, const std::vector& coll, - const std::unordered_map& trigToSen) { + static std::unique_ptr apply(AstNetlist* nodep, + const std::vector& coll, + const V3Order::TrigToSenMap& trigToSen) { return std::unique_ptr{OrderGraphBuilder{nodep, coll, trigToSen}.m_graphp}; } }; -std::unique_ptr V3Order::buildOrderGraph( - AstNetlist* netlistp, // - const std::vector& coll, // - const std::unordered_map& trigToSen) { +std::unique_ptr +V3Order::buildOrderGraph(AstNetlist* netlistp, // + const std::vector& coll, // + const V3Order::TrigToSenMap& trigToSen) { return OrderGraphBuilder::apply(netlistp, coll, trigToSen); } diff --git a/src/V3OrderInternal.h b/src/V3OrderInternal.h index 5ef5ca568..2922b7085 100644 --- a/src/V3OrderInternal.h +++ b/src/V3OrderInternal.h @@ -20,9 +20,11 @@ #include "config_build.h" #include "verilatedos.h" +#include "V3Order.h" #include "V3OrderGraph.h" #include "V3ThreadSafety.h" +#include #include #include @@ -38,10 +40,27 @@ struct LogicByScope; namespace V3Order { -std::unique_ptr -buildOrderGraph(AstNetlist* netlistp, // - const std::vector& coll, // - const std::unordered_map& trigToSen); +std::unique_ptr buildOrderGraph(AstNetlist* netlistp, // + const std::vector& coll, // + const TrigToSenMap& trigToSen); + +void orderOrderGraph(OrderGraph& graph, const std::string& tag); + +void processDomains(AstNetlist* netlistp, // + OrderGraph& graph, // + const std::string& tag, // + const TrigToSenMap& trigToSen, // + const ExternalDomainsProvider& externalDomains); + +std::vector createSerial(const OrderGraph& graph, // + const std::string& tag, // + const TrigToSenMap& trigToSenMap, // + bool slow); + +AstExecGraph* createParallel(const OrderGraph& graph, // + const std::string& tag, // + const TrigToSenMap& trigToSenMap, // + bool slow); }; // namespace V3Order diff --git a/src/V3OrderMoveGraph.h b/src/V3OrderMoveGraph.h deleted file mode 100644 index 961053219..000000000 --- a/src/V3OrderMoveGraph.h +++ /dev/null @@ -1,143 +0,0 @@ -// -*- mode: C++; c-file-style: "cc-mode" -*- -//************************************************************************* -// DESCRIPTION: Verilator: Ordering graph -// -// Code available from: https://verilator.org -// -//************************************************************************* -// -// Copyright 2003-2024 by Wilson Snyder. This program is free software; you -// can redistribute it and/or modify it under the terms of either the GNU -// Lesser General Public License Version 3 or the Perl Artistic License -// Version 2.0. -// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 -// -//************************************************************************* -// -// TODO: Fix comment -// -//************************************************************************* - -#ifndef VERILATOR_V3ORDERMOVEGRAPH_H_ -#define VERILATOR_V3ORDERMOVEGRAPH_H_ - -#include "config_build.h" -#include "verilatedos.h" - -#include "V3Ast.h" -#include "V3Graph.h" -#include "V3OrderGraph.h" -#include "V3ThreadSafety.h" - -#include - -class OrderMoveDomScope; - -class OrderMoveVertex final : public V3GraphVertex { - VL_RTTI_IMPL(OrderMoveVertex, V3GraphVertex) - enum OrderMState : uint8_t { POM_WAIT, POM_READY, POM_MOVED }; - - OrderLogicVertex* const m_logicp; - OrderMState m_state; // Movement state - OrderMoveDomScope* m_domScopep; // Domain/scope list information - -protected: - friend class OrderProcess; - friend class OrderMoveVertexMaker; - // These only contain the "next" item, - // for the head of the list, see the same var name under OrderProcess - V3ListEnt m_pomWaitingE; // List of nodes needing inputs to become ready - V3ListEnt m_readyVerticesE; // List of ready under domain/scope -public: - // CONSTRUCTORS - OrderMoveVertex(V3Graph* graphp, OrderLogicVertex* logicp) VL_MT_DISABLED - : V3GraphVertex{graphp}, - m_logicp{logicp}, - m_state{POM_WAIT}, - m_domScopep{nullptr} {} - ~OrderMoveVertex() override = default; - - // METHODS - string dotColor() const override { - if (logicp()) { - return logicp()->dotColor(); - } else { - return ""; - } - } - - string name() const override VL_MT_STABLE { - string nm; - if (VL_UNCOVERABLE(!logicp())) { // Avoid crash when debugging - nm = "nul"; // LCOV_EXCL_LINE - } else { - nm = logicp()->name(); - nm += (string{"\\nMV:"} + " d=" + cvtToHex(logicp()->domainp()) - + " s=" + cvtToHex(logicp()->scopep())); - } - return nm; - } - OrderLogicVertex* logicp() const VL_MT_STABLE { return m_logicp; } - bool isWait() const { return m_state == POM_WAIT; } - void setReady() VL_MT_DISABLED { - UASSERT(m_state == POM_WAIT, "Wait->Ready on node not in proper state"); - m_state = POM_READY; - } - void setMoved() VL_MT_DISABLED { - UASSERT(m_state == POM_READY, "Ready->Moved on node not in proper state"); - m_state = POM_MOVED; - } - OrderMoveDomScope* domScopep() const { return m_domScopep; } - OrderMoveVertex* pomWaitingNextp() const { return m_pomWaitingE.nextp(); } - void domScopep(OrderMoveDomScope* ds) { m_domScopep = ds; } -}; - -// Similar to OrderMoveVertex, but modified for threaded code generation. -class MTaskMoveVertex final : public V3GraphVertex { - VL_RTTI_IMPL(MTaskMoveVertex, V3GraphVertex) - // This could be more compact, since we know m_varp and m_logicp - // cannot both be set. Each MTaskMoveVertex represents a logic node - // or a var node, it can't be both. - OrderLogicVertex* const m_logicp; // Logic represented by this vertex - const OrderEitherVertex* const m_varp; // Var represented by this vertex - const AstSenTree* const m_domainp; - -public: - MTaskMoveVertex(V3Graph* graphp, OrderLogicVertex* logicp, const OrderEitherVertex* varp, - const AstSenTree* domainp) VL_MT_DISABLED : V3GraphVertex{graphp}, - m_logicp{logicp}, - m_varp{varp}, - m_domainp{domainp} { - UASSERT(!(logicp && varp), "MTaskMoveVertex: logicp and varp may not both be set!\n"); - } - ~MTaskMoveVertex() override = default; - - // ACCESSORS - OrderLogicVertex* logicp() const { return m_logicp; } - const OrderEitherVertex* varp() const { return m_varp; } - const AstScope* scopep() const { return m_logicp ? m_logicp->scopep() : nullptr; } - const AstSenTree* domainp() const { return m_domainp; } - - string dotColor() const override { - if (logicp()) { - return logicp()->dotColor(); - } else { - return "yellow"; - } - } - string name() const override { - string nm; - if (logicp()) { - nm = logicp()->name(); - nm += (string{"\\nMV:"} + " d=" + cvtToHex(logicp()->domainp()) + " s=" - + cvtToHex(logicp()->scopep()) - // "color()" represents the mtask ID. - + "\\nt=" + cvtToStr(color())); - } else { - nm = "nolog\\nt=" + cvtToStr(color()); - } - return nm; - } -}; - -#endif // Guard diff --git a/src/V3OrderMoveGraphBuilder.h b/src/V3OrderMoveGraphBuilder.h index 392fba6ac..5f1626bed 100644 --- a/src/V3OrderMoveGraphBuilder.h +++ b/src/V3OrderMoveGraphBuilder.h @@ -26,6 +26,7 @@ #include "V3Ast.h" #include "V3Graph.h" +#include "V3Order.h" #include "V3OrderGraph.h" template @@ -68,18 +69,16 @@ private: const OrderGraph* const m_graphp; // Input OrderGraph V3Graph* const m_outGraphp; // Output graph of T_MoveVertex vertices // Map from Trigger reference AstSenItem to the original AstSenTree - const std::unordered_map& m_trigToSen; + const V3Order::TrigToSenMap& m_trigToSen; MoveVertexMaker* const m_vxMakerp; // Factory class for T_MoveVertex's // Storage for domain -> T_MoveVertex, maps held in OrderVarVertex::userp() std::deque m_domainMaps; public: // CONSTRUCTORS - V3OrderMoveGraphBuilder( - const OrderGraph* logicGraphp, // Input graph of OrderLogicVertex etc. - V3Graph* outGraphp, // Output graph of T_MoveVertex's - const std::unordered_map& trigToSen, - MoveVertexMaker* vxMakerp) + V3OrderMoveGraphBuilder(const OrderGraph* logicGraphp, // Input graph of OrderLogicVertex etc. + V3Graph* outGraphp, // Output graph of T_MoveVertex's + const V3Order::TrigToSenMap& trigToSen, MoveVertexMaker* vxMakerp) : m_graphp{logicGraphp} , m_outGraphp{outGraphp} , m_trigToSen{trigToSen} diff --git a/src/V3OrderParallel.cpp b/src/V3OrderParallel.cpp new file mode 100644 index 000000000..6b247fadd --- /dev/null +++ b/src/V3OrderParallel.cpp @@ -0,0 +1,207 @@ +// -*- mode: C++; c-file-style: "cc-mode" -*- +//************************************************************************* +// DESCRIPTION: Verilator: Block code ordering +// +// Code available from: https://verilator.org +// +//************************************************************************* +// +// Copyright 2003-2024 by Wilson Snyder. This program is free software; you +// can redistribute it and/or modify it under the terms of either the GNU +// Lesser General Public License Version 3 or the Perl Artistic License +// Version 2.0. +// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 +// +//************************************************************************* +// +// Parallel code ordering +// +//************************************************************************* + +#include "V3PchAstNoMT.h" // VL_MT_DISABLED_CODE_UNIT + +#include "V3Graph.h" +#include "V3GraphStream.h" +#include "V3List.h" +#include "V3OrderCFuncEmitter.h" +#include "V3OrderInternal.h" +#include "V3OrderMoveGraphBuilder.h" +#include "V3Partition.h" +#include "V3PartitionGraph.h" + +#include +#include + +VL_DEFINE_DEBUG_FUNCTIONS; + +class OrderMTaskMoveVertexMaker final + : public V3OrderMoveGraphBuilder::MoveVertexMaker { + V3Graph* m_pomGraphp; + +public: + explicit OrderMTaskMoveVertexMaker(V3Graph* pomGraphp) + : m_pomGraphp{pomGraphp} {} + MTaskMoveVertex* makeVertexp(OrderLogicVertex* lvertexp, const OrderEitherVertex* varVertexp, + const AstSenTree* domainp) override { + return new MTaskMoveVertex{m_pomGraphp, lvertexp, varVertexp, domainp}; + } + +private: + VL_UNCOPYABLE(OrderMTaskMoveVertexMaker); +}; + +// Sort MTaskMoveVertex vertices by domain, then by scope, based on teh order they are encountered +class OrderVerticesByDomainThenScope final { + mutable uint64_t m_nextId = 0; // Next id to use + mutable std::unordered_map m_id; // Map from ptr to id + + // Map a pointer into an id, for deterministic results + uint64_t findId(const void* ptrp) const { + const auto pair = m_id.emplace(ptrp, m_nextId); + if (pair.second) ++m_nextId; + return pair.first->second; + } + +public: + bool operator()(const V3GraphVertex* lhsp, const V3GraphVertex* rhsp) const { + const MTaskMoveVertex* const l_vxp = lhsp->as(); + const MTaskMoveVertex* const r_vxp = rhsp->as(); + const uint64_t l_id = findId(l_vxp->domainp()); + const uint64_t r_id = findId(r_vxp->domainp()); + if (l_id != r_id) return l_id < r_id; + return findId(l_vxp->scopep()) < findId(r_vxp->scopep()); + } +}; + +// Sort AbstractMTask vertices by their serial IDs. +struct MTaskVxIdLessThan final { + bool operator()(const V3GraphVertex* lhsp, const V3GraphVertex* rhsp) const { + return lhsp->as()->id() < rhsp->as()->id(); + } +}; + +AstExecGraph* V3Order::createParallel(const OrderGraph& graph, const std::string& tag, + const TrigToSenMap& trigToSen, bool slow) { + // For nondeterminism debug: + V3Partition::hashGraphDebug(&graph, "V3Order's m_graph"); + + // We already produced a graph of every var, input, and logic + // block and all dependencies; this is 'm_graph'. + // + // Now, starting from m_graph, make a slightly-coarsened graph representing + // only logic, and discarding edges we know we can ignore. + // This is quite similar to the 'm_pomGraph' of the serial code gen: + V3Graph logicGraph; + { + OrderMTaskMoveVertexMaker create_mtask_vertex(&logicGraph); + V3OrderMoveGraphBuilder mtask_pmbg(&graph, &logicGraph, trigToSen, + &create_mtask_vertex); + mtask_pmbg.build(); + } + + // Needed? We do this for m_pomGraph in serial mode, so do it here too: + logicGraph.removeRedundantEdgesMax(&V3GraphEdge::followAlwaysTrue); + + // Partition logicGraph into LogicMTask's. The partitioner will annotate + // each vertex in logicGraph with a 'color' which is really an mtask ID + // in this context. + V3Partition partitioner{&graph, &logicGraph}; + V3Graph mtasks; + partitioner.go(&mtasks); + + // processMTask* routines schedule threaded execution + struct MTaskState final { + AstMTaskBody* m_mtaskBodyp = nullptr; + std::list m_logics; + ExecMTask* m_execMTaskp = nullptr; + MTaskState() = default; + }; + + std::unordered_map mtaskStates; + + // Iterate through the entire logicGraph. For each logic node, + // attach it to a per-MTask ordered list of logic nodes. + // This is the order we'll execute logic nodes within the MTask. + // + // MTasks may span scopes and domains, so sort by both here: + GraphStream logicStream{&logicGraph}; + while (const V3GraphVertex* const vtxp = logicStream.nextp()) { + const MTaskMoveVertex* const movep = vtxp->as(); + // Only care about logic vertices + if (!movep->logicp()) continue; + + const unsigned mtaskId = movep->color(); + UASSERT(mtaskId > 0, "Every MTaskMoveVertex should have an mtask assignment >0"); + + // Add this logic to the per-mtask order + mtaskStates[mtaskId].m_logics.push_back(movep->logicp()); + + // Since we happen to be iterating over every logic node, + // take this opportunity to annotate each AstVar with the id's + // of mtasks that consume it and produce it. We'll use this + // information in V3EmitC when we lay out var's in memory. + const OrderLogicVertex* const logicp = movep->logicp(); + for (const V3GraphEdge* edgep = logicp->inBeginp(); edgep; edgep = edgep->inNextp()) { + const OrderVarVertex* const pre_varp = edgep->fromp()->cast(); + if (!pre_varp) continue; + AstVar* const varp = pre_varp->vscp()->varp(); + // varp depends on logicp, so logicp produces varp, + // and vice-versa below + varp->addProducingMTaskId(mtaskId); + } + for (const V3GraphEdge* edgep = logicp->outBeginp(); edgep; edgep = edgep->outNextp()) { + const OrderVarVertex* const post_varp = edgep->top()->cast(); + if (!post_varp) continue; + AstVar* const varp = post_varp->vscp()->varp(); + varp->addConsumingMTaskId(mtaskId); + } + // TODO? We ignore IO vars here, so those will have empty mtask + // signatures. But we could also give those mtask signatures. + } + + // Create the AstExecGraph node which represents the execution + // of the MTask graph. + FileLine* const rootFlp = v3Global.rootp()->fileline(); + AstExecGraph* const execGraphp = new AstExecGraph{rootFlp, tag}; + + // Create CFuncs and bodies for each MTask. + V3OrderCFuncEmitter emitter{tag, slow}; + GraphStream mtaskStream{&mtasks}; + while (const V3GraphVertex* const vtxp = mtaskStream.nextp()) { + const AbstractLogicMTask* const mtaskp = vtxp->as(); + + // Create a body for this mtask + AstMTaskBody* const bodyp = new AstMTaskBody{rootFlp}; + MTaskState& state = mtaskStates[mtaskp->id()]; + state.m_mtaskBodyp = bodyp; + + // Emit functions with this MTaks's logic, and call them in the body. + for (const OrderLogicVertex* lVtxp : state.m_logics) emitter.emitLogic(lVtxp); + for (AstActive* const activep : emitter.getAndClearActiveps()) bodyp->addStmtsp(activep); + + // Translate the LogicMTask graph into the corresponding ExecMTask + // graph, which will outlive V3Order and persist for the remainder + // of verilator's processing. + // - The LogicMTask graph points to MTaskMoveVertex's + // and OrderLogicVertex's which are ephemeral to V3Order. + // - The ExecMTask graph and the AstMTaskBody's produced here + // persist until code generation time. + V3Graph* const depGraphp = execGraphp->depGraphp(); + state.m_execMTaskp = new ExecMTask{depGraphp, bodyp, mtaskp->id()}; + // Cross-link each ExecMTask and MTaskBody + // Q: Why even have two objects? + // A: One is an AstNode, the other is a GraphVertex, + // to combine them would involve multiple inheritance... + state.m_mtaskBodyp->execMTaskp(state.m_execMTaskp); + for (V3GraphEdge* inp = mtaskp->inBeginp(); inp; inp = inp->inNextp()) { + const V3GraphVertex* fromVxp = inp->fromp(); + const AbstractLogicMTask* const fromp + = static_cast(fromVxp); + const MTaskState& fromState = mtaskStates[fromp->id()]; + new V3GraphEdge{depGraphp, fromState.m_execMTaskp, state.m_execMTaskp, 1}; + } + execGraphp->addMTaskBodiesp(bodyp); + } + + return execGraphp; +} diff --git a/src/V3OrderProcessDomains.cpp b/src/V3OrderProcessDomains.cpp new file mode 100644 index 000000000..458244a60 --- /dev/null +++ b/src/V3OrderProcessDomains.cpp @@ -0,0 +1,245 @@ +// -*- mode: C++; c-file-style: "cc-mode" -*- +//************************************************************************* +// DESCRIPTION: Verilator: Block code ordering +// +// Code available from: https://verilator.org +// +//************************************************************************* +// +// Copyright 2003-2024 by Wilson Snyder. This program is free software; you +// can redistribute it and/or modify it under the terms of either the GNU +// Lesser General Public License Version 3 or the Perl Artistic License +// Version 2.0. +// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 +// +//************************************************************************* +// +// Initial graph dependency builder for ordering +// +//************************************************************************* + +#include "V3PchAstNoMT.h" // VL_MT_DISABLED_CODE_UNIT + +#include "V3Const.h" +#include "V3EmitV.h" +#include "V3File.h" +#include "V3OrderGraph.h" +#include "V3OrderInternal.h" +#include "V3SenTree.h" + +VL_DEFINE_DEBUG_FUNCTIONS; + +//###################################################################### +// ProcessDomains class + +class V3OrderProcessDomains final { + // NODE STATE + // AstNode::user4 -> Used by V3Const::constifyExpensiveEdit + + // STATE + OrderGraph& m_graph; // The ordering graph + + // Map from Trigger reference AstSenItem to the original AstSenTree + const V3Order::TrigToSenMap& m_trigToSen; + + // This is a function provided by the invoker of the ordering that can provide additional + // sensitivity expression that when triggered indicates the passed AstVarScope might have + // changed external to the code being ordered. + const V3Order::ExternalDomainsProvider m_externalDomains; + + SenTreeFinder m_finder; // Global AstSenTree manager + + // Sentinel value indicating a vertex can be deleted. Never dereferenced, so any non-nullptr + // value will do. Use something that wil crash quickly if used. + AstSenTree* const m_deleteDomainp = reinterpret_cast(1); + // Logic that is never triggered and hence can be deleted + std::vector m_logicpsToDelete; + const string m_tag; // Substring to add to generated names + + // METHODS + + // Make a domain that merges the two domains + AstSenTree* combineDomains(AstSenTree* ap, AstSenTree* bp) { + if (ap == bp) return ap; + if (ap == m_deleteDomainp) return bp; + UASSERT_OBJ(bp != m_deleteDomainp, bp, "'bp' Should not be delete domain"); + AstSenTree* const senTreep = ap->cloneTree(false); + senTreep->addSensesp(bp->sensesp()->cloneTree(true)); + V3Const::constifyExpensiveEdit(senTreep); // Remove duplicates + senTreep->multi(true); // Comment that it was made from 2 domains + AstSenTree* const resultp = m_finder.getSenTree(senTreep); + VL_DO_DANGLING(senTreep->deleteTree(), senTreep); // getSenTree clones, so delete this + return resultp; + } + + // The graph routines have already sorted the vertexes and edges into best->worst order + // Assign clock domains to each signal. + // Sequential logic already hae their domain defined. + // Combo logic may be pushed into a seq domain if all its inputs are the same domain, + // else, if all inputs are from flops, it's end-of-sequential code + // else, it's full combo code + void processDomains() { + UINFO(2, " Domains...\n"); + // Buffer to hold external sensitivities + std::vector externalDomainps; + // For each vertex + for (V3GraphVertex* itp = m_graph.verticesBeginp(); itp; itp = itp->verticesNextp()) { + OrderEitherVertex* const vtxp = itp->as(); + UINFO(5, " pdi: " << vtxp << endl); + // Sequential logic already has its domain set + if (vtxp->domainp()) continue; + + AstSenTree* domainp = nullptr; + // For logic, start with the explicit hybrid sensitivities + OrderLogicVertex* const lvtxp = vtxp->cast(); + if (lvtxp) domainp = lvtxp->hybridp(); + + // For each incoming edge, examine the source vertex + for (V3GraphEdge* edgep = vtxp->inBeginp(); edgep; edgep = edgep->inNextp()) { + OrderEitherVertex* const fromVtxp = edgep->fromp()->as(); + // Cut edge + if (!edgep->weight()) continue; + // + if (!fromVtxp->domainMatters()) continue; + + AstSenTree* fromDomainp = fromVtxp->domainp(); + + UASSERT(fromDomainp == m_deleteDomainp || !fromDomainp->hasCombo(), + "There should be no need for combinational domains"); + + // Add in any external domains of variables + if (OrderVarVertex* const varVtxp = fromVtxp->cast()) { + AstVarScope* const vscp = varVtxp->vscp(); + externalDomainps.clear(); + m_externalDomains(vscp, externalDomainps); + for (AstSenTree* const externalDomainp : externalDomainps) { + UASSERT_OBJ(!externalDomainp->hasCombo(), vscp, + "There should be no need for combinational domains"); + fromDomainp = combineDomains(fromDomainp, externalDomainp); + } + } + + // Irrelevant input vertex (never triggered, not even externally) + if (fromDomainp == m_deleteDomainp) continue; + + if (!domainp) { + // First input to this vertex that we are processing + domainp = fromDomainp; + } else { + // Make a domain that merges the two domains + domainp = combineDomains(domainp, fromDomainp); + } + } + + // If nothing triggers this vertex, we can delete the corresponding logic + if (!domainp) { + domainp = m_deleteDomainp; + if (lvtxp) m_logicpsToDelete.push_back(lvtxp); + } + + // Set the domain of the vertex + vtxp->domainp(domainp); + + UINFO(5, " done d=" << cvtToHex(domainp) + << (domainp == m_deleteDomainp ? " [DEL]" + : domainp->hasCombo() ? " [COMB]" + : domainp->isMulti() ? " [MULT]" + : "") + << " " << vtxp << endl); + } + } + + void processEdgeReport() { + // Make report of all signal names and what clock edges they have + const string filename = v3Global.debugFilename(m_tag + "_order_edges.txt"); + const std::unique_ptr logp{V3File::new_ofstream(filename)}; + if (logp->fail()) v3fatal("Can't write " << filename); + + std::deque report; + + // Rebuild the trigger to original AstSenTree map using equality key comparison, as + // merging domains have created new AstSenTree instances which are not in the map + std::unordered_map, const AstSenTree*> trigToSen; + for (const auto& pair : m_trigToSen) trigToSen.emplace(*pair.first, pair.second); + + for (V3GraphVertex* itp = m_graph.verticesBeginp(); itp; itp = itp->verticesNextp()) { + if (OrderVarVertex* const vvertexp = itp->cast()) { + string name(vvertexp->vscp()->prettyName()); + if (itp->is()) { + name += " {PRE}"; + } else if (itp->is()) { + name += " {POST}"; + } else if (itp->is()) { + name += " {PORD}"; + } + std::ostringstream os; + os.setf(std::ios::left); + os << " " << cvtToHex(vvertexp->vscp()) << " " << std::setw(50) << name << " "; + AstSenTree* const senTreep = vvertexp->domainp(); + if (senTreep == m_deleteDomainp) { + os << "DELETED"; + } else { + for (AstSenItem* senItemp = senTreep->sensesp(); senItemp; + senItemp = VN_AS(senItemp->nextp(), SenItem)) { + if (senItemp != senTreep->sensesp()) os << " or "; + const auto it = trigToSen.find(*senItemp); + if (it != trigToSen.end()) { + V3EmitV::verilogForTree(it->second, os); + } else { + V3EmitV::verilogForTree(senItemp, os); + } + } + } + report.push_back(os.str()); + } + } + + *logp << "Signals and their clock domains:\n"; + stable_sort(report.begin(), report.end()); + for (const string& i : report) *logp << i << '\n'; + } + + // CONSTRUCTOR + V3OrderProcessDomains(AstNetlist* netlistp, OrderGraph& graph, const string& tag, + const V3Order::TrigToSenMap& trigToSen, + const V3Order::ExternalDomainsProvider& externalDomains) + : m_graph{graph} + , m_trigToSen{trigToSen} + , m_externalDomains{externalDomains} + , m_finder{netlistp} + , m_tag{tag} { + + // Assign vertices to their sensitivity domains + processDomains(); + if (dumpGraphLevel()) m_graph.dumpDotFilePrefixed(m_tag + "_orderg_domain"); + + // Report domain assignments if requested + if (dumpLevel()) processEdgeReport(); + + // Delete logic that is never triggered + for (OrderLogicVertex* const lVtxp : m_logicpsToDelete) { + UASSERT_OBJ(lVtxp->domainp() == m_deleteDomainp, lVtxp, + "Should have been marked as deleted"); + lVtxp->nodep()->unlinkFrBack()->deleteTree(); + lVtxp->unlinkDelete(&m_graph); + } + } + + ~V3OrderProcessDomains() = default; + +public: + // Order the logic + static void apply(AstNetlist* netlistp, OrderGraph& graph, const string& tag, + const V3Order::TrigToSenMap& trigToSen, + const V3Order::ExternalDomainsProvider& externalDomains) { + V3OrderProcessDomains{netlistp, graph, tag, trigToSen, externalDomains}; + } +}; + +void V3Order::processDomains(AstNetlist* netlistp, // + OrderGraph& graph, // + const std::string& tag, // + const V3Order::TrigToSenMap& trigToSen, // + const ExternalDomainsProvider& externalDomains) { + V3OrderProcessDomains::apply(netlistp, graph, tag, trigToSen, externalDomains); +} diff --git a/src/V3OrderSerial.cpp b/src/V3OrderSerial.cpp new file mode 100644 index 000000000..c0397c691 --- /dev/null +++ b/src/V3OrderSerial.cpp @@ -0,0 +1,385 @@ +// -*- mode: C++; c-file-style: "cc-mode" -*- +//************************************************************************* +// DESCRIPTION: Verilator: Block code ordering +// +// Code available from: https://verilator.org +// +//************************************************************************* +// +// Copyright 2003-2024 by Wilson Snyder. This program is free software; you +// can redistribute it and/or modify it under the terms of either the GNU +// Lesser General Public License Version 3 or the Perl Artistic License +// Version 2.0. +// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 +// +//************************************************************************* +// +// Serial code ordering +// +//************************************************************************* + +#include "V3PchAstNoMT.h" // VL_MT_DISABLED_CODE_UNIT + +#include "V3Graph.h" +#include "V3List.h" +#include "V3OrderCFuncEmitter.h" +#include "V3OrderInternal.h" +#include "V3OrderMoveGraphBuilder.h" + +#include + +VL_DEFINE_DEBUG_FUNCTIONS; + +class OrderMoveDomScope; + +class OrderMoveVertex final : public V3GraphVertex { + VL_RTTI_IMPL(OrderMoveVertex, V3GraphVertex) + enum OrderMState : uint8_t { POM_WAIT, POM_READY, POM_MOVED }; + + OrderLogicVertex* const m_logicp; + OrderMState m_state; // Movement state + OrderMoveDomScope* m_domScopep; // Domain/scope list information + +protected: + friend class OrderProcess; + friend class OrderMoveVertexMaker; + // These only contain the "next" item, + // for the head of the list, see the same var name under OrderProcess + V3ListEnt m_pomWaitingE; // List of nodes needing inputs to become ready + V3ListEnt m_readyVerticesE; // List of ready under domain/scope +public: + // CONSTRUCTORS + OrderMoveVertex(V3Graph* graphp, OrderLogicVertex* logicp) VL_MT_DISABLED + : V3GraphVertex{graphp}, + m_logicp{logicp}, + m_state{POM_WAIT}, + m_domScopep{nullptr} {} + ~OrderMoveVertex() override = default; + + // METHODS + string dotColor() const override { + if (logicp()) { + return logicp()->dotColor(); + } else { + return ""; + } + } + + string name() const override VL_MT_STABLE { + string nm; + if (VL_UNCOVERABLE(!logicp())) { // Avoid crash when debugging + nm = "nul"; // LCOV_EXCL_LINE + } else { + nm = logicp()->name(); + nm += (string{"\\nMV:"} + " d=" + cvtToHex(logicp()->domainp()) + + " s=" + cvtToHex(logicp()->scopep())); + } + return nm; + } + OrderLogicVertex* logicp() const VL_MT_STABLE { return m_logicp; } + bool isWait() const { return m_state == POM_WAIT; } + void setReady() VL_MT_DISABLED { + UASSERT(m_state == POM_WAIT, "Wait->Ready on node not in proper state"); + m_state = POM_READY; + } + void setMoved() VL_MT_DISABLED { + UASSERT(m_state == POM_READY, "Ready->Moved on node not in proper state"); + m_state = POM_MOVED; + } + OrderMoveDomScope* domScopep() const { return m_domScopep; } + OrderMoveVertex* pomWaitingNextp() const { return m_pomWaitingE.nextp(); } + void domScopep(OrderMoveDomScope* ds) { m_domScopep = ds; } +}; + +//###################################################################### + +class OrderProcess; + +class OrderMoveDomScope final { + // Information stored for each unique loop, domain & scope trifecta +public: + V3ListEnt m_readyDomScopeE; // List of next ready dom scope + V3List m_readyVertices; // Ready vertices with same domain & scope +private: + bool m_onReadyList = false; // True if DomScope is already on list of ready dom/scopes + const AstSenTree* const m_domainp; // Domain all vertices belong to + const AstScope* const m_scopep; // Scope all vertices belong to + + using DomScopeKey = std::pair; + using DomScopeMap = std::map; + static DomScopeMap s_dsMap; // Structure registered for each dom/scope pairing + +public: + OrderMoveDomScope(const AstSenTree* domainp, const AstScope* scopep) + : m_domainp{domainp} + , m_scopep{scopep} {} + OrderMoveDomScope* readyDomScopeNextp() const { return m_readyDomScopeE.nextp(); } + const AstSenTree* domainp() const { return m_domainp; } + const AstScope* scopep() const { return m_scopep; } + // Check the domScope is on ready list, add if not + void ready(OrderProcess* opp); + // Mark one vertex as finished, remove from ready list if done + void movedVertex(OrderProcess* opp, OrderMoveVertex* vertexp); + // STATIC MEMBERS (for lookup) + static void clear() { + for (const auto& itr : s_dsMap) delete itr.second; + s_dsMap.clear(); + } + V3List& readyVertices() { return m_readyVertices; } + static OrderMoveDomScope* findCreate(const AstSenTree* domainp, const AstScope* scopep) { + const DomScopeKey key = std::make_pair(domainp, scopep); + const auto pair = s_dsMap.emplace(key, nullptr); + if (pair.second) pair.first->second = new OrderMoveDomScope{domainp, scopep}; + return pair.first->second; + } + string name() const { + return string{"MDS:"} + " d=" + cvtToHex(domainp()) + " s=" + cvtToHex(scopep()); + } +}; + +// ###################################################################### +// OrderMoveVertexMaker and related + +class OrderMoveVertexMaker final + : public V3OrderMoveGraphBuilder::MoveVertexMaker { + // MEMBERS + V3Graph* m_pomGraphp; + V3List* m_pomWaitingp; + +public: + // CONSTRUCTORS + OrderMoveVertexMaker(V3Graph* pomGraphp, V3List* pomWaitingp) + : m_pomGraphp{pomGraphp} + , m_pomWaitingp{pomWaitingp} {} + // METHODS + OrderMoveVertex* makeVertexp(OrderLogicVertex* lvertexp, const OrderEitherVertex*, + const AstSenTree* domainp) override { + OrderMoveVertex* const resultp = new OrderMoveVertex{m_pomGraphp, lvertexp}; + AstScope* const scopep = lvertexp ? lvertexp->scopep() : nullptr; + resultp->domScopep(OrderMoveDomScope::findCreate(domainp, scopep)); + resultp->m_pomWaitingE.pushBack(*m_pomWaitingp, resultp); + return resultp; + } + +private: + VL_UNCOPYABLE(OrderMoveVertexMaker); +}; + +OrderMoveDomScope::DomScopeMap OrderMoveDomScope::s_dsMap; + +std::ostream& operator<<(std::ostream& lhs, const OrderMoveDomScope& rhs) { + lhs << rhs.name(); + return lhs; +} + +//###################################################################### +// OrderProcess class + +class OrderProcess final { + // STATE + const OrderGraph& m_graph; // The ordering graph + + // Map from Trigger reference AstSenItem to the original AstSenTree + const V3Order::TrigToSenMap& m_trigToSen; + + const string m_tag; // Substring to add to generated names + + V3Graph m_pomGraph; // Graph of logic elements to move + V3List m_pomWaiting; // List of nodes needing inputs to become ready + friend class OrderMoveDomScope; + V3List m_pomReadyDomScope; // List of ready domain/scope pairs, by loopId + + V3OrderCFuncEmitter m_emitter; + + // METHODS + // processMove* routines schedule serial execution + void processMove(); + void processMoveClear(); + void processMoveBuildGraph(); + void processMovePrepReady(); + void processMoveReadyOne(OrderMoveVertex* vertexp); + void processMoveDoneOne(OrderMoveVertex* vertexp); + + // CONSTRUCTOR + OrderProcess(const OrderGraph& graph, const string& tag, + const V3Order::TrigToSenMap& trigToSen, bool slow) + : m_graph{graph} + , m_trigToSen{trigToSen} + , m_tag{tag} + , m_emitter{tag, slow} { + UINFO(2, " Construct Move Graph...\n"); + processMoveBuildGraph(); + // Different prefix (ordermv) as it's not the same graph + if (dumpGraphLevel() >= 4) m_pomGraph.dumpDotFilePrefixed(m_tag + "_ordermv_start"); + m_pomGraph.removeRedundantEdgesMax(&V3GraphEdge::followAlwaysTrue); + if (dumpGraphLevel() >= 4) m_pomGraph.dumpDotFilePrefixed(m_tag + "_ordermv_simpl"); + + UINFO(2, " Move...\n"); + processMove(); + } + + ~OrderProcess() = default; + +public: + // Order the logic + static std::vector main(const OrderGraph& graph, const string& tag, + const V3Order::TrigToSenMap& trigToSen, bool slow) { + return OrderProcess{graph, tag, trigToSen, slow}.m_emitter.getAndClearActiveps(); + } +}; + +//###################################################################### +// OrderMoveDomScope methods + +// Check the domScope is on ready list, add if not +void OrderMoveDomScope::ready(OrderProcess* opp) { + if (!m_onReadyList) { + m_onReadyList = true; + m_readyDomScopeE.pushBack(opp->m_pomReadyDomScope, this); + } +} + +// Mark one vertex as finished, remove from ready list if done +void OrderMoveDomScope::movedVertex(OrderProcess* opp, OrderMoveVertex* vertexp) { + UASSERT_OBJ(m_onReadyList, vertexp, + "Moving vertex from ready when nothing was on que as ready."); + if (m_readyVertices.empty()) { // Else more work to get to later + m_onReadyList = false; + m_readyDomScopeE.unlink(opp->m_pomReadyDomScope, this); + } +} + +void OrderProcess::processMoveClear() { + OrderMoveDomScope::clear(); + m_pomWaiting.reset(); + m_pomReadyDomScope.reset(); + m_pomGraph.clear(); +} + +void OrderProcess::processMoveBuildGraph() { + // Build graph of only vertices + UINFO(5, " MoveBuildGraph\n"); + processMoveClear(); + // Vertex::user->OrderMoveVertex*, last edge added or nullptr=none + m_pomGraph.userClearVertices(); + + OrderMoveVertexMaker createOrderMoveVertex(&m_pomGraph, &m_pomWaiting); + V3OrderMoveGraphBuilder serialPMBG(&m_graph, &m_pomGraph, m_trigToSen, + &createOrderMoveVertex); + serialPMBG.build(); +} + +//###################################################################### +// OrderVisitor - Moving + +void OrderProcess::processMove() { + // The graph routines have already sorted the vertexes and edges into best->worst order + // Make a new waiting graph with only OrderLogicVertex's + // (Order is preserved in the recreation so the sorting is preserved) + // Move any node with all inputs ready to a "ready" graph mapped by domain and then scope + // While waiting graph ! empty (and also known: something in ready graph) + // For all scopes in domain of top ready vertex + // For all vertexes in domain&scope of top ready vertex + // Make ordered activation block for this module + // Add that new activation to the list of calls to make. + // Move logic to ordered active + // Any children that have all inputs now ready move from waiting->ready graph + // (This may add nodes the for loop directly above needs to detext) + processMovePrepReady(); + + // New domain... another loop + UINFO(5, " MoveIterate\n"); + while (!m_pomReadyDomScope.empty()) { + // Start with top node on ready list's domain & scope + OrderMoveDomScope* domScopep = m_pomReadyDomScope.begin(); + OrderMoveVertex* const topVertexp + = domScopep->readyVertices().begin(); // lintok-begin-on-ref + UASSERT(topVertexp, "domScope on ready list without any nodes ready under it"); + // Work on all scopes ready inside this domain + while (domScopep) { + UINFO(6, " MoveDomain l=" << domScopep->domainp() << endl); + // Process all nodes ready under same domain & scope + m_emitter.forceNewFunction(); + V3List& readyVertices = domScopep->readyVertices(); + while (OrderMoveVertex* vertexp = readyVertices.begin()) { + UASSERT_OBJ(vertexp->domScopep() == domScopep, vertexp, "Domain mismatch"); + m_emitter.emitLogic(vertexp->logicp()); + processMoveDoneOne(vertexp); + } + // Done with scope/domain pair, pick new scope under same domain, or nullptr if none + // left + OrderMoveDomScope* domScopeNextp = nullptr; + for (OrderMoveDomScope* huntp = m_pomReadyDomScope.begin(); huntp; + huntp = huntp->readyDomScopeNextp()) { + if (huntp->domainp() == domScopep->domainp()) { + domScopeNextp = huntp; + break; + } + } + domScopep = domScopeNextp; + } + } + UASSERT(m_pomWaiting.empty(), + "Didn't converge; nodes waiting, none ready, perhaps some input activations lost."); + // Cleanup memory + processMoveClear(); +} + +void OrderProcess::processMovePrepReady() { + // Make list of ready nodes + UINFO(5, " MovePrepReady\n"); + for (OrderMoveVertex* vertexp = m_pomWaiting.begin(); vertexp;) { + OrderMoveVertex* const nextp = vertexp->pomWaitingNextp(); + if (vertexp->isWait() && vertexp->inEmpty()) processMoveReadyOne(vertexp); + vertexp = nextp; + } +} + +void OrderProcess::processMoveReadyOne(OrderMoveVertex* vertexp) { + // Recursive! + // Move one node from waiting to ready list + vertexp->setReady(); + // Remove node from waiting list + vertexp->m_pomWaitingE.unlink(m_pomWaiting, vertexp); + if (vertexp->logicp()) { + // Add to ready list (indexed by domain and scope) + vertexp->m_readyVerticesE.pushBack(vertexp->domScopep()->m_readyVertices, vertexp); + vertexp->domScopep()->ready(this); + } else { + // vertexp represents a non-logic vertex. + // Recurse to mark its following neighbors ready. + processMoveDoneOne(vertexp); + } +} + +void OrderProcess::processMoveDoneOne(OrderMoveVertex* vertexp) { + // Move one node from ready to completion + vertexp->setMoved(); + // Unlink from ready lists + if (vertexp->logicp()) { + vertexp->m_readyVerticesE.unlink(vertexp->domScopep()->m_readyVertices, vertexp); + vertexp->domScopep()->movedVertex(this, vertexp); + } + // Don't need to add it to another list, as we're done with it + // Mark our outputs as one closer to ready + for (V3GraphEdge *edgep = vertexp->outBeginp(), *nextp; edgep; edgep = nextp) { + nextp = edgep->outNextp(); + OrderMoveVertex* const toVertexp = static_cast(edgep->top()); + UINFO(9, " Clear to " << (toVertexp->inEmpty() ? "[EMP] " : " ") << toVertexp + << endl); + // Delete this edge + VL_DO_DANGLING(edgep->unlinkDelete(), edgep); + if (toVertexp->inEmpty()) { + // If destination node now has all inputs resolved; recurse to move that vertex + // This is thus depth first (before width) which keeps the + // resulting executable's d-cache happy. + processMoveReadyOne(toVertexp); + } + } +} + +std::vector V3Order::createSerial(const OrderGraph& graph, const std::string& tag, + const TrigToSenMap& trigToSen, bool slow) { + + return OrderProcess::main(graph, tag, trigToSen, slow); +} diff --git a/src/V3Partition.h b/src/V3Partition.h index 08574b6ba..592885951 100644 --- a/src/V3Partition.h +++ b/src/V3Partition.h @@ -22,14 +22,12 @@ #include "V3Graph.h" #include "V3OrderGraph.h" -#include "V3OrderMoveGraph.h" #include "V3ThreadSafety.h" #include #include class LogicMTask; -using Vx2MTaskMap = std::unordered_map; //************************************************************************* /// V3Partition takes the fine-grained logic graph from V3Order and @@ -78,24 +76,4 @@ private: VL_UNCOPYABLE(V3Partition); }; -//************************************************************************* -// Map a pointer into a id, for e.g. nodep to mtask mappings - -class PartPtrIdMap final { - // TYPES - // MEMBERS - mutable uint64_t m_nextId = 0; - mutable std::unordered_map m_id; - -public: - // CONSTRUCTORS - PartPtrIdMap() = default; - // METHODS - uint64_t findId(const void* ptrp) const { - const auto pair = m_id.emplace(ptrp, m_nextId); - if (pair.second) ++m_nextId; - return pair.first->second; - } -}; - #endif // Guard diff --git a/src/V3PartitionGraph.h b/src/V3PartitionGraph.h index dd41f2618..ba0c60a98 100644 --- a/src/V3PartitionGraph.h +++ b/src/V3PartitionGraph.h @@ -21,10 +21,58 @@ #include "verilatedos.h" #include "V3Graph.h" -#include "V3OrderMoveGraph.h" +#include "V3OrderGraph.h" #include +// Similar to OrderMoveVertex, but modified for threaded code generation. +class MTaskMoveVertex final : public V3GraphVertex { + VL_RTTI_IMPL(MTaskMoveVertex, V3GraphVertex) + // This could be more compact, since we know m_varp and m_logicp + // cannot both be set. Each MTaskMoveVertex represents a logic node + // or a var node, it can't be both. + OrderLogicVertex* const m_logicp; // Logic represented by this vertex + const OrderEitherVertex* const m_varp; // Var represented by this vertex + const AstSenTree* const m_domainp; + +public: + MTaskMoveVertex(V3Graph* graphp, OrderLogicVertex* logicp, const OrderEitherVertex* varp, + const AstSenTree* domainp) VL_MT_DISABLED : V3GraphVertex{graphp}, + m_logicp{logicp}, + m_varp{varp}, + m_domainp{domainp} { + UASSERT(!(logicp && varp), "MTaskMoveVertex: logicp and varp may not both be set!\n"); + } + ~MTaskMoveVertex() override = default; + + // ACCESSORS + OrderLogicVertex* logicp() const { return m_logicp; } + const OrderEitherVertex* varp() const { return m_varp; } + const AstScope* scopep() const { return m_logicp ? m_logicp->scopep() : nullptr; } + const AstSenTree* domainp() const { return m_domainp; } + + string dotColor() const override { + if (logicp()) { + return logicp()->dotColor(); + } else { + return "yellow"; + } + } + string name() const override { + string nm; + if (logicp()) { + nm = logicp()->name(); + nm += (string{"\\nMV:"} + " d=" + cvtToHex(logicp()->domainp()) + " s=" + + cvtToHex(logicp()->scopep()) + // "color()" represents the mtask ID. + + "\\nt=" + cvtToStr(color())); + } else { + nm = "nolog\\nt=" + cvtToStr(color()); + } + return nm; + } +}; + //************************************************************************* // MTasks and graph structures diff --git a/src/V3Sched.cpp b/src/V3Sched.cpp index b56552c9e..5e471ce8d 100644 --- a/src/V3Sched.cpp +++ b/src/V3Sched.cpp @@ -98,7 +98,7 @@ void remapSensitivities(const LogicByScope& lbs, } void invertAndMergeSenTreeMap( - std::unordered_map& result, + V3Order::TrigToSenMap& result, const std::unordered_map& senTreeMap) { for (const auto& pair : senTreeMap) { UASSERT_OBJ(!pair.second->sensesp()->nextp(), pair.second, "Should be single AstSenIem"); @@ -791,7 +791,7 @@ void createSettle(AstNetlist* netlistp, AstCFunc* const initFuncp, SenExprBuilde remapSensitivities(hybrid, trig.m_map); // Create the inverse map from trigger ref AstSenTree to original AstSenTree - std::unordered_map trigToSen; + V3Order::TrigToSenMap trigToSen; invertAndMergeSenTreeMap(trigToSen, trig.m_map); // First trigger is for pure combinational triggers (first iteration) @@ -871,7 +871,7 @@ AstNode* createInputCombLoop(AstNetlist* netlistp, AstCFunc* const initFuncp, remapSensitivities(logic, trig.m_map); // Create the inverse map from trigger ref AstSenTree to original AstSenTree - std::unordered_map trigToSen; + V3Order::TrigToSenMap trigToSen; invertAndMergeSenTreeMap(trigToSen, trig.m_map); // The trigger top level inputs (first iteration) @@ -1268,7 +1268,7 @@ void schedule(AstNetlist* netlistp) { const auto& actTimingDomains = timingKit.remapDomains(actTrigMap); // Create the inverse map from trigger ref AstSenTree to original AstSenTree - std::unordered_map trigToSenAct; + V3Order::TrigToSenMap trigToSenAct; invertAndMergeSenTreeMap(trigToSenAct, preTrigMap); invertAndMergeSenTreeMap(trigToSenAct, actTrigMap); @@ -1307,7 +1307,7 @@ void schedule(AstNetlist* netlistp) { for (LogicByScope* lbs : logic) remapSensitivities(*lbs, trigMap); // Create the inverse map from trigger ref AstSenTree to original AstSenTree - std::unordered_map trigToSen; + V3Order::TrigToSenMap trigToSen; invertAndMergeSenTreeMap(trigToSen, trigMap); AstSenTree* const dpiExportTriggered diff --git a/src/V3SchedPartition.cpp b/src/V3SchedPartition.cpp index 1b07fbb06..33d77bb3f 100644 --- a/src/V3SchedPartition.cpp +++ b/src/V3SchedPartition.cpp @@ -185,7 +185,6 @@ class SchedGraphBuilder final : public VNVisitor { // Clocked or hybrid logic has explicit sensitivity, so add edge from sensitivity vertex if (!m_senTreep->hasCombo()) { m_senTreep->foreach([this, nodep, logicVtxp](AstSenItem* senItemp) { - if (senItemp->isIllegal()) return; UASSERT_OBJ(senItemp->isClocked() || senItemp->isHybrid(), nodep, "Non-clocked SenItem under clocked SenTree"); V3GraphVertex* const eventVtxp = getSenVertex(senItemp); diff --git a/src/V3SenExprBuilder.h b/src/V3SenExprBuilder.h index 8d0bba03c..bcc4f1663 100644 --- a/src/V3SenExprBuilder.h +++ b/src/V3SenExprBuilder.h @@ -164,8 +164,6 @@ class SenExprBuilder final { // All event signals should be 1-bit at this point switch (senItemp->edgeType()) { - case VEdgeType::ET_ILLEGAL: - return {nullptr, false}; // We already warn for this in V3LinkResolve case VEdgeType::ET_CHANGED: case VEdgeType::ET_HYBRID: // if (VN_IS(senp->dtypep()->skipRefp(), UnpackArrayDType)) { diff --git a/test_regress/t/t_json_only_debugcheck.out b/test_regress/t/t_json_only_debugcheck.out index 0f7082b48..79ac0dff8 100644 --- a/test_regress/t/t_json_only_debugcheck.out +++ b/test_regress/t/t_json_only_debugcheck.out @@ -1122,271 +1122,296 @@ ],"elsesp": []} ],"finalsp": []}, {"type":"CFUNC","name":"_eval_act","addr":"(DR)","loc":"a,0:0,0:0","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [],"initsp": [],"stmtsp": [],"finalsp": []}, - {"type":"CFUNC","name":"_nba_sequent__TOP__0","addr":"(ER)","loc":"d,65:10,65:11","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [], - "initsp": [ - {"type":"VAR","name":"__Vdly__t.cyc","addr":"(FR)","loc":"d,23:17,23:20","dtypep":"(R)","origName":"__Vdly__t__DOT__cyc","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"BLOCKTEMP","dtypeName":"integer","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, - {"type":"CRESET","name":"","addr":"(GR)","loc":"d,23:17,23:20", - "varrefp": [ - {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(HR)","loc":"d,23:17,23:20","dtypep":"(R)","access":"WR","varp":"(FR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ]}, - {"type":"VAR","name":"__Vdly__t.e","addr":"(IR)","loc":"d,24:9,24:10","dtypep":"(M)","origName":"__Vdly__t__DOT__e","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"BLOCKTEMP","dtypeName":"my_t","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, - {"type":"CRESET","name":"","addr":"(JR)","loc":"d,24:9,24:10", - "varrefp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(KR)","loc":"d,24:9,24:10","dtypep":"(M)","access":"WR","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ]}, - {"type":"VAR","name":"__Vtemp_1","addr":"(LR)","loc":"d,68:126,68:130","dtypep":"(RB)","origName":"__Vtemp_1","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"STMTTEMP","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, - {"type":"VAR","name":"__Vtemp_2","addr":"(MR)","loc":"d,78:126,78:130","dtypep":"(RB)","origName":"__Vtemp_2","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"STMTTEMP","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, - {"type":"VAR","name":"__Vtemp_3","addr":"(NR)","loc":"d,88:126,88:130","dtypep":"(RB)","origName":"__Vtemp_3","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"STMTTEMP","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []} - ], + {"type":"CFUNC","name":"_eval_nba","addr":"(G)","loc":"a,0:0,0:0","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [],"initsp": [], "stmtsp": [ - {"type":"ASSIGNPRE","name":"","addr":"(OR)","loc":"d,65:10,65:11","dtypep":"(AC)", - "rhsp": [ - {"type":"VARREF","name":"t.e","addr":"(PR)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ], - "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(QR)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"WR","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ],"timingControlp": []}, - {"type":"ASSIGNPRE","name":"","addr":"(RR)","loc":"d,62:7,62:10","dtypep":"(R)", - "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(SR)","loc":"d,62:7,62:10","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ], - "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(TR)","loc":"d,62:7,62:10","dtypep":"(R)","access":"WR","varp":"(FR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ],"timingControlp": []}, - {"type":"ASSIGNDLY","name":"","addr":"(UR)","loc":"d,62:11,62:13","dtypep":"(R)", - "rhsp": [ - {"type":"ADD","name":"","addr":"(VR)","loc":"d,62:18,62:19","dtypep":"(R)", - "lhsp": [ - {"type":"CCAST","name":"","addr":"(WR)","loc":"d,62:20,62:21","dtypep":"(NC)","size":32, - "lhsp": [ - {"type":"CONST","name":"32'sh1","addr":"(XR)","loc":"d,62:20,62:21","dtypep":"(GB)"} - ]} - ], - "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(YR)","loc":"d,62:14,62:17","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ]} - ], - "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(ZR)","loc":"d,62:7,62:10","dtypep":"(R)","access":"WR","varp":"(FR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ],"timingControlp": []}, - {"type":"IF","name":"","addr":"(AS)","loc":"d,63:7,63:9", + {"type":"IF","name":"","addr":"(ER)","loc":"d,11:8,11:9", "condp": [ - {"type":"EQ","name":"","addr":"(BS)","loc":"d,63:14,63:16","dtypep":"(NB)", + {"type":"AND","name":"","addr":"(FR)","loc":"d,11:8,11:9","dtypep":"(HQ)", "lhsp": [ - {"type":"CONST","name":"32'sh0","addr":"(CS)","loc":"d,63:16,63:17","dtypep":"(GB)"} + {"type":"CONST","name":"64'h1","addr":"(GR)","loc":"d,11:8,11:9","dtypep":"(HQ)"} ], "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(DS)","loc":"d,63:11,63:14","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"CMETHODHARD","name":"word","addr":"(HR)","loc":"d,11:8,11:9","dtypep":"(KQ)", + "fromp": [ + {"type":"VARREF","name":"__VnbaTriggered","addr":"(IR)","loc":"d,11:8,11:9","dtypep":"(NB)","access":"RD","varp":"(W)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ], + "pinsp": [ + {"type":"CONST","name":"32'h0","addr":"(JR)","loc":"d,11:8,11:9","dtypep":"(NC)"} + ]} ]} ], "thensp": [ - {"type":"ASSIGNDLY","name":"","addr":"(ES)","loc":"d,65:12,65:14","dtypep":"(AC)", + {"type":"STMTEXPR","name":"","addr":"(KR)","loc":"d,65:10,65:11", + "exprp": [ + {"type":"CCALL","name":"","addr":"(LR)","loc":"d,65:10,65:11","dtypep":"(CB)","funcName":"_nba_sequent__TOP__0","funcp":"(MR)","argsp": []} + ]} + ],"elsesp": []} + ],"finalsp": []}, + {"type":"CFUNC","name":"_nba_sequent__TOP__0","addr":"(MR)","loc":"d,65:10,65:11","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [], + "initsp": [ + {"type":"VAR","name":"__Vdly__t.cyc","addr":"(NR)","loc":"d,23:17,23:20","dtypep":"(R)","origName":"__Vdly__t__DOT__cyc","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"BLOCKTEMP","dtypeName":"integer","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, + {"type":"CRESET","name":"","addr":"(OR)","loc":"d,23:17,23:20", + "varrefp": [ + {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(PR)","loc":"d,23:17,23:20","dtypep":"(R)","access":"WR","varp":"(NR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ]}, + {"type":"VAR","name":"__Vdly__t.e","addr":"(QR)","loc":"d,24:9,24:10","dtypep":"(M)","origName":"__Vdly__t__DOT__e","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"BLOCKTEMP","dtypeName":"my_t","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, + {"type":"CRESET","name":"","addr":"(RR)","loc":"d,24:9,24:10", + "varrefp": [ + {"type":"VARREF","name":"__Vdly__t.e","addr":"(SR)","loc":"d,24:9,24:10","dtypep":"(M)","access":"WR","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ]}, + {"type":"VAR","name":"__Vtemp_1","addr":"(TR)","loc":"d,68:126,68:130","dtypep":"(RB)","origName":"__Vtemp_1","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"STMTTEMP","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, + {"type":"VAR","name":"__Vtemp_2","addr":"(UR)","loc":"d,78:126,78:130","dtypep":"(RB)","origName":"__Vtemp_2","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"STMTTEMP","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, + {"type":"VAR","name":"__Vtemp_3","addr":"(VR)","loc":"d,88:126,88:130","dtypep":"(RB)","origName":"__Vtemp_3","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"STMTTEMP","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []} + ], + "stmtsp": [ + {"type":"ASSIGNPRE","name":"","addr":"(WR)","loc":"d,65:10,65:11","dtypep":"(AC)", + "rhsp": [ + {"type":"VARREF","name":"t.e","addr":"(XR)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ], + "lhsp": [ + {"type":"VARREF","name":"__Vdly__t.e","addr":"(YR)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"WR","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ],"timingControlp": []}, + {"type":"ASSIGNPRE","name":"","addr":"(ZR)","loc":"d,62:7,62:10","dtypep":"(R)", + "rhsp": [ + {"type":"VARREF","name":"t.cyc","addr":"(AS)","loc":"d,62:7,62:10","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ], + "lhsp": [ + {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(BS)","loc":"d,62:7,62:10","dtypep":"(R)","access":"WR","varp":"(NR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ],"timingControlp": []}, + {"type":"ASSIGNDLY","name":"","addr":"(CS)","loc":"d,62:11,62:13","dtypep":"(R)", + "rhsp": [ + {"type":"ADD","name":"","addr":"(DS)","loc":"d,62:18,62:19","dtypep":"(R)", + "lhsp": [ + {"type":"CCAST","name":"","addr":"(ES)","loc":"d,62:20,62:21","dtypep":"(NC)","size":32, + "lhsp": [ + {"type":"CONST","name":"32'sh1","addr":"(FS)","loc":"d,62:20,62:21","dtypep":"(GB)"} + ]} + ], "rhsp": [ - {"type":"CONST","name":"4'h1","addr":"(FS)","loc":"d,65:15,65:18","dtypep":"(AC)"} + {"type":"VARREF","name":"t.cyc","addr":"(GS)","loc":"d,62:14,62:17","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ]} + ], + "lhsp": [ + {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(HS)","loc":"d,62:7,62:10","dtypep":"(R)","access":"WR","varp":"(NR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ],"timingControlp": []}, + {"type":"IF","name":"","addr":"(IS)","loc":"d,63:7,63:9", + "condp": [ + {"type":"EQ","name":"","addr":"(JS)","loc":"d,63:14,63:16","dtypep":"(NB)", + "lhsp": [ + {"type":"CONST","name":"32'sh0","addr":"(KS)","loc":"d,63:16,63:17","dtypep":"(GB)"} + ], + "rhsp": [ + {"type":"VARREF","name":"t.cyc","addr":"(LS)","loc":"d,63:11,63:14","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ]} + ], + "thensp": [ + {"type":"ASSIGNDLY","name":"","addr":"(MS)","loc":"d,65:12,65:14","dtypep":"(AC)", + "rhsp": [ + {"type":"CONST","name":"4'h1","addr":"(NS)","loc":"d,65:15,65:18","dtypep":"(AC)"} ], "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(GS)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"WR","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vdly__t.e","addr":"(OS)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"WR","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ], "elsesp": [ - {"type":"IF","name":"","addr":"(HS)","loc":"d,67:12,67:14", + {"type":"IF","name":"","addr":"(PS)","loc":"d,67:12,67:14", "condp": [ - {"type":"EQ","name":"","addr":"(IS)","loc":"d,67:19,67:21","dtypep":"(NB)", + {"type":"EQ","name":"","addr":"(QS)","loc":"d,67:19,67:21","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"32'sh1","addr":"(JS)","loc":"d,67:21,67:22","dtypep":"(GB)"} + {"type":"CONST","name":"32'sh1","addr":"(RS)","loc":"d,67:21,67:22","dtypep":"(GB)"} ], "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(KS)","loc":"d,67:16,67:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.cyc","addr":"(SS)","loc":"d,67:16,67:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ], "thensp": [ - {"type":"IF","name":"","addr":"(LS)","loc":"d,68:13,68:15", + {"type":"IF","name":"","addr":"(TS)","loc":"d,68:13,68:15", "condp": [ - {"type":"NEQN","name":"","addr":"(MS)","loc":"d,68:26,68:29","dtypep":"(NB)", + {"type":"NEQN","name":"","addr":"(US)","loc":"d,68:26,68:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"\\\"E01\\\"","addr":"(NS)","loc":"d,68:31,68:36","dtypep":"(RB)"} + {"type":"CONST","name":"\\\"E01\\\"","addr":"(VS)","loc":"d,68:31,68:36","dtypep":"(RB)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(OS)","loc":"d,68:20,68:24","dtypep":"(RB)", + {"type":"ARRAYSEL","name":"","addr":"(WS)","loc":"d,68:20,68:24","dtypep":"(RB)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(PS)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(XS)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(QS)","loc":"d,68:20,68:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(YS)","loc":"d,68:20,68:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(RS)","loc":"d,68:20,68:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(ZS)","loc":"d,68:20,68:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(SS)","loc":"d,68:18,68:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(AT)","loc":"d,68:18,68:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(TS)","loc":"d,68:18,68:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(BT)","loc":"d,68:18,68:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"ASSIGN","name":"","addr":"(US)","loc":"d,68:126,68:130","dtypep":"(RB)", + {"type":"ASSIGN","name":"","addr":"(CT)","loc":"d,68:126,68:130","dtypep":"(RB)", "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(VS)","loc":"d,68:126,68:130","dtypep":"(RB)", + {"type":"ARRAYSEL","name":"","addr":"(DT)","loc":"d,68:126,68:130","dtypep":"(RB)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(WS)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(ET)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(XS)","loc":"d,68:126,68:130","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(FT)","loc":"d,68:126,68:130","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(YS)","loc":"d,68:126,68:130","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(GT)","loc":"d,68:126,68:130","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(ZS)","loc":"d,68:124,68:125","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(HT)","loc":"d,68:124,68:125","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(AT)","loc":"d,68:124,68:125","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(IT)","loc":"d,68:124,68:125","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ], "lhsp": [ - {"type":"VARREF","name":"__Vtemp_1","addr":"(BT)","loc":"d,68:126,68:130","dtypep":"(RB)","access":"WR","varp":"(LR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vtemp_1","addr":"(JT)","loc":"d,68:126,68:130","dtypep":"(RB)","access":"WR","varp":"(TR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"DISPLAY","name":"","addr":"(CT)","loc":"d,68:45,68:51", + {"type":"DISPLAY","name":"","addr":"(KT)","loc":"d,68:45,68:51", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:68: got='%@' exp='E01'\\n","addr":"(DT)","loc":"d,68:45,68:51","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:68: got='%@' exp='E01'\\n","addr":"(LT)","loc":"d,68:45,68:51","dtypep":"(RB)", "exprsp": [ - {"type":"VARREF","name":"__Vtemp_1","addr":"(ET)","loc":"d,68:126,68:130","dtypep":"(RB)","access":"RD","varp":"(LR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vtemp_1","addr":"(MT)","loc":"d,68:126,68:130","dtypep":"(RB)","access":"RD","varp":"(TR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(FT)","loc":"d,68:143,68:148"} + {"type":"STOP","name":"","addr":"(NT)","loc":"d,68:143,68:148"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(GT)","loc":"d,69:13,69:15", + {"type":"IF","name":"","addr":"(OT)","loc":"d,69:13,69:15", "condp": [ - {"type":"NEQ","name":"","addr":"(HT)","loc":"d,69:26,69:29","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(PT)","loc":"d,69:26,69:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h3","addr":"(IT)","loc":"d,69:31,69:34","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(QT)","loc":"d,69:31,69:34","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(JT)","loc":"d,69:20,69:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(RT)","loc":"d,69:20,69:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KT)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(ST)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(LT)","loc":"d,69:20,69:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(TT)","loc":"d,69:20,69:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(MT)","loc":"d,69:20,69:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(UT)","loc":"d,69:20,69:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(NT)","loc":"d,69:18,69:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(VT)","loc":"d,69:18,69:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(OT)","loc":"d,69:18,69:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(WT)","loc":"d,69:18,69:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(PT)","loc":"d,69:43,69:49", + {"type":"DISPLAY","name":"","addr":"(XT)","loc":"d,69:43,69:49", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:69: got='h%x exp='h3\\n","addr":"(QT)","loc":"d,69:43,69:49","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:69: got='h%x exp='h3\\n","addr":"(YT)","loc":"d,69:43,69:49","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(RT)","loc":"d,69:124,69:128","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(ZT)","loc":"d,69:124,69:128","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(ST)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(AU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(TT)","loc":"d,69:124,69:128","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(BU)","loc":"d,69:124,69:128","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(UT)","loc":"d,69:124,69:128","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(CU)","loc":"d,69:124,69:128","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(VT)","loc":"d,69:122,69:123","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(DU)","loc":"d,69:122,69:123","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(WT)","loc":"d,69:122,69:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(EU)","loc":"d,69:122,69:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(XT)","loc":"d,69:139,69:144"} + {"type":"STOP","name":"","addr":"(FU)","loc":"d,69:139,69:144"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(YT)","loc":"d,70:13,70:15", + {"type":"IF","name":"","addr":"(GU)","loc":"d,70:13,70:15", "condp": [ - {"type":"NEQ","name":"","addr":"(ZT)","loc":"d,70:29,70:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(HU)","loc":"d,70:29,70:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h3","addr":"(AU)","loc":"d,70:34,70:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(IU)","loc":"d,70:34,70:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(BU)","loc":"d,70:20,70:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(JU)","loc":"d,70:20,70:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(DU)","loc":"d,70:20,70:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(LU)","loc":"d,70:20,70:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(EU)","loc":"d,70:20,70:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(MU)","loc":"d,70:20,70:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(FU)","loc":"d,70:18,70:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(NU)","loc":"d,70:18,70:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(GU)","loc":"d,70:18,70:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(OU)","loc":"d,70:18,70:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(HU)","loc":"d,70:46,70:52", + {"type":"DISPLAY","name":"","addr":"(PU)","loc":"d,70:46,70:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:70: got='h%x exp='h3\\n","addr":"(IU)","loc":"d,70:46,70:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:70: got='h%x exp='h3\\n","addr":"(QU)","loc":"d,70:46,70:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(JU)","loc":"d,70:127,70:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(RU)","loc":"d,70:127,70:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(SU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(LU)","loc":"d,70:127,70:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(TU)","loc":"d,70:127,70:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(MU)","loc":"d,70:127,70:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(UU)","loc":"d,70:127,70:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(NU)","loc":"d,70:125,70:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(VU)","loc":"d,70:125,70:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(OU)","loc":"d,70:125,70:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(WU)","loc":"d,70:125,70:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(PU)","loc":"d,70:145,70:150"} + {"type":"STOP","name":"","addr":"(XU)","loc":"d,70:145,70:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(QU)","loc":"d,71:13,71:15", + {"type":"IF","name":"","addr":"(YU)","loc":"d,71:13,71:15", "condp": [ - {"type":"NEQ","name":"","addr":"(RU)","loc":"d,71:29,71:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(ZU)","loc":"d,71:29,71:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h4","addr":"(SU)","loc":"d,71:34,71:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(AV)","loc":"d,71:34,71:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(TU)","loc":"d,71:20,71:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(BV)","loc":"d,71:20,71:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(UU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CV)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VU)","loc":"d,71:20,71:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DV)","loc":"d,71:20,71:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WU)","loc":"d,71:20,71:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EV)","loc":"d,71:20,71:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(XU)","loc":"d,71:20,71:24","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(FV)","loc":"d,71:20,71:24","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(YU)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GV)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(ZU)","loc":"d,71:20,71:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(HV)","loc":"d,71:20,71:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(AV)","loc":"d,71:20,71:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(IV)","loc":"d,71:20,71:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(BV)","loc":"d,71:18,71:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(JV)","loc":"d,71:18,71:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(CV)","loc":"d,71:18,71:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(KV)","loc":"d,71:18,71:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1395,33 +1420,33 @@ ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(DV)","loc":"d,71:46,71:52", + {"type":"DISPLAY","name":"","addr":"(LV)","loc":"d,71:46,71:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:71: got='h%x exp='h4\\n","addr":"(EV)","loc":"d,71:46,71:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:71: got='h%x exp='h4\\n","addr":"(MV)","loc":"d,71:46,71:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(FV)","loc":"d,71:127,71:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(NV)","loc":"d,71:127,71:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GV)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(OV)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(HV)","loc":"d,71:127,71:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(PV)","loc":"d,71:127,71:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(IV)","loc":"d,71:127,71:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(QV)","loc":"d,71:127,71:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(JV)","loc":"d,71:127,71:131","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(RV)","loc":"d,71:127,71:131","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KV)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(SV)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(LV)","loc":"d,71:127,71:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(TV)","loc":"d,71:127,71:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(MV)","loc":"d,71:127,71:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(UV)","loc":"d,71:127,71:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(NV)","loc":"d,71:125,71:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(VV)","loc":"d,71:125,71:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(OV)","loc":"d,71:125,71:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(WV)","loc":"d,71:125,71:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1429,138 +1454,138 @@ ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(PV)","loc":"d,71:145,71:150"} + {"type":"STOP","name":"","addr":"(XV)","loc":"d,71:145,71:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(QV)","loc":"d,72:13,72:15", + {"type":"IF","name":"","addr":"(YV)","loc":"d,72:13,72:15", "condp": [ - {"type":"NEQ","name":"","addr":"(RV)","loc":"d,72:26,72:29","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(ZV)","loc":"d,72:26,72:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h4","addr":"(SV)","loc":"d,72:31,72:34","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(AW)","loc":"d,72:31,72:34","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(TV)","loc":"d,72:20,72:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(BW)","loc":"d,72:20,72:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UV)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(CW)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VV)","loc":"d,72:20,72:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DW)","loc":"d,72:20,72:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WV)","loc":"d,72:20,72:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EW)","loc":"d,72:20,72:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(XV)","loc":"d,72:18,72:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(FW)","loc":"d,72:18,72:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(YV)","loc":"d,72:18,72:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(GW)","loc":"d,72:18,72:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(ZV)","loc":"d,72:43,72:49", + {"type":"DISPLAY","name":"","addr":"(HW)","loc":"d,72:43,72:49", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:72: got='h%x exp='h4\\n","addr":"(AW)","loc":"d,72:43,72:49","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:72: got='h%x exp='h4\\n","addr":"(IW)","loc":"d,72:43,72:49","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(BW)","loc":"d,72:124,72:128","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(JW)","loc":"d,72:124,72:128","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(CW)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(KW)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(DW)","loc":"d,72:124,72:128","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(LW)","loc":"d,72:124,72:128","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(EW)","loc":"d,72:124,72:128","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(MW)","loc":"d,72:124,72:128","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(FW)","loc":"d,72:122,72:123","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(NW)","loc":"d,72:122,72:123","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(GW)","loc":"d,72:122,72:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(OW)","loc":"d,72:122,72:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(HW)","loc":"d,72:139,72:144"} + {"type":"STOP","name":"","addr":"(PW)","loc":"d,72:139,72:144"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(IW)","loc":"d,73:13,73:15", + {"type":"IF","name":"","addr":"(QW)","loc":"d,73:13,73:15", "condp": [ - {"type":"NEQ","name":"","addr":"(JW)","loc":"d,73:29,73:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(RW)","loc":"d,73:29,73:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h4","addr":"(KW)","loc":"d,73:34,73:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(SW)","loc":"d,73:34,73:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(LW)","loc":"d,73:20,73:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(TW)","loc":"d,73:20,73:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MW)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UW)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(NW)","loc":"d,73:20,73:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(VW)","loc":"d,73:20,73:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(OW)","loc":"d,73:20,73:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(WW)","loc":"d,73:20,73:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(PW)","loc":"d,73:18,73:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(XW)","loc":"d,73:18,73:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(QW)","loc":"d,73:18,73:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(YW)","loc":"d,73:18,73:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(RW)","loc":"d,73:46,73:52", + {"type":"DISPLAY","name":"","addr":"(ZW)","loc":"d,73:46,73:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:73: got='h%x exp='h4\\n","addr":"(SW)","loc":"d,73:46,73:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:73: got='h%x exp='h4\\n","addr":"(AX)","loc":"d,73:46,73:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(TW)","loc":"d,73:127,73:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(BX)","loc":"d,73:127,73:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UW)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(CX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VW)","loc":"d,73:127,73:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DX)","loc":"d,73:127,73:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WW)","loc":"d,73:127,73:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EX)","loc":"d,73:127,73:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(XW)","loc":"d,73:125,73:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(FX)","loc":"d,73:125,73:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(YW)","loc":"d,73:125,73:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(GX)","loc":"d,73:125,73:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(ZW)","loc":"d,73:145,73:150"} + {"type":"STOP","name":"","addr":"(HX)","loc":"d,73:145,73:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(AX)","loc":"d,74:13,74:15", + {"type":"IF","name":"","addr":"(IX)","loc":"d,74:13,74:15", "condp": [ - {"type":"NEQ","name":"","addr":"(BX)","loc":"d,74:29,74:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(JX)","loc":"d,74:29,74:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h3","addr":"(CX)","loc":"d,74:34,74:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(KX)","loc":"d,74:34,74:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(DX)","loc":"d,74:20,74:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(LX)","loc":"d,74:20,74:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(EX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(FX)","loc":"d,74:20,74:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(NX)","loc":"d,74:20,74:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(GX)","loc":"d,74:20,74:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(OX)","loc":"d,74:20,74:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(HX)","loc":"d,74:20,74:24","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(PX)","loc":"d,74:20,74:24","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(IX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(JX)","loc":"d,74:20,74:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(RX)","loc":"d,74:20,74:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(KX)","loc":"d,74:20,74:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(SX)","loc":"d,74:20,74:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(LX)","loc":"d,74:18,74:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(TX)","loc":"d,74:18,74:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(MX)","loc":"d,74:18,74:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(UX)","loc":"d,74:18,74:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1569,33 +1594,33 @@ ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(NX)","loc":"d,74:46,74:52", + {"type":"DISPLAY","name":"","addr":"(VX)","loc":"d,74:46,74:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:74: got='h%x exp='h3\\n","addr":"(OX)","loc":"d,74:46,74:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:74: got='h%x exp='h3\\n","addr":"(WX)","loc":"d,74:46,74:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(PX)","loc":"d,74:127,74:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(XX)","loc":"d,74:127,74:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(YX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(RX)","loc":"d,74:127,74:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(ZX)","loc":"d,74:127,74:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(SX)","loc":"d,74:127,74:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(AY)","loc":"d,74:127,74:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(TX)","loc":"d,74:127,74:131","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(BY)","loc":"d,74:127,74:131","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UX)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(CY)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VX)","loc":"d,74:127,74:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DY)","loc":"d,74:127,74:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WX)","loc":"d,74:127,74:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EY)","loc":"d,74:127,74:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(XX)","loc":"d,74:125,74:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(FY)","loc":"d,74:125,74:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(YX)","loc":"d,74:125,74:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(GY)","loc":"d,74:125,74:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1603,215 +1628,215 @@ ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(ZX)","loc":"d,74:145,74:150"} + {"type":"STOP","name":"","addr":"(HY)","loc":"d,74:145,74:150"} ],"elsesp": []}, - {"type":"ASSIGNDLY","name":"","addr":"(AY)","loc":"d,75:12,75:14","dtypep":"(AC)", + {"type":"ASSIGNDLY","name":"","addr":"(IY)","loc":"d,75:12,75:14","dtypep":"(AC)", "rhsp": [ - {"type":"CONST","name":"4'h3","addr":"(BY)","loc":"d,75:15,75:18","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(JY)","loc":"d,75:15,75:18","dtypep":"(AC)"} ], "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(CY)","loc":"d,75:10,75:11","dtypep":"(AC)","access":"WR","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vdly__t.e","addr":"(KY)","loc":"d,75:10,75:11","dtypep":"(AC)","access":"WR","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ], "elsesp": [ - {"type":"IF","name":"","addr":"(DY)","loc":"d,77:12,77:14", + {"type":"IF","name":"","addr":"(LY)","loc":"d,77:12,77:14", "condp": [ - {"type":"EQ","name":"","addr":"(EY)","loc":"d,77:19,77:21","dtypep":"(NB)", + {"type":"EQ","name":"","addr":"(MY)","loc":"d,77:19,77:21","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"32'sh2","addr":"(FY)","loc":"d,77:21,77:22","dtypep":"(GB)"} + {"type":"CONST","name":"32'sh2","addr":"(NY)","loc":"d,77:21,77:22","dtypep":"(GB)"} ], "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(GY)","loc":"d,77:16,77:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.cyc","addr":"(OY)","loc":"d,77:16,77:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ], "thensp": [ - {"type":"IF","name":"","addr":"(HY)","loc":"d,78:13,78:15", + {"type":"IF","name":"","addr":"(PY)","loc":"d,78:13,78:15", "condp": [ - {"type":"NEQN","name":"","addr":"(IY)","loc":"d,78:26,78:29","dtypep":"(NB)", + {"type":"NEQN","name":"","addr":"(QY)","loc":"d,78:26,78:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"\\\"E03\\\"","addr":"(JY)","loc":"d,78:31,78:36","dtypep":"(RB)"} + {"type":"CONST","name":"\\\"E03\\\"","addr":"(RY)","loc":"d,78:31,78:36","dtypep":"(RB)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(KY)","loc":"d,78:20,78:24","dtypep":"(RB)", + {"type":"ARRAYSEL","name":"","addr":"(SY)","loc":"d,78:20,78:24","dtypep":"(RB)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(LY)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(TY)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(MY)","loc":"d,78:20,78:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(UY)","loc":"d,78:20,78:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(NY)","loc":"d,78:20,78:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(VY)","loc":"d,78:20,78:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(OY)","loc":"d,78:18,78:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(WY)","loc":"d,78:18,78:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(PY)","loc":"d,78:18,78:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(XY)","loc":"d,78:18,78:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"ASSIGN","name":"","addr":"(QY)","loc":"d,78:126,78:130","dtypep":"(RB)", + {"type":"ASSIGN","name":"","addr":"(YY)","loc":"d,78:126,78:130","dtypep":"(RB)", "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(RY)","loc":"d,78:126,78:130","dtypep":"(RB)", + {"type":"ARRAYSEL","name":"","addr":"(ZY)","loc":"d,78:126,78:130","dtypep":"(RB)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(SY)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(AZ)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(TY)","loc":"d,78:126,78:130","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(BZ)","loc":"d,78:126,78:130","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(UY)","loc":"d,78:126,78:130","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(CZ)","loc":"d,78:126,78:130","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(VY)","loc":"d,78:124,78:125","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(DZ)","loc":"d,78:124,78:125","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(WY)","loc":"d,78:124,78:125","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(EZ)","loc":"d,78:124,78:125","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ], "lhsp": [ - {"type":"VARREF","name":"__Vtemp_2","addr":"(XY)","loc":"d,78:126,78:130","dtypep":"(RB)","access":"WR","varp":"(MR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vtemp_2","addr":"(FZ)","loc":"d,78:126,78:130","dtypep":"(RB)","access":"WR","varp":"(UR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"DISPLAY","name":"","addr":"(YY)","loc":"d,78:45,78:51", + {"type":"DISPLAY","name":"","addr":"(GZ)","loc":"d,78:45,78:51", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:78: got='%@' exp='E03'\\n","addr":"(ZY)","loc":"d,78:45,78:51","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:78: got='%@' exp='E03'\\n","addr":"(HZ)","loc":"d,78:45,78:51","dtypep":"(RB)", "exprsp": [ - {"type":"VARREF","name":"__Vtemp_2","addr":"(AZ)","loc":"d,78:126,78:130","dtypep":"(RB)","access":"RD","varp":"(MR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vtemp_2","addr":"(IZ)","loc":"d,78:126,78:130","dtypep":"(RB)","access":"RD","varp":"(UR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(BZ)","loc":"d,78:143,78:148"} + {"type":"STOP","name":"","addr":"(JZ)","loc":"d,78:143,78:148"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(CZ)","loc":"d,79:13,79:15", + {"type":"IF","name":"","addr":"(KZ)","loc":"d,79:13,79:15", "condp": [ - {"type":"NEQ","name":"","addr":"(DZ)","loc":"d,79:26,79:29","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(LZ)","loc":"d,79:26,79:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h4","addr":"(EZ)","loc":"d,79:31,79:34","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(MZ)","loc":"d,79:31,79:34","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(FZ)","loc":"d,79:20,79:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(NZ)","loc":"d,79:20,79:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GZ)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(OZ)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(HZ)","loc":"d,79:20,79:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(PZ)","loc":"d,79:20,79:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(IZ)","loc":"d,79:20,79:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(QZ)","loc":"d,79:20,79:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(JZ)","loc":"d,79:18,79:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(RZ)","loc":"d,79:18,79:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(KZ)","loc":"d,79:18,79:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(SZ)","loc":"d,79:18,79:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(LZ)","loc":"d,79:43,79:49", + {"type":"DISPLAY","name":"","addr":"(TZ)","loc":"d,79:43,79:49", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:79: got='h%x exp='h4\\n","addr":"(MZ)","loc":"d,79:43,79:49","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:79: got='h%x exp='h4\\n","addr":"(UZ)","loc":"d,79:43,79:49","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(NZ)","loc":"d,79:124,79:128","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(VZ)","loc":"d,79:124,79:128","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(OZ)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(WZ)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(PZ)","loc":"d,79:124,79:128","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(XZ)","loc":"d,79:124,79:128","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(QZ)","loc":"d,79:124,79:128","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(YZ)","loc":"d,79:124,79:128","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(RZ)","loc":"d,79:122,79:123","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(ZZ)","loc":"d,79:122,79:123","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(SZ)","loc":"d,79:122,79:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(AAB)","loc":"d,79:122,79:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(TZ)","loc":"d,79:139,79:144"} + {"type":"STOP","name":"","addr":"(BAB)","loc":"d,79:139,79:144"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(UZ)","loc":"d,80:13,80:15", + {"type":"IF","name":"","addr":"(CAB)","loc":"d,80:13,80:15", "condp": [ - {"type":"NEQ","name":"","addr":"(VZ)","loc":"d,80:29,80:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(DAB)","loc":"d,80:29,80:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h4","addr":"(WZ)","loc":"d,80:34,80:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(EAB)","loc":"d,80:34,80:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(XZ)","loc":"d,80:20,80:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(FAB)","loc":"d,80:20,80:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(YZ)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GAB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(ZZ)","loc":"d,80:20,80:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(HAB)","loc":"d,80:20,80:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(AAB)","loc":"d,80:20,80:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(IAB)","loc":"d,80:20,80:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(BAB)","loc":"d,80:18,80:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(JAB)","loc":"d,80:18,80:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(CAB)","loc":"d,80:18,80:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(KAB)","loc":"d,80:18,80:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(DAB)","loc":"d,80:46,80:52", + {"type":"DISPLAY","name":"","addr":"(LAB)","loc":"d,80:46,80:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:80: got='h%x exp='h4\\n","addr":"(EAB)","loc":"d,80:46,80:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:80: got='h%x exp='h4\\n","addr":"(MAB)","loc":"d,80:46,80:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(FAB)","loc":"d,80:127,80:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(NAB)","loc":"d,80:127,80:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GAB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(OAB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(HAB)","loc":"d,80:127,80:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(PAB)","loc":"d,80:127,80:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(IAB)","loc":"d,80:127,80:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(QAB)","loc":"d,80:127,80:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(JAB)","loc":"d,80:125,80:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(RAB)","loc":"d,80:125,80:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(KAB)","loc":"d,80:125,80:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(SAB)","loc":"d,80:125,80:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(LAB)","loc":"d,80:145,80:150"} + {"type":"STOP","name":"","addr":"(TAB)","loc":"d,80:145,80:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(MAB)","loc":"d,81:13,81:15", + {"type":"IF","name":"","addr":"(UAB)","loc":"d,81:13,81:15", "condp": [ - {"type":"NEQ","name":"","addr":"(NAB)","loc":"d,81:29,81:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(VAB)","loc":"d,81:29,81:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h1","addr":"(OAB)","loc":"d,81:34,81:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(WAB)","loc":"d,81:34,81:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(PAB)","loc":"d,81:20,81:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(XAB)","loc":"d,81:20,81:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(QAB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(YAB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(RAB)","loc":"d,81:20,81:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(ZAB)","loc":"d,81:20,81:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(SAB)","loc":"d,81:20,81:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(ABB)","loc":"d,81:20,81:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(TAB)","loc":"d,81:20,81:24","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(BBB)","loc":"d,81:20,81:24","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(UAB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CBB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VAB)","loc":"d,81:20,81:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DBB)","loc":"d,81:20,81:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WAB)","loc":"d,81:20,81:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EBB)","loc":"d,81:20,81:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(XAB)","loc":"d,81:18,81:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(FBB)","loc":"d,81:18,81:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(YAB)","loc":"d,81:18,81:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(GBB)","loc":"d,81:18,81:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1820,33 +1845,33 @@ ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(ZAB)","loc":"d,81:46,81:52", + {"type":"DISPLAY","name":"","addr":"(HBB)","loc":"d,81:46,81:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:81: got='h%x exp='h1\\n","addr":"(ABB)","loc":"d,81:46,81:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:81: got='h%x exp='h1\\n","addr":"(IBB)","loc":"d,81:46,81:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(BBB)","loc":"d,81:127,81:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(JBB)","loc":"d,81:127,81:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CBB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KBB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(DBB)","loc":"d,81:127,81:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(LBB)","loc":"d,81:127,81:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(EBB)","loc":"d,81:127,81:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(MBB)","loc":"d,81:127,81:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(FBB)","loc":"d,81:127,81:131","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(NBB)","loc":"d,81:127,81:131","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GBB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(OBB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(HBB)","loc":"d,81:127,81:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(PBB)","loc":"d,81:127,81:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(IBB)","loc":"d,81:127,81:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(QBB)","loc":"d,81:127,81:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(JBB)","loc":"d,81:125,81:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(RBB)","loc":"d,81:125,81:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(KBB)","loc":"d,81:125,81:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(SBB)","loc":"d,81:125,81:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1854,138 +1879,138 @@ ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(LBB)","loc":"d,81:145,81:150"} + {"type":"STOP","name":"","addr":"(TBB)","loc":"d,81:145,81:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(MBB)","loc":"d,82:13,82:15", + {"type":"IF","name":"","addr":"(UBB)","loc":"d,82:13,82:15", "condp": [ - {"type":"NEQ","name":"","addr":"(NBB)","loc":"d,82:26,82:29","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(VBB)","loc":"d,82:26,82:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h1","addr":"(OBB)","loc":"d,82:31,82:34","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(WBB)","loc":"d,82:31,82:34","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(PBB)","loc":"d,82:20,82:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(XBB)","loc":"d,82:20,82:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QBB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(YBB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(RBB)","loc":"d,82:20,82:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(ZBB)","loc":"d,82:20,82:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(SBB)","loc":"d,82:20,82:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(ACB)","loc":"d,82:20,82:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(TBB)","loc":"d,82:18,82:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(BCB)","loc":"d,82:18,82:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(UBB)","loc":"d,82:18,82:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(CCB)","loc":"d,82:18,82:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(VBB)","loc":"d,82:43,82:49", + {"type":"DISPLAY","name":"","addr":"(DCB)","loc":"d,82:43,82:49", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:82: got='h%x exp='h1\\n","addr":"(WBB)","loc":"d,82:43,82:49","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:82: got='h%x exp='h1\\n","addr":"(ECB)","loc":"d,82:43,82:49","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(XBB)","loc":"d,82:124,82:128","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(FCB)","loc":"d,82:124,82:128","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(YBB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(GCB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(ZBB)","loc":"d,82:124,82:128","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(HCB)","loc":"d,82:124,82:128","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(ACB)","loc":"d,82:124,82:128","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(ICB)","loc":"d,82:124,82:128","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(BCB)","loc":"d,82:122,82:123","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(JCB)","loc":"d,82:122,82:123","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(CCB)","loc":"d,82:122,82:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(KCB)","loc":"d,82:122,82:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(DCB)","loc":"d,82:139,82:144"} + {"type":"STOP","name":"","addr":"(LCB)","loc":"d,82:139,82:144"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(ECB)","loc":"d,83:13,83:15", + {"type":"IF","name":"","addr":"(MCB)","loc":"d,83:13,83:15", "condp": [ - {"type":"NEQ","name":"","addr":"(FCB)","loc":"d,83:29,83:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(NCB)","loc":"d,83:29,83:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h1","addr":"(GCB)","loc":"d,83:34,83:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(OCB)","loc":"d,83:34,83:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(HCB)","loc":"d,83:20,83:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(PCB)","loc":"d,83:20,83:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(ICB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QCB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(JCB)","loc":"d,83:20,83:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(RCB)","loc":"d,83:20,83:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(KCB)","loc":"d,83:20,83:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(SCB)","loc":"d,83:20,83:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(LCB)","loc":"d,83:18,83:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(TCB)","loc":"d,83:18,83:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(MCB)","loc":"d,83:18,83:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(UCB)","loc":"d,83:18,83:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(NCB)","loc":"d,83:46,83:52", + {"type":"DISPLAY","name":"","addr":"(VCB)","loc":"d,83:46,83:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:83: got='h%x exp='h1\\n","addr":"(OCB)","loc":"d,83:46,83:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:83: got='h%x exp='h1\\n","addr":"(WCB)","loc":"d,83:46,83:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(PCB)","loc":"d,83:127,83:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(XCB)","loc":"d,83:127,83:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QCB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(YCB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(RCB)","loc":"d,83:127,83:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(ZCB)","loc":"d,83:127,83:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(SCB)","loc":"d,83:127,83:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(ADB)","loc":"d,83:127,83:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(TCB)","loc":"d,83:125,83:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(BDB)","loc":"d,83:125,83:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(UCB)","loc":"d,83:125,83:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(CDB)","loc":"d,83:125,83:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(VCB)","loc":"d,83:145,83:150"} + {"type":"STOP","name":"","addr":"(DDB)","loc":"d,83:145,83:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(WCB)","loc":"d,84:13,84:15", + {"type":"IF","name":"","addr":"(EDB)","loc":"d,84:13,84:15", "condp": [ - {"type":"NEQ","name":"","addr":"(XCB)","loc":"d,84:29,84:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(FDB)","loc":"d,84:29,84:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h4","addr":"(YCB)","loc":"d,84:34,84:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(GDB)","loc":"d,84:34,84:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(ZCB)","loc":"d,84:20,84:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(HDB)","loc":"d,84:20,84:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(ADB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(IDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(BDB)","loc":"d,84:20,84:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(JDB)","loc":"d,84:20,84:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(CDB)","loc":"d,84:20,84:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(KDB)","loc":"d,84:20,84:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(DDB)","loc":"d,84:20,84:24","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(LDB)","loc":"d,84:20,84:24","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(EDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(FDB)","loc":"d,84:20,84:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(NDB)","loc":"d,84:20,84:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(GDB)","loc":"d,84:20,84:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(ODB)","loc":"d,84:20,84:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(HDB)","loc":"d,84:18,84:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(PDB)","loc":"d,84:18,84:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(IDB)","loc":"d,84:18,84:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(QDB)","loc":"d,84:18,84:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -1994,33 +2019,33 @@ ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(JDB)","loc":"d,84:46,84:52", + {"type":"DISPLAY","name":"","addr":"(RDB)","loc":"d,84:46,84:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:84: got='h%x exp='h4\\n","addr":"(KDB)","loc":"d,84:46,84:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:84: got='h%x exp='h4\\n","addr":"(SDB)","loc":"d,84:46,84:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(LDB)","loc":"d,84:127,84:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(TDB)","loc":"d,84:127,84:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(NDB)","loc":"d,84:127,84:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(VDB)","loc":"d,84:127,84:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(ODB)","loc":"d,84:127,84:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(WDB)","loc":"d,84:127,84:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(PDB)","loc":"d,84:127,84:131","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(XDB)","loc":"d,84:127,84:131","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(YDB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(RDB)","loc":"d,84:127,84:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(ZDB)","loc":"d,84:127,84:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(SDB)","loc":"d,84:127,84:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(AEB)","loc":"d,84:127,84:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(TDB)","loc":"d,84:125,84:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(BEB)","loc":"d,84:125,84:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(UDB)","loc":"d,84:125,84:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(CEB)","loc":"d,84:125,84:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -2028,215 +2053,215 @@ ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(VDB)","loc":"d,84:145,84:150"} + {"type":"STOP","name":"","addr":"(DEB)","loc":"d,84:145,84:150"} ],"elsesp": []}, - {"type":"ASSIGNDLY","name":"","addr":"(WDB)","loc":"d,85:12,85:14","dtypep":"(AC)", + {"type":"ASSIGNDLY","name":"","addr":"(EEB)","loc":"d,85:12,85:14","dtypep":"(AC)", "rhsp": [ - {"type":"CONST","name":"4'h4","addr":"(XDB)","loc":"d,85:15,85:18","dtypep":"(AC)"} + {"type":"CONST","name":"4'h4","addr":"(FEB)","loc":"d,85:15,85:18","dtypep":"(AC)"} ], "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(YDB)","loc":"d,85:10,85:11","dtypep":"(AC)","access":"WR","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vdly__t.e","addr":"(GEB)","loc":"d,85:10,85:11","dtypep":"(AC)","access":"WR","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ], "elsesp": [ - {"type":"IF","name":"","addr":"(ZDB)","loc":"d,87:12,87:14", + {"type":"IF","name":"","addr":"(HEB)","loc":"d,87:12,87:14", "condp": [ - {"type":"EQ","name":"","addr":"(AEB)","loc":"d,87:19,87:21","dtypep":"(NB)", + {"type":"EQ","name":"","addr":"(IEB)","loc":"d,87:19,87:21","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"32'sh3","addr":"(BEB)","loc":"d,87:21,87:22","dtypep":"(GB)"} + {"type":"CONST","name":"32'sh3","addr":"(JEB)","loc":"d,87:21,87:22","dtypep":"(GB)"} ], "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(CEB)","loc":"d,87:16,87:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.cyc","addr":"(KEB)","loc":"d,87:16,87:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ], "thensp": [ - {"type":"IF","name":"","addr":"(DEB)","loc":"d,88:13,88:15", + {"type":"IF","name":"","addr":"(LEB)","loc":"d,88:13,88:15", "condp": [ - {"type":"NEQN","name":"","addr":"(EEB)","loc":"d,88:26,88:29","dtypep":"(NB)", + {"type":"NEQN","name":"","addr":"(MEB)","loc":"d,88:26,88:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"\\\"E04\\\"","addr":"(FEB)","loc":"d,88:31,88:36","dtypep":"(RB)"} + {"type":"CONST","name":"\\\"E04\\\"","addr":"(NEB)","loc":"d,88:31,88:36","dtypep":"(RB)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(GEB)","loc":"d,88:20,88:24","dtypep":"(RB)", + {"type":"ARRAYSEL","name":"","addr":"(OEB)","loc":"d,88:20,88:24","dtypep":"(RB)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(HEB)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(PEB)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(IEB)","loc":"d,88:20,88:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(QEB)","loc":"d,88:20,88:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(JEB)","loc":"d,88:20,88:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(REB)","loc":"d,88:20,88:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(KEB)","loc":"d,88:18,88:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(SEB)","loc":"d,88:18,88:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(LEB)","loc":"d,88:18,88:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(TEB)","loc":"d,88:18,88:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"ASSIGN","name":"","addr":"(MEB)","loc":"d,88:126,88:130","dtypep":"(RB)", + {"type":"ASSIGN","name":"","addr":"(UEB)","loc":"d,88:126,88:130","dtypep":"(RB)", "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(NEB)","loc":"d,88:126,88:130","dtypep":"(RB)", + {"type":"ARRAYSEL","name":"","addr":"(VEB)","loc":"d,88:126,88:130","dtypep":"(RB)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(OEB)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_name2","addr":"(WEB)","loc":"d,17:12,17:16","dtypep":"(OM)","access":"RD","varp":"(PM)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(PEB)","loc":"d,88:126,88:130","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(XEB)","loc":"d,88:126,88:130","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(QEB)","loc":"d,88:126,88:130","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(YEB)","loc":"d,88:126,88:130","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(REB)","loc":"d,88:124,88:125","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(ZEB)","loc":"d,88:124,88:125","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(SEB)","loc":"d,88:124,88:125","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(AFB)","loc":"d,88:124,88:125","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ], "lhsp": [ - {"type":"VARREF","name":"__Vtemp_3","addr":"(TEB)","loc":"d,88:126,88:130","dtypep":"(RB)","access":"WR","varp":"(NR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vtemp_3","addr":"(BFB)","loc":"d,88:126,88:130","dtypep":"(RB)","access":"WR","varp":"(VR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"DISPLAY","name":"","addr":"(UEB)","loc":"d,88:45,88:51", + {"type":"DISPLAY","name":"","addr":"(CFB)","loc":"d,88:45,88:51", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:88: got='%@' exp='E04'\\n","addr":"(VEB)","loc":"d,88:45,88:51","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:88: got='%@' exp='E04'\\n","addr":"(DFB)","loc":"d,88:45,88:51","dtypep":"(RB)", "exprsp": [ - {"type":"VARREF","name":"__Vtemp_3","addr":"(WEB)","loc":"d,88:126,88:130","dtypep":"(RB)","access":"RD","varp":"(NR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vtemp_3","addr":"(EFB)","loc":"d,88:126,88:130","dtypep":"(RB)","access":"RD","varp":"(VR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(XEB)","loc":"d,88:143,88:148"} + {"type":"STOP","name":"","addr":"(FFB)","loc":"d,88:143,88:148"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(YEB)","loc":"d,89:13,89:15", + {"type":"IF","name":"","addr":"(GFB)","loc":"d,89:13,89:15", "condp": [ - {"type":"NEQ","name":"","addr":"(ZEB)","loc":"d,89:26,89:29","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(HFB)","loc":"d,89:26,89:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h1","addr":"(AFB)","loc":"d,89:31,89:34","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(IFB)","loc":"d,89:31,89:34","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(BFB)","loc":"d,89:20,89:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(JFB)","loc":"d,89:20,89:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CFB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KFB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(DFB)","loc":"d,89:20,89:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(LFB)","loc":"d,89:20,89:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(EFB)","loc":"d,89:20,89:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(MFB)","loc":"d,89:20,89:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(FFB)","loc":"d,89:18,89:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(NFB)","loc":"d,89:18,89:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(GFB)","loc":"d,89:18,89:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(OFB)","loc":"d,89:18,89:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(HFB)","loc":"d,89:43,89:49", + {"type":"DISPLAY","name":"","addr":"(PFB)","loc":"d,89:43,89:49", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:89: got='h%x exp='h1\\n","addr":"(IFB)","loc":"d,89:43,89:49","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:89: got='h%x exp='h1\\n","addr":"(QFB)","loc":"d,89:43,89:49","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(JFB)","loc":"d,89:124,89:128","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(RFB)","loc":"d,89:124,89:128","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KFB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(SFB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(LFB)","loc":"d,89:124,89:128","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(TFB)","loc":"d,89:124,89:128","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(MFB)","loc":"d,89:124,89:128","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(UFB)","loc":"d,89:124,89:128","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(NFB)","loc":"d,89:122,89:123","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(VFB)","loc":"d,89:122,89:123","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(OFB)","loc":"d,89:122,89:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(WFB)","loc":"d,89:122,89:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(PFB)","loc":"d,89:139,89:144"} + {"type":"STOP","name":"","addr":"(XFB)","loc":"d,89:139,89:144"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(QFB)","loc":"d,90:13,90:15", + {"type":"IF","name":"","addr":"(YFB)","loc":"d,90:13,90:15", "condp": [ - {"type":"NEQ","name":"","addr":"(RFB)","loc":"d,90:29,90:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(ZFB)","loc":"d,90:29,90:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h1","addr":"(SFB)","loc":"d,90:34,90:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(AGB)","loc":"d,90:34,90:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(TFB)","loc":"d,90:20,90:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(BGB)","loc":"d,90:20,90:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(UFB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VFB)","loc":"d,90:20,90:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DGB)","loc":"d,90:20,90:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WFB)","loc":"d,90:20,90:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EGB)","loc":"d,90:20,90:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(XFB)","loc":"d,90:18,90:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(FGB)","loc":"d,90:18,90:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(YFB)","loc":"d,90:18,90:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(GGB)","loc":"d,90:18,90:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(ZFB)","loc":"d,90:46,90:52", + {"type":"DISPLAY","name":"","addr":"(HGB)","loc":"d,90:46,90:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:90: got='h%x exp='h1\\n","addr":"(AGB)","loc":"d,90:46,90:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:90: got='h%x exp='h1\\n","addr":"(IGB)","loc":"d,90:46,90:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(BGB)","loc":"d,90:127,90:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(JGB)","loc":"d,90:127,90:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(DGB)","loc":"d,90:127,90:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(LGB)","loc":"d,90:127,90:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(EGB)","loc":"d,90:127,90:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(MGB)","loc":"d,90:127,90:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(FGB)","loc":"d,90:125,90:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(NGB)","loc":"d,90:125,90:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(GGB)","loc":"d,90:125,90:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(OGB)","loc":"d,90:125,90:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(HGB)","loc":"d,90:145,90:150"} + {"type":"STOP","name":"","addr":"(PGB)","loc":"d,90:145,90:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(IGB)","loc":"d,91:13,91:15", + {"type":"IF","name":"","addr":"(QGB)","loc":"d,91:13,91:15", "condp": [ - {"type":"NEQ","name":"","addr":"(JGB)","loc":"d,91:29,91:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(RGB)","loc":"d,91:29,91:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h3","addr":"(KGB)","loc":"d,91:34,91:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(SGB)","loc":"d,91:34,91:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(LGB)","loc":"d,91:20,91:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(TGB)","loc":"d,91:20,91:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(MGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(UGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(NGB)","loc":"d,91:20,91:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(VGB)","loc":"d,91:20,91:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(OGB)","loc":"d,91:20,91:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(WGB)","loc":"d,91:20,91:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(PGB)","loc":"d,91:20,91:24","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(XGB)","loc":"d,91:20,91:24","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(QGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(YGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(RGB)","loc":"d,91:20,91:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(ZGB)","loc":"d,91:20,91:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(SGB)","loc":"d,91:20,91:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(AHB)","loc":"d,91:20,91:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(TGB)","loc":"d,91:18,91:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(BHB)","loc":"d,91:18,91:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(UGB)","loc":"d,91:18,91:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(CHB)","loc":"d,91:18,91:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -2245,33 +2270,33 @@ ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(VGB)","loc":"d,91:46,91:52", + {"type":"DISPLAY","name":"","addr":"(DHB)","loc":"d,91:46,91:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:91: got='h%x exp='h3\\n","addr":"(WGB)","loc":"d,91:46,91:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:91: got='h%x exp='h3\\n","addr":"(EHB)","loc":"d,91:46,91:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(XGB)","loc":"d,91:127,91:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(FHB)","loc":"d,91:127,91:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(YGB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(GHB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(ZGB)","loc":"d,91:127,91:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(HHB)","loc":"d,91:127,91:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(AHB)","loc":"d,91:127,91:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(IHB)","loc":"d,91:127,91:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(BHB)","loc":"d,91:127,91:131","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(JHB)","loc":"d,91:127,91:131","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(CHB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_next0","addr":"(KHB)","loc":"d,17:12,17:16","dtypep":"(IC)","access":"RD","varp":"(JC)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(DHB)","loc":"d,91:127,91:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(LHB)","loc":"d,91:127,91:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(EHB)","loc":"d,91:127,91:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(MHB)","loc":"d,91:127,91:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(FHB)","loc":"d,91:125,91:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(NHB)","loc":"d,91:125,91:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(GHB)","loc":"d,91:125,91:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(OHB)","loc":"d,91:125,91:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -2279,138 +2304,138 @@ ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(HHB)","loc":"d,91:145,91:150"} + {"type":"STOP","name":"","addr":"(PHB)","loc":"d,91:145,91:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(IHB)","loc":"d,92:13,92:15", + {"type":"IF","name":"","addr":"(QHB)","loc":"d,92:13,92:15", "condp": [ - {"type":"NEQ","name":"","addr":"(JHB)","loc":"d,92:26,92:29","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(RHB)","loc":"d,92:26,92:29","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h3","addr":"(KHB)","loc":"d,92:31,92:34","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(SHB)","loc":"d,92:31,92:34","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(LHB)","loc":"d,92:20,92:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(THB)","loc":"d,92:20,92:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MHB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UHB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(NHB)","loc":"d,92:20,92:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(VHB)","loc":"d,92:20,92:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(OHB)","loc":"d,92:20,92:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(WHB)","loc":"d,92:20,92:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(PHB)","loc":"d,92:18,92:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(XHB)","loc":"d,92:18,92:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(QHB)","loc":"d,92:18,92:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(YHB)","loc":"d,92:18,92:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(RHB)","loc":"d,92:43,92:49", + {"type":"DISPLAY","name":"","addr":"(ZHB)","loc":"d,92:43,92:49", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:92: got='h%x exp='h3\\n","addr":"(SHB)","loc":"d,92:43,92:49","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:92: got='h%x exp='h3\\n","addr":"(AIB)","loc":"d,92:43,92:49","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(THB)","loc":"d,92:124,92:128","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(BIB)","loc":"d,92:124,92:128","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UHB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(CIB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(VHB)","loc":"d,92:124,92:128","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(DIB)","loc":"d,92:124,92:128","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(WHB)","loc":"d,92:124,92:128","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(EIB)","loc":"d,92:124,92:128","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(XHB)","loc":"d,92:122,92:123","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(FIB)","loc":"d,92:122,92:123","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(YHB)","loc":"d,92:122,92:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(GIB)","loc":"d,92:122,92:123","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(ZHB)","loc":"d,92:139,92:144"} + {"type":"STOP","name":"","addr":"(HIB)","loc":"d,92:139,92:144"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(AIB)","loc":"d,93:13,93:15", + {"type":"IF","name":"","addr":"(IIB)","loc":"d,93:13,93:15", "condp": [ - {"type":"NEQ","name":"","addr":"(BIB)","loc":"d,93:29,93:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(JIB)","loc":"d,93:29,93:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h3","addr":"(CIB)","loc":"d,93:34,93:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h3","addr":"(KIB)","loc":"d,93:34,93:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(DIB)","loc":"d,93:20,93:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(LIB)","loc":"d,93:20,93:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(EIB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MIB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(FIB)","loc":"d,93:20,93:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(NIB)","loc":"d,93:20,93:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(GIB)","loc":"d,93:20,93:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(OIB)","loc":"d,93:20,93:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(HIB)","loc":"d,93:18,93:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(PIB)","loc":"d,93:18,93:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(IIB)","loc":"d,93:18,93:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(QIB)","loc":"d,93:18,93:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(JIB)","loc":"d,93:46,93:52", + {"type":"DISPLAY","name":"","addr":"(RIB)","loc":"d,93:46,93:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:93: got='h%x exp='h3\\n","addr":"(KIB)","loc":"d,93:46,93:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:93: got='h%x exp='h3\\n","addr":"(SIB)","loc":"d,93:46,93:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(LIB)","loc":"d,93:127,93:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(TIB)","loc":"d,93:127,93:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MIB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UIB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(NIB)","loc":"d,93:127,93:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(VIB)","loc":"d,93:127,93:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(OIB)","loc":"d,93:127,93:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(WIB)","loc":"d,93:127,93:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(PIB)","loc":"d,93:125,93:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(XIB)","loc":"d,93:125,93:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(QIB)","loc":"d,93:125,93:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(YIB)","loc":"d,93:125,93:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(RIB)","loc":"d,93:145,93:150"} + {"type":"STOP","name":"","addr":"(ZIB)","loc":"d,93:145,93:150"} ],"elsesp": []}, - {"type":"IF","name":"","addr":"(SIB)","loc":"d,94:13,94:15", + {"type":"IF","name":"","addr":"(AJB)","loc":"d,94:13,94:15", "condp": [ - {"type":"NEQ","name":"","addr":"(TIB)","loc":"d,94:29,94:32","dtypep":"(NB)", + {"type":"NEQ","name":"","addr":"(BJB)","loc":"d,94:29,94:32","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"4'h1","addr":"(UIB)","loc":"d,94:34,94:37","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(CJB)","loc":"d,94:34,94:37","dtypep":"(AC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(VIB)","loc":"d,94:20,94:24","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(DJB)","loc":"d,94:20,94:24","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(WIB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(EJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(XIB)","loc":"d,94:20,94:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(FJB)","loc":"d,94:20,94:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(YIB)","loc":"d,94:20,94:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(GJB)","loc":"d,94:20,94:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(ZIB)","loc":"d,94:20,94:24","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(HJB)","loc":"d,94:20,94:24","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(AJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(IJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(BJB)","loc":"d,94:20,94:24","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(JJB)","loc":"d,94:20,94:24","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(CJB)","loc":"d,94:20,94:24","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(KJB)","loc":"d,94:20,94:24","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(DJB)","loc":"d,94:18,94:19","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(LJB)","loc":"d,94:18,94:19","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(EJB)","loc":"d,94:18,94:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(MJB)","loc":"d,94:18,94:19","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -2419,33 +2444,33 @@ ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(FJB)","loc":"d,94:46,94:52", + {"type":"DISPLAY","name":"","addr":"(NJB)","loc":"d,94:46,94:52", "fmtp": [ - {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:94: got='h%x exp='h1\\n","addr":"(GJB)","loc":"d,94:46,94:52","dtypep":"(RB)", + {"type":"SFORMATF","name":"%%Error: t/t_enum_type_methods.v:94: got='h%x exp='h1\\n","addr":"(OJB)","loc":"d,94:46,94:52","dtypep":"(RB)", "exprsp": [ - {"type":"ARRAYSEL","name":"","addr":"(HJB)","loc":"d,94:127,94:131","dtypep":"(AC)", + {"type":"ARRAYSEL","name":"","addr":"(PJB)","loc":"d,94:127,94:131","dtypep":"(AC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(IJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(QJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(JJB)","loc":"d,94:127,94:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(RJB)","loc":"d,94:127,94:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(KJB)","loc":"d,94:127,94:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(SJB)","loc":"d,94:127,94:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"ARRAYSEL","name":"","addr":"(LJB)","loc":"d,94:127,94:131","dtypep":"(LC)", + {"type":"ARRAYSEL","name":"","addr":"(TJB)","loc":"d,94:127,94:131","dtypep":"(LC)", "fromp": [ - {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(MJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Venumtab_enum_prev1","addr":"(UJB)","loc":"d,17:12,17:16","dtypep":"(CJ)","access":"RD","varp":"(DJ)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "bitp": [ - {"type":"AND","name":"","addr":"(NJB)","loc":"d,94:127,94:131","dtypep":"(LC)", + {"type":"AND","name":"","addr":"(VJB)","loc":"d,94:127,94:131","dtypep":"(LC)", "lhsp": [ - {"type":"CONST","name":"32'h7","addr":"(OJB)","loc":"d,94:127,94:131","dtypep":"(NC)"} + {"type":"CONST","name":"32'h7","addr":"(WJB)","loc":"d,94:127,94:131","dtypep":"(NC)"} ], "rhsp": [ - {"type":"CCAST","name":"","addr":"(PJB)","loc":"d,94:125,94:126","dtypep":"(LC)","size":32, + {"type":"CCAST","name":"","addr":"(XJB)","loc":"d,94:125,94:126","dtypep":"(LC)","size":32, "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(QJB)","loc":"d,94:125,94:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(YJB)","loc":"d,94:125,94:126","dtypep":"(LC)","access":"RD","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ]} ]} @@ -2453,78 +2478,53 @@ ]} ],"scopeNamep": []} ],"filep": []}, - {"type":"STOP","name":"","addr":"(RJB)","loc":"d,94:145,94:150"} + {"type":"STOP","name":"","addr":"(ZJB)","loc":"d,94:145,94:150"} ],"elsesp": []}, - {"type":"ASSIGNDLY","name":"","addr":"(SJB)","loc":"d,95:12,95:14","dtypep":"(AC)", + {"type":"ASSIGNDLY","name":"","addr":"(AKB)","loc":"d,95:12,95:14","dtypep":"(AC)", "rhsp": [ - {"type":"CONST","name":"4'h1","addr":"(TJB)","loc":"d,95:15,95:18","dtypep":"(AC)"} + {"type":"CONST","name":"4'h1","addr":"(BKB)","loc":"d,95:15,95:18","dtypep":"(AC)"} ], "lhsp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(UJB)","loc":"d,95:10,95:11","dtypep":"(AC)","access":"WR","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vdly__t.e","addr":"(CKB)","loc":"d,95:10,95:11","dtypep":"(AC)","access":"WR","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ], "elsesp": [ - {"type":"IF","name":"","addr":"(VJB)","loc":"d,97:12,97:14", + {"type":"IF","name":"","addr":"(DKB)","loc":"d,97:12,97:14", "condp": [ - {"type":"EQ","name":"","addr":"(WJB)","loc":"d,97:19,97:21","dtypep":"(NB)", + {"type":"EQ","name":"","addr":"(EKB)","loc":"d,97:19,97:21","dtypep":"(NB)", "lhsp": [ - {"type":"CONST","name":"32'sh63","addr":"(XJB)","loc":"d,97:21,97:23","dtypep":"(GB)"} + {"type":"CONST","name":"32'sh63","addr":"(FKB)","loc":"d,97:21,97:23","dtypep":"(GB)"} ], "rhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(YJB)","loc":"d,97:16,97:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.cyc","addr":"(GKB)","loc":"d,97:16,97:19","dtypep":"(R)","access":"RD","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ]} ], "thensp": [ - {"type":"DISPLAY","name":"","addr":"(ZJB)","loc":"d,98:10,98:16", + {"type":"DISPLAY","name":"","addr":"(HKB)","loc":"d,98:10,98:16", "fmtp": [ - {"type":"SFORMATF","name":"*-* All Finished *-*\\n","addr":"(AKB)","loc":"d,98:10,98:16","dtypep":"(RB)","exprsp": [],"scopeNamep": []} + {"type":"SFORMATF","name":"*-* All Finished *-*\\n","addr":"(IKB)","loc":"d,98:10,98:16","dtypep":"(RB)","exprsp": [],"scopeNamep": []} ],"filep": []}, - {"type":"FINISH","name":"","addr":"(BKB)","loc":"d,99:10,99:17"} + {"type":"FINISH","name":"","addr":"(JKB)","loc":"d,99:10,99:17"} ],"elsesp": []} ]} ]} ]} ]}, - {"type":"ASSIGNPOST","name":"","addr":"(CKB)","loc":"d,62:7,62:10","dtypep":"(R)", + {"type":"ASSIGNPOST","name":"","addr":"(KKB)","loc":"d,62:7,62:10","dtypep":"(R)", "rhsp": [ - {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(DKB)","loc":"d,62:7,62:10","dtypep":"(R)","access":"RD","varp":"(FR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vdly__t.cyc","addr":"(LKB)","loc":"d,62:7,62:10","dtypep":"(R)","access":"RD","varp":"(NR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"t.cyc","addr":"(EKB)","loc":"d,62:7,62:10","dtypep":"(R)","access":"WR","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.cyc","addr":"(MKB)","loc":"d,62:7,62:10","dtypep":"(R)","access":"WR","varp":"(Q)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGNPOST","name":"","addr":"(FKB)","loc":"d,65:10,65:11","dtypep":"(AC)", + {"type":"ASSIGNPOST","name":"","addr":"(NKB)","loc":"d,65:10,65:11","dtypep":"(AC)", "rhsp": [ - {"type":"VARREF","name":"__Vdly__t.e","addr":"(GKB)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"RD","varp":"(IR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vdly__t.e","addr":"(OKB)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"RD","varp":"(QR)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"t.e","addr":"(HKB)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"WR","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"t.e","addr":"(PKB)","loc":"d,65:10,65:11","dtypep":"(AC)","access":"WR","varp":"(L)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ],"finalsp": []}, - {"type":"CFUNC","name":"_eval_nba","addr":"(G)","loc":"a,0:0,0:0","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [],"initsp": [], - "stmtsp": [ - {"type":"IF","name":"","addr":"(IKB)","loc":"d,11:8,11:9", - "condp": [ - {"type":"AND","name":"","addr":"(JKB)","loc":"d,11:8,11:9","dtypep":"(HQ)", - "lhsp": [ - {"type":"CONST","name":"64'h1","addr":"(KKB)","loc":"d,11:8,11:9","dtypep":"(HQ)"} - ], - "rhsp": [ - {"type":"CMETHODHARD","name":"word","addr":"(LKB)","loc":"d,11:8,11:9","dtypep":"(KQ)", - "fromp": [ - {"type":"VARREF","name":"__VnbaTriggered","addr":"(MKB)","loc":"d,11:8,11:9","dtypep":"(NB)","access":"RD","varp":"(W)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} - ], - "pinsp": [ - {"type":"CONST","name":"32'h0","addr":"(NKB)","loc":"d,11:8,11:9","dtypep":"(NC)"} - ]} - ]} - ], - "thensp": [ - {"type":"STMTEXPR","name":"","addr":"(OKB)","loc":"d,65:10,65:11", - "exprp": [ - {"type":"CCALL","name":"","addr":"(PKB)","loc":"d,65:10,65:11","dtypep":"(CB)","funcName":"_nba_sequent__TOP__0","funcp":"(ER)","argsp": []} - ]} - ],"elsesp": []} - ],"finalsp": []}, {"type":"CFUNC","name":"_eval_phase__act","addr":"(QKB)","loc":"a,0:0,0:0","slow":false,"isStatic":false,"dpiExportDispatcher":false,"dpiExportImpl":false,"dpiImportPrototype":false,"dpiImportWrapper":false,"dpiContext":false,"isConstructor":false,"isDestructor":false,"isVirtual":false,"isCoroutine":false,"needProcess":false,"scopep":"(Y)","argsp": [], "initsp": [ {"type":"VAR","name":"__VpreTriggered","addr":"(RKB)","loc":"d,11:8,11:9","dtypep":"(V)","origName":"__VpreTriggered","isSc":false,"isPrimaryIO":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isUsedClock":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"attrClocker":"UNKNOWN","lifetime":"NONE","varType":"MODULETEMP","dtypeName":"VlTriggerVec","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, diff --git a/test_regress/t/t_xml_debugcheck.out b/test_regress/t/t_xml_debugcheck.out index 6e1c8d97c..2132c3998 100644 --- a/test_regress/t/t_xml_debugcheck.out +++ b/test_regress/t/t_xml_debugcheck.out @@ -687,6 +687,22 @@ + + + + + + + + + + + + + + + + @@ -1507,22 +1523,6 @@ - - - - - - - - - - - - - - - -