diff --git a/Changes b/Changes index 263654108..b6eeff672 100644 --- a/Changes +++ b/Changes @@ -28,6 +28,7 @@ Verilator 5.037 devel * Improve hierarchical scheduling visualization in V3ExecGraph (#6009). [Bartłomiej Chmiel, Antmicro Ltd.] * Improve DPI temporary 'for' loop performance (#6079). [Bartłomiej Chmiel, Antmicro Ltd.] * Fix --x-initial and --x-assign random stability (#2662) (#5958) (#6018) (#6025) (#6075). [Todd Strader] +* Fix trace hierarchicalName runtime errors (#5668) (#6076). [Paul Swirhun] * Fix filename backslash escapes in C code (#5947). * Fix C++ widths in V3Expand (#5953) (#5975). [Geza Lore] * Fix dependencies from different hierarchical schedules (#5954). [Bartłomiej Chmiel, Antmicro Ltd.] diff --git a/include/verilated_fst_c.cpp b/include/verilated_fst_c.cpp index cbe47ba31..bd2281030 100644 --- a/include/verilated_fst_c.cpp +++ b/include/verilated_fst_c.cpp @@ -140,7 +140,6 @@ void VerilatedFst::declDTypeEnum(int dtypenum, const char* name, uint32_t elemen // TODO: should return std::optional, but I can't have C++17 static std::pair toFstScopeType(VerilatedTracePrefixType type) { switch (type) { - case VerilatedTracePrefixType::ROOTIO_MODULE: return {true, FST_ST_VCD_MODULE}; case VerilatedTracePrefixType::SCOPE_MODULE: return {true, FST_ST_VCD_MODULE}; case VerilatedTracePrefixType::SCOPE_INTERFACE: return {true, FST_ST_VCD_INTERFACE}; case VerilatedTracePrefixType::STRUCT_PACKED: @@ -152,19 +151,23 @@ static std::pair toFstScopeType(VerilatedTracePrefixType typ void VerilatedFst::pushPrefix(const std::string& name, VerilatedTracePrefixType type) { assert(!m_prefixStack.empty()); // Constructor makes an empty entry - std::string pname = name; - // An empty name means this is the root of a model created with name()=="". The - // tools get upset if we try to pass this as empty, so we put the signals under a - // new scope, but the signals further down will be peers, not children (as usual - // for name()!="") - // Terminate earlier $root? - if (m_prefixStack.back().second == VerilatedTracePrefixType::ROOTIO_MODULE) popPrefix(); - if (pname.empty()) { // Start new temporary root - pname = "$rootio"; // VCD names are not backslash escaped - m_prefixStack.emplace_back("", VerilatedTracePrefixType::ROOTIO_WRAPPER); - type = VerilatedTracePrefixType::ROOTIO_MODULE; + // An empty name means this is the root of a model created with + // name()=="". The tools get upset if we try to pass this as empty, so + // we put the signals under a new $rootio scope, but the signals + // further down will be peers, not children (as usual for name()!=""). + const std::string prevPrefix = m_prefixStack.back().first; + if (name == "$rootio" && !prevPrefix.empty()) { + // Upper has name, we can suppress inserting $rootio, but still push so popPrefix works + m_prefixStack.emplace_back(prevPrefix, VerilatedTracePrefixType::ROOTIO_WRAPPER); + return; + } else if (name.empty()) { + m_prefixStack.emplace_back(prevPrefix, VerilatedTracePrefixType::ROOTIO_WRAPPER); + return; } - const std::string newPrefix = m_prefixStack.back().first + pname; + + // This code assumes a signal at a given prefix level is declared before + // any pushPrefix are done at that same level. + const std::string newPrefix = prevPrefix + name; const auto pair = toFstScopeType(type); const bool properScope = pair.first; const fstScopeType scopeType = pair.second; diff --git a/include/verilated_saif_c.cpp b/include/verilated_saif_c.cpp index 9e6cd7d9a..326b2571a 100644 --- a/include/verilated_saif_c.cpp +++ b/include/verilated_saif_c.cpp @@ -475,18 +475,25 @@ void VerilatedSaif::printIndent() { } void VerilatedSaif::pushPrefix(const std::string& name, VerilatedTracePrefixType type) { - std::string pname = name; - - if (m_prefixStack.back().second == VerilatedTracePrefixType::ROOTIO_MODULE) popPrefix(); - if (pname.empty()) { - pname = "$rootio"; - type = VerilatedTracePrefixType::ROOTIO_MODULE; + assert(!m_prefixStack.empty()); // Constructor makes an empty entry + // An empty name means this is the root of a model created with + // name()=="". The tools get upset if we try to pass this as empty, so + // we put the signals under a new $rootio scope, but the signals + // further down will be peers, not children (as usual for name()!=""). + const std::string prevPrefix = m_prefixStack.back().first; + if (name == "$rootio" && !prevPrefix.empty()) { + // Upper has name, we can suppress inserting $rootio, but still push so popPrefix works + m_prefixStack.emplace_back(prevPrefix, VerilatedTracePrefixType::ROOTIO_WRAPPER); + return; + } else if (name.empty()) { + m_prefixStack.emplace_back(prevPrefix, VerilatedTracePrefixType::ROOTIO_WRAPPER); + return; } if (type != VerilatedTracePrefixType::ARRAY_UNPACKED && type != VerilatedTracePrefixType::ARRAY_PACKED) { - std::string scopePath = m_prefixStack.back().first + pname; + std::string scopePath = prevPrefix + name; std::string scopeName = lastWord(scopePath); auto newScope = std::make_unique( @@ -502,23 +509,22 @@ void VerilatedSaif::pushPrefix(const std::string& name, VerilatedTracePrefixType m_currentScope = newScopePtr; } - std::string newPrefix = m_prefixStack.back().first + pname; - if (type != VerilatedTracePrefixType::ARRAY_UNPACKED - && type != VerilatedTracePrefixType::ARRAY_PACKED) { - newPrefix += ' '; - } - - m_prefixStack.emplace_back(newPrefix, type); + const std::string newPrefix = prevPrefix + name; + bool properScope = (type != VerilatedTracePrefixType::ARRAY_UNPACKED + && type != VerilatedTracePrefixType::ARRAY_PACKED + && type != VerilatedTracePrefixType::ROOTIO_WRAPPER); + m_prefixStack.emplace_back(newPrefix + (properScope ? " " : ""), type); } void VerilatedSaif::popPrefix() { if (m_prefixStack.back().second != VerilatedTracePrefixType::ARRAY_UNPACKED && m_prefixStack.back().second != VerilatedTracePrefixType::ARRAY_PACKED - && m_currentScope != nullptr) { + && m_prefixStack.back().second != VerilatedTracePrefixType::ROOTIO_WRAPPER + && m_currentScope) { m_currentScope = m_currentScope->parentScope(); } - m_prefixStack.pop_back(); + assert(!m_prefixStack.empty()); // Always one left, the constructor's initial one } void VerilatedSaif::declare(const uint32_t code, uint32_t fidx, const char* name, diff --git a/include/verilated_trace.h b/include/verilated_trace.h index a297087c6..3d3d73b53 100644 --- a/include/verilated_trace.h +++ b/include/verilated_trace.h @@ -53,8 +53,7 @@ enum class VerilatedTracePrefixType : uint8_t { // Note: Entries must match VTracePrefixType (by name, not necessarily by value) ARRAY_PACKED, ARRAY_UNPACKED, - ROOTIO_MODULE, // $rootio, used when name()=="", other modules become peers - ROOTIO_WRAPPER, // "Above" ROOTIO_MODULE + ROOTIO_WRAPPER, // $rootio suppressed due to name()!="" SCOPE_MODULE, SCOPE_INTERFACE, STRUCT_PACKED, diff --git a/include/verilated_vcd_c.cpp b/include/verilated_vcd_c.cpp index 4b6588522..ee4581a0d 100644 --- a/include/verilated_vcd_c.cpp +++ b/include/verilated_vcd_c.cpp @@ -323,43 +323,46 @@ void VerilatedVcd::printIndent(int level_change) { void VerilatedVcd::pushPrefix(const std::string& name, VerilatedTracePrefixType type) { assert(!m_prefixStack.empty()); // Constructor makes an empty entry - std::string pname = name; - // An empty name means this is the root of a model created with name()=="". The - // tools get upset if we try to pass this as empty, so we put the signals under a - // new scope, but the signals further down will be peers, not children (as usual - // for name()!="") - // Terminate earlier $root? - if (m_prefixStack.back().second == VerilatedTracePrefixType::ROOTIO_MODULE) popPrefix(); - if (pname.empty()) { // Start new temporary root - pname = "$rootio"; // VCD names are not backslash escaped - m_prefixStack.emplace_back("", VerilatedTracePrefixType::ROOTIO_WRAPPER); - type = VerilatedTracePrefixType::ROOTIO_MODULE; + // An empty name means this is the root of a model created with + // name()=="". The tools get upset if we try to pass this as empty, so + // we put the signals under a new $rootio scope, but the signals + // further down will be peers, not children (as usual for name()!=""). + const std::string prevPrefix = m_prefixStack.back().first; + if (name == "$rootio" && !prevPrefix.empty()) { + // Upper has name, we can suppress inserting $rootio, but still push so popPrefix works + m_prefixStack.emplace_back(prevPrefix, VerilatedTracePrefixType::ROOTIO_WRAPPER); + return; + } else if (name.empty()) { + m_prefixStack.emplace_back(prevPrefix, VerilatedTracePrefixType::ROOTIO_WRAPPER); + return; } - std::string newPrefix = m_prefixStack.back().first + pname; + + const std::string newPrefix = prevPrefix + name; + bool properScope = false; switch (type) { - case VerilatedTracePrefixType::ROOTIO_MODULE: case VerilatedTracePrefixType::SCOPE_MODULE: case VerilatedTracePrefixType::SCOPE_INTERFACE: case VerilatedTracePrefixType::STRUCT_PACKED: case VerilatedTracePrefixType::STRUCT_UNPACKED: case VerilatedTracePrefixType::UNION_PACKED: { + properScope = true; + break; + } + default: break; + } + if (properScope) { printIndent(1); printStr("$scope module "); const std::string n = lastWord(newPrefix); printStr(n.c_str()); printStr(" $end\n"); - newPrefix += ' '; - break; } - default: break; - } - m_prefixStack.emplace_back(newPrefix, type); + m_prefixStack.emplace_back(newPrefix + (properScope ? " " : ""), type); } void VerilatedVcd::popPrefix() { assert(!m_prefixStack.empty()); switch (m_prefixStack.back().second) { - case VerilatedTracePrefixType::ROOTIO_MODULE: case VerilatedTracePrefixType::SCOPE_MODULE: case VerilatedTracePrefixType::SCOPE_INTERFACE: case VerilatedTracePrefixType::STRUCT_PACKED: diff --git a/src/V3TraceDecl.cpp b/src/V3TraceDecl.cpp index 35b0459f5..40359fbaf 100644 --- a/src/V3TraceDecl.cpp +++ b/src/V3TraceDecl.cpp @@ -120,14 +120,11 @@ class TraceDeclVisitor final : public VNVisitor { // - A sub scope (stored as the cell corresponding to the sub scope) // Note: members are non-const to allow copy during sorting class TraceEntry final { - // AstVarScope under scope being traced - AstVarScope* m_vscp{nullptr}; - // Sub scope (as AstCell) under scope being traced - AstCell* m_cellp{nullptr}; - // Path to enclosing module in original hierarchy (non-trivail due to inlining) - std::string m_path; - // Name of signal/subscope - std::string m_name; + AstVarScope* m_vscp = nullptr; // AstVarScope under scope being traced + AstCell* m_cellp = nullptr; // Sub scope (as AstCell) under scope being traced + std::string m_path; // Path to enclosing module in original hierarchy + std::string m_name; // Name of signal/subscope + bool m_rootio = false; // Is part of $rootio, if model at runtime uses name()="" void init(const std::string& name) { // Compute path in hierarchy and item name @@ -147,12 +144,21 @@ class TraceDeclVisitor final : public VNVisitor { : m_cellp{cellp} { init(cellp->name()); } - + int operatorCompare(const TraceEntry& b) const { + if (rootio() && !b.rootio()) return true; + if (!rootio() && b.rootio()) return false; + if (const int cmp = path().compare(b.path())) return cmp < 0; + if (const int cmp = fileline().operatorCompare(b.fileline())) return cmp < 0; + return name() < b.name(); + } AstVarScope* vscp() const { return m_vscp; } AstCell* cellp() const { return m_cellp; } const std::string& path() const { return m_path; } + void path(const std::string& path) { m_path = path; } const std::string& name() const { return m_name; } FileLine& fileline() const { return m_vscp ? *m_vscp->fileline() : *m_cellp->fileline(); } + bool rootio() const { return m_rootio; } + void rootio(bool flag) { m_rootio = flag; } }; std::vector m_entries; // Trace entries under current scope AstVarScope* m_traVscp = nullptr; // Current AstVarScope we are constructing AstTraceDecls for @@ -367,23 +373,29 @@ class TraceDeclVisitor final : public VNVisitor { } if (!m_entries.empty()) { - // Sort trace entries, first by enclosing instance (necessary for - // single traversal of hierarchy during initialization), then by - // source location, then by name. - std::stable_sort(m_entries.begin(), m_entries.end(), - [](const TraceEntry& a, const TraceEntry& b) { - if (const int cmp = a.path().compare(b.path())) return cmp < 0; - if (const int cmp = a.fileline().operatorCompare(b.fileline())) - return cmp < 0; - return a.name() < b.name(); - }); + if (nodep->name() == "TOP") { + UINFO(9, " Add $rootio " << nodep); + for (TraceEntry& entry : m_entries) { + if (entry.path() == "" && entry.vscp()) entry.rootio(true); + } + } + + // Sort trace entries, first by if a $root io, then by enclosing instance + // (necessary for single traversal of hierarchy during initialization), then + // by source location, then by name. + std::stable_sort( + m_entries.begin(), m_entries.end(), + [](const TraceEntry& a, const TraceEntry& b) { return a.operatorCompare(b); }); // Build trace initialization functions for this AstScope FileLine* const flp = nodep->fileline(); PathAdjustor pathAdjustor{flp, [&](AstNodeStmt* stmtp) { addToSubFunc(stmtp); }}; for (const TraceEntry& entry : m_entries) { // Adjust name prefix based on path in hierarchy - pathAdjustor.adjust(entry.path()); + UINFO(9, "path='" << entry.path() << "' name='" << entry.name() << "' " + << (entry.cellp() ? static_cast(entry.cellp()) + : static_cast(entry.vscp()))); + pathAdjustor.adjust(entry.rootio() ? "$rootio" : entry.path()); m_traName = entry.name(); diff --git a/test_regress/t/t_clocker.out b/test_regress/t/t_clocker.out index d6623fe9f..3074da7ad 100644 --- a/test_regress/t/t_clocker.out +++ b/test_regress/t/t_clocker.out @@ -1,14 +1,13 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module top $end - $scope module $unit $end - $var wire 32 + ID_MSB [31:0] $end - $upscope $end $var wire 1 # clk $end $var wire 1 $ res $end $var wire 8 % res8 [7:0] $end $var wire 16 & res16 [15:0] $end + $scope module $unit $end + $var wire 32 + ID_MSB [31:0] $end + $upscope $end $scope module t $end $var wire 1 # clk $end $var wire 1 $ res $end diff --git a/test_regress/t/t_cover_line_trace.out b/test_regress/t/t_cover_line_trace.out index 57d893c2b..bd95a37b4 100644 --- a/test_regress/t/t_cover_line_trace.out +++ b/test_regress/t/t_cover_line_trace.out @@ -1,6 +1,7 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end $scope module top $end + $var wire 1 4! clk $end $scope module t $end $var wire 1 4! clk $end $var wire 1 A toggle $end @@ -175,7 +176,6 @@ $timescale 1ps $end $var wire 32 '! vlCoverageLineTrace_t_cover_line__276_block [31:0] $end $upscope $end $upscope $end - $var wire 1 4! clk $end $scope module my_pkg $end $var wire 32 + x [31:0] $end $var wire 32 , vlCoverageLineTrace_t_cover_line__300_block [31:0] $end diff --git a/test_regress/t/t_cover_trace_always.out b/test_regress/t/t_cover_trace_always.out index c7994eb12..417236b8b 100644 --- a/test_regress/t/t_cover_trace_always.out +++ b/test_regress/t/t_cover_trace_always.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module t $end $var wire 1 $ p $end $var wire 1 % q $end diff --git a/test_regress/t/t_flag_csplit_groups.py b/test_regress/t/t_flag_csplit_groups.py index 3f259b08b..d02a0d351 100755 --- a/test_regress/t/t_flag_csplit_groups.py +++ b/test_regress/t/t_flag_csplit_groups.py @@ -124,7 +124,7 @@ test.file_grep_not(test.obj_dir + "/" + test.vm_prefix + "_classes.mk", "vm_clas test.file_grep_not(test.obj_dir + "/" + test.vm_prefix + "_classes.mk", "vm_classes_2") # Check combine count -test.file_grep(test.stats, r'Node count, CFILE + (\d+)', (231 if test.vltmt else 211)) +test.file_grep(test.stats, r'Node count, CFILE + (\d+)', (234 if test.vltmt else 214)) test.file_grep(test.stats, r'Makefile targets, VM_CLASSES_FAST + (\d+)', 2) test.file_grep(test.stats, r'Makefile targets, VM_CLASSES_SLOW + (\d+)', 2) diff --git a/test_regress/t/t_hier_trace_noinl.out b/test_regress/t/t_hier_trace_noinl.out index dc81eb685..1bb69f35d 100644 --- a/test_regress/t/t_hier_trace_noinl.out +++ b/test_regress/t/t_hier_trace_noinl.out @@ -1,6 +1,8 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end $scope module top $end + $var wire 1 # clk $end + $var wire 1 $ reset_l $end $scope module t $end $var wire 1 # clk $end $var wire 1 $ reset_l $end @@ -13,10 +15,10 @@ $timescale 1ps $end $var wire 1 $ reset_l $end $upscope $end $upscope $end - $var wire 1 # clk $end - $var wire 1 $ reset_l $end $upscope $end $scope module top.t.u0_sub_top $end + $var wire 1 & clk $end + $var wire 1 ' reset_l $end $scope module sub_top $end $var wire 1 & clk $end $var wire 1 ' reset_l $end @@ -53,10 +55,10 @@ $timescale 1ps $end $var wire 1 ' reset_l $end $upscope $end $upscope $end - $var wire 1 & clk $end - $var wire 1 ' reset_l $end $upscope $end $scope module top.t.u1_sub_top $end + $var wire 1 ) clk $end + $var wire 1 * reset_l $end $scope module sub_top $end $var wire 1 ) clk $end $var wire 1 * reset_l $end @@ -93,136 +95,134 @@ $timescale 1ps $end $var wire 1 * reset_l $end $upscope $end $upscope $end - $var wire 1 ) clk $end - $var wire 1 * reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u0 $end + $var wire 1 , clk $end + $var wire 1 - reset_l $end $scope module detail_code $end $var wire 1 , clk $end $var wire 1 - reset_l $end $upscope $end - $var wire 1 , clk $end - $var wire 1 - reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u1 $end + $var wire 1 / clk $end + $var wire 1 0 reset_l $end $scope module detail_code $end $var wire 1 / clk $end $var wire 1 0 reset_l $end $upscope $end - $var wire 1 / clk $end - $var wire 1 0 reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u2 $end + $var wire 1 2 clk $end + $var wire 1 3 reset_l $end $scope module detail_code $end $var wire 1 2 clk $end $var wire 1 3 reset_l $end $upscope $end - $var wire 1 2 clk $end - $var wire 1 3 reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u3 $end + $var wire 1 5 clk $end + $var wire 1 6 reset_l $end $scope module detail_code $end $var wire 1 5 clk $end $var wire 1 6 reset_l $end $upscope $end - $var wire 1 5 clk $end - $var wire 1 6 reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u4 $end + $var wire 1 8 clk $end + $var wire 1 9 reset_l $end $scope module detail_code $end $var wire 1 8 clk $end $var wire 1 9 reset_l $end $upscope $end - $var wire 1 8 clk $end - $var wire 1 9 reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u5 $end + $var wire 1 ; clk $end + $var wire 1 < reset_l $end $scope module detail_code $end $var wire 1 ; clk $end $var wire 1 < reset_l $end $upscope $end - $var wire 1 ; clk $end - $var wire 1 < reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u6 $end + $var wire 1 > clk $end + $var wire 1 ? reset_l $end $scope module detail_code $end $var wire 1 > clk $end $var wire 1 ? reset_l $end $upscope $end - $var wire 1 > clk $end - $var wire 1 ? reset_l $end $upscope $end $scope module top.t.u0_sub_top.sub_top.u7 $end + $var wire 1 A clk $end + $var wire 1 B reset_l $end $scope module detail_code $end $var wire 1 A clk $end $var wire 1 B reset_l $end $upscope $end - $var wire 1 A clk $end - $var wire 1 B reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u0 $end + $var wire 1 D clk $end + $var wire 1 E reset_l $end $scope module detail_code $end $var wire 1 D clk $end $var wire 1 E reset_l $end $upscope $end - $var wire 1 D clk $end - $var wire 1 E reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u1 $end + $var wire 1 G clk $end + $var wire 1 H reset_l $end $scope module detail_code $end $var wire 1 G clk $end $var wire 1 H reset_l $end $upscope $end - $var wire 1 G clk $end - $var wire 1 H reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u2 $end + $var wire 1 J clk $end + $var wire 1 K reset_l $end $scope module detail_code $end $var wire 1 J clk $end $var wire 1 K reset_l $end $upscope $end - $var wire 1 J clk $end - $var wire 1 K reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u3 $end + $var wire 1 M clk $end + $var wire 1 N reset_l $end $scope module detail_code $end $var wire 1 M clk $end $var wire 1 N reset_l $end $upscope $end - $var wire 1 M clk $end - $var wire 1 N reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u4 $end + $var wire 1 P clk $end + $var wire 1 Q reset_l $end $scope module detail_code $end $var wire 1 P clk $end $var wire 1 Q reset_l $end $upscope $end - $var wire 1 P clk $end - $var wire 1 Q reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u5 $end + $var wire 1 S clk $end + $var wire 1 T reset_l $end $scope module detail_code $end $var wire 1 S clk $end $var wire 1 T reset_l $end $upscope $end - $var wire 1 S clk $end - $var wire 1 T reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u6 $end + $var wire 1 V clk $end + $var wire 1 W reset_l $end $scope module detail_code $end $var wire 1 V clk $end $var wire 1 W reset_l $end $upscope $end - $var wire 1 V clk $end - $var wire 1 W reset_l $end $upscope $end $scope module top.t.u1_sub_top.sub_top.u7 $end + $var wire 1 Y clk $end + $var wire 1 Z reset_l $end $scope module detail_code $end $var wire 1 Y clk $end $var wire 1 Z reset_l $end $upscope $end - $var wire 1 Y clk $end - $var wire 1 Z reset_l $end $upscope $end $enddefinitions $end diff --git a/test_regress/t/t_interface_ref_trace_noinl.out b/test_regress/t/t_interface_ref_trace_noinl.out index a3bd6bbac..c46aa5d53 100644 --- a/test_regress/t/t_interface_ref_trace_noinl.out +++ b/test_regress/t/t_interface_ref_trace_noinl.out @@ -1,7 +1,7 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module top $end + $var wire 1 0 clk $end $scope module t $end $var wire 1 0 clk $end $var wire 32 # cyc [31:0] $end @@ -294,7 +294,6 @@ $timescale 1ps $end $upscope $end $upscope $end $upscope $end - $var wire 1 0 clk $end $upscope $end $enddefinitions $end diff --git a/test_regress/t/t_timing_osc.out b/test_regress/t/t_timing_osc.out index afcbdeb10..2eb647fb5 100644 --- a/test_regress/t/t_timing_osc.out +++ b/test_regress/t/t_timing_osc.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1fs $end - $scope module $rootio $end - $upscope $end $scope module tb_osc $end $var wire 1 # dco_out $end $scope module dco $end diff --git a/test_regress/t/t_timing_trace.out b/test_regress/t/t_timing_trace.out index 504e3a2bc..206cd8995 100644 --- a/test_regress/t/t_timing_trace.out +++ b/test_regress/t/t_timing_trace.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module t $end $var wire 32 * CLK_PERIOD [31:0] $end $var wire 32 + CLK_HALF_PERIOD [31:0] $end diff --git a/test_regress/t/t_timing_trace_fst.out b/test_regress/t/t_timing_trace_fst.out index fe5088ccd..e1cad43b5 100644 --- a/test_regress/t/t_timing_trace_fst.out +++ b/test_regress/t/t_timing_trace_fst.out @@ -1,5 +1,5 @@ $date - Fri May 2 07:32:42 2025 + Tue Jun 10 19:01:39 2025 $end $version @@ -8,8 +8,6 @@ $end $timescale 1ps $end -$scope module $rootio $end -$upscope $end $scope module t $end $var parameter 32 ! CLK_PERIOD [31:0] $end $var parameter 32 " CLK_HALF_PERIOD [31:0] $end diff --git a/test_regress/t/t_timing_trace_saif.out b/test_regress/t/t_timing_trace_saif.out index 8b2e73be3..87cd788db 100644 --- a/test_regress/t/t_timing_trace_saif.out +++ b/test_regress/t/t_timing_trace_saif.out @@ -6,8 +6,6 @@ (DIVIDER / ) (TIMESCALE 1ps) (DURATION 100) - (INSTANCE $rootio - ) (INSTANCE t (NET (CLK_PERIOD\[0\] (T0 100) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) diff --git a/test_regress/t/t_trace_binary.out b/test_regress/t/t_trace_binary.out index 6ba7d249c..cec4aa1d5 100644 --- a/test_regress/t/t_trace_binary.out +++ b/test_regress/t/t_trace_binary.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module t $end $var wire 32 # sig [31:0] $end $upscope $end diff --git a/test_regress/t/t_trace_class.out b/test_regress/t/t_trace_class.out index caa31e989..a7c8f9fe0 100644 --- a/test_regress/t/t_trace_class.out +++ b/test_regress/t/t_trace_class.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module $unit::Cls__P0__Vclpkg $end $var wire 32 # PARAM [31:0] $end $upscope $end diff --git a/test_regress/t/t_trace_complex.out b/test_regress/t/t_trace_complex.out index 6b27eefc7..82004c937 100644 --- a/test_regress/t/t_trace_complex.out +++ b/test_regress/t/t_trace_complex.out @@ -1,38 +1,38 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end $scope module top $end + $var wire 1 = clk $end $scope module $unit $end $var wire 1 # global_bit $end $upscope $end - $var wire 1 4 clk $end $scope module t $end - $var wire 1 4 clk $end - $var wire 32 5 cyc [31:0] $end - $var wire 2 ) v_strp [1:0] $end - $var wire 4 * v_strp_strp [3:0] $end - $var wire 2 - v_unip_strp [1:0] $end - $var wire 2 . v_arrp [2:1] $end - $var wire 4 $ v_arrp_arrp [3:0] $end - $var wire 4 / v_arrp_strp [3:0] $end + $var wire 1 = clk $end + $var wire 32 $ cyc [31:0] $end + $var wire 2 % v_strp [1:0] $end + $var wire 4 & v_strp_strp [3:0] $end + $var wire 2 ' v_unip_strp [1:0] $end + $var wire 2 ( v_arrp [2:1] $end + $var wire 4 ) v_arrp_arrp [3:0] $end + $var wire 4 * v_arrp_strp [3:0] $end $var wire 1 > v_arru[1] $end $var wire 1 ? v_arru[2] $end $var wire 1 @ v_arru_arru[3][1] $end $var wire 1 A v_arru_arru[3][2] $end $var wire 1 B v_arru_arru[4][1] $end $var wire 1 C v_arru_arru[4][2] $end - $var wire 2 6 v_arru_arrp[3] [2:1] $end - $var wire 2 7 v_arru_arrp[4] [2:1] $end - $var wire 2 8 v_arru_strp[3] [1:0] $end - $var wire 2 9 v_arru_strp[4] [1:0] $end - $var real 64 % v_real $end - $var real 64 : v_arr_real[0] $end - $var real 64 < v_arr_real[1] $end + $var wire 2 + v_arru_arrp[3] [2:1] $end + $var wire 2 , v_arru_arrp[4] [2:1] $end + $var wire 2 - v_arru_strp[3] [1:0] $end + $var wire 2 . v_arru_strp[4] [1:0] $end + $var real 64 / v_real $end + $var real 64 1 v_arr_real[0] $end + $var real 64 3 v_arr_real[1] $end $var wire 64 D v_chandle [63:0] $end - $var wire 64 0 v_str32x2 [63:0] $end - $var wire 32 + v_enumed [31:0] $end - $var wire 32 , v_enumed2 [31:0] $end - $var wire 3 2 v_enumb [2:0] $end - $var wire 6 3 v_enumb2_str [5:0] $end + $var wire 64 5 v_str32x2 [63:0] $end + $var wire 32 7 v_enumed [31:0] $end + $var wire 32 8 v_enumed2 [31:0] $end + $var wire 3 9 v_enumb [2:0] $end + $var wire 6 : v_enumb2_str [5:0] $end $var wire 8 F unpacked_array[-2] [7:0] $end $var wire 8 G unpacked_array[-1] [7:0] $end $var wire 8 H unpacked_array[0] [7:0] $end @@ -47,9 +47,9 @@ $timescale 1ps $end $var wire 32 L PARAM [31:0] $end $upscope $end $scope module unnamedblk1 $end - $var wire 32 ' b [31:0] $end + $var wire 32 ; b [31:0] $end $scope module unnamedblk2 $end - $var wire 32 ( a [31:0] $end + $var wire 32 < a [31:0] $end $upscope $end $upscope $end $upscope $end @@ -59,28 +59,28 @@ $enddefinitions $end #0 1# -b0000 $ -r0 % -b00000000000000000000000000000000 ' -b00000000000000000000000000000000 ( -b00 ) +b00000000000000000000000000000000 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000000 + -b00000000000000000000000000000000 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000000000000000000000000000000011111111 0 -b000 2 -b000000 3 -04 -b00000000000000000000000000000000 5 -b00 6 -b00 7 -b00 8 -b00 9 -r0 : -r0 < +r0 / +r0 1 +r0 3 +b0000000000000000000000000000000000000000000000000000000011111111 5 +b00000000000000000000000000000000 7 +b00000000000000000000000000000000 8 +b000 9 +b000000 : +b00000000000000000000000000000000 ; +b00000000000000000000000000000000 < +0= 0> 0? 0@ @@ -96,139 +96,139 @@ b00000000000000000000000000000100 J b00000000000000000000000000000010 K b00000000000000000000000000000011 L #10 -b1111 $ -r0.1 % -b00000000000000000000000000000101 ' -b00000000000000000000000000000101 ( -b11 ) +b00000000000000000000000000000001 $ +b11 % +b1111 & +b11 ' +b11 ( +b1111 ) b1111 * -b00000000000000000000000000000001 + -b00000000000000000000000000000010 , +b11 + +b11 , b11 - b11 . -b1111 / -b0000000000000000000000000000000100000000000000000000000011111110 0 -b111 2 -14 -b00000000000000000000000000000001 5 -b11 6 -b11 7 -b11 8 -b11 9 -r0.2 : -r0.3 < +r0.1 / +r0.2 1 +r0.3 3 +b0000000000000000000000000000000100000000000000000000000011111110 5 +b00000000000000000000000000000001 7 +b00000000000000000000000000000010 8 +b111 9 +b00000000000000000000000000000101 ; +b00000000000000000000000000000101 < +1= #15 -04 +0= #20 -b0000 $ -r0.2 % -b00 ) +b00000000000000000000000000000010 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000010 + -b00000000000000000000000000000100 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000001000000000000000000000000011111101 0 -b110 2 -b111111 3 -14 -b00000000000000000000000000000010 5 -b00 6 -b00 7 -b00 8 -b00 9 -r0.4 : -r0.6 < +r0.2 / +r0.4 1 +r0.6 3 +b0000000000000000000000000000001000000000000000000000000011111101 5 +b00000000000000000000000000000010 7 +b00000000000000000000000000000100 8 +b110 9 +b111111 : +1= #25 -04 +0= #30 -b1111 $ -r0.3 % -b11 ) +b00000000000000000000000000000011 $ +b11 % +b1111 & +b11 ' +b11 ( +b1111 ) b1111 * -b00000000000000000000000000000011 + -b00000000000000000000000000000110 , +b11 + +b11 , b11 - b11 . -b1111 / -b0000000000000000000000000000001100000000000000000000000011111100 0 -b101 2 -b110110 3 -14 -b00000000000000000000000000000011 5 -b11 6 -b11 7 -b11 8 -b11 9 -r0.6000000000000001 : -r0.8999999999999999 < +r0.3 / +r0.6000000000000001 1 +r0.8999999999999999 3 +b0000000000000000000000000000001100000000000000000000000011111100 5 +b00000000000000000000000000000011 7 +b00000000000000000000000000000110 8 +b101 9 +b110110 : +1= #35 -04 +0= #40 -b0000 $ -r0.4 % -b00 ) +b00000000000000000000000000000100 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000100 + -b00000000000000000000000000001000 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000010000000000000000000000000011111011 0 -b100 2 -b101101 3 -14 -b00000000000000000000000000000100 5 -b00 6 -b00 7 -b00 8 -b00 9 -r0.8 : -r1.2 < +r0.4 / +r0.8 1 +r1.2 3 +b0000000000000000000000000000010000000000000000000000000011111011 5 +b00000000000000000000000000000100 7 +b00000000000000000000000000001000 8 +b100 9 +b101101 : +1= #45 -04 +0= #50 -b1111 $ -r0.5 % -b11 ) +b00000000000000000000000000000101 $ +b11 % +b1111 & +b11 ' +b11 ( +b1111 ) b1111 * -b00000000000000000000000000000101 + -b00000000000000000000000000001010 , +b11 + +b11 , b11 - b11 . -b1111 / -b0000000000000000000000000000010100000000000000000000000011111010 0 -b011 2 -b100100 3 -14 -b00000000000000000000000000000101 5 -b11 6 -b11 7 -b11 8 -b11 9 -r1 : -r1.5 < +r0.5 / +r1 1 +r1.5 3 +b0000000000000000000000000000010100000000000000000000000011111010 5 +b00000000000000000000000000000101 7 +b00000000000000000000000000001010 8 +b011 9 +b100100 : +1= #55 -04 +0= #60 -b0000 $ -r0.6 % -b00 ) +b00000000000000000000000000000110 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000110 + -b00000000000000000000000000001100 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000011000000000000000000000000011111001 0 -b010 2 -b011011 3 -14 -b00000000000000000000000000000110 5 -b00 6 -b00 7 -b00 8 -b00 9 -r1.2 : -r1.8 < +r0.6 / +r1.2 1 +r1.8 3 +b0000000000000000000000000000011000000000000000000000000011111001 5 +b00000000000000000000000000000110 7 +b00000000000000000000000000001100 8 +b010 9 +b011011 : +1= diff --git a/test_regress/t/t_trace_complex_fst.out b/test_regress/t/t_trace_complex_fst.out index e0cd14241..0cf966dc5 100644 --- a/test_regress/t/t_trace_complex_fst.out +++ b/test_regress/t/t_trace_complex_fst.out @@ -1,5 +1,5 @@ $date - Thu Jan 25 08:01:43 2024 + Tue Jun 10 19:02:36 2025 $end $version @@ -11,12 +11,12 @@ $end $scope module top $end $attrbegin misc 07 t.enumed_t 4 ZERO ONE TWO THREE 00000000000000000000000000000000 00000000000000000000000000000001 00000000000000000000000000000010 00000000000000000000000000000011 1 $end $attrbegin misc 07 t.enumb_t 4 BZERO BONE BTWO BTHREE 000 001 010 011 2 $end +$var wire 1 ! clk $end $scope module $unit $end -$var bit 1 ! global_bit $end +$var bit 1 " global_bit $end $upscope $end -$var wire 1 " clk $end $scope module t $end -$var wire 1 " clk $end +$var wire 1 ! clk $end $var integer 32 # cyc [31:0] $end $var bit 2 $ v_strp [1:0] $end $var bit 4 % v_strp_strp [3:0] $end @@ -105,11 +105,11 @@ b00 & b0000 % b00 $ b00000000000000000000000000000000 # -0" -1! +1" +0! $end #10 -1" +1! b00000000000000000000000000000001 # b11 $ b1111 % @@ -131,9 +131,9 @@ b111 ; b00000000000000000000000000000101 D b00000000000000000000000000000101 E #15 -0" +0! #20 -1" +1! b110 ; b00000000000000000000000000000100 : b00000000000000000000000000000010 9 @@ -154,9 +154,9 @@ b00 $ b00000000000000000000000000000010 # b111111 < #25 -0" +0! #30 -1" +1! b110110 < b00000000000000000000000000000011 # b11 $ @@ -177,9 +177,9 @@ b00000000000000000000000000000011 9 b00000000000000000000000000000110 : b101 ; #35 -0" +0! #40 -1" +1! b100 ; b00000000000000000000000000001000 : b00000000000000000000000000000100 9 @@ -200,9 +200,9 @@ b00 $ b00000000000000000000000000000100 # b101101 < #45 -0" +0! #50 -1" +1! b100100 < b00000000000000000000000000000101 # b11 $ @@ -223,9 +223,9 @@ b00000000000000000000000000000101 9 b00000000000000000000000000001010 : b011 ; #55 -0" +0! #60 -1" +1! b010 ; b00000000000000000000000000001100 : b00000000000000000000000000000110 9 diff --git a/test_regress/t/t_trace_complex_params.out b/test_regress/t/t_trace_complex_params.out index 6b27eefc7..82004c937 100644 --- a/test_regress/t/t_trace_complex_params.out +++ b/test_regress/t/t_trace_complex_params.out @@ -1,38 +1,38 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end $scope module top $end + $var wire 1 = clk $end $scope module $unit $end $var wire 1 # global_bit $end $upscope $end - $var wire 1 4 clk $end $scope module t $end - $var wire 1 4 clk $end - $var wire 32 5 cyc [31:0] $end - $var wire 2 ) v_strp [1:0] $end - $var wire 4 * v_strp_strp [3:0] $end - $var wire 2 - v_unip_strp [1:0] $end - $var wire 2 . v_arrp [2:1] $end - $var wire 4 $ v_arrp_arrp [3:0] $end - $var wire 4 / v_arrp_strp [3:0] $end + $var wire 1 = clk $end + $var wire 32 $ cyc [31:0] $end + $var wire 2 % v_strp [1:0] $end + $var wire 4 & v_strp_strp [3:0] $end + $var wire 2 ' v_unip_strp [1:0] $end + $var wire 2 ( v_arrp [2:1] $end + $var wire 4 ) v_arrp_arrp [3:0] $end + $var wire 4 * v_arrp_strp [3:0] $end $var wire 1 > v_arru[1] $end $var wire 1 ? v_arru[2] $end $var wire 1 @ v_arru_arru[3][1] $end $var wire 1 A v_arru_arru[3][2] $end $var wire 1 B v_arru_arru[4][1] $end $var wire 1 C v_arru_arru[4][2] $end - $var wire 2 6 v_arru_arrp[3] [2:1] $end - $var wire 2 7 v_arru_arrp[4] [2:1] $end - $var wire 2 8 v_arru_strp[3] [1:0] $end - $var wire 2 9 v_arru_strp[4] [1:0] $end - $var real 64 % v_real $end - $var real 64 : v_arr_real[0] $end - $var real 64 < v_arr_real[1] $end + $var wire 2 + v_arru_arrp[3] [2:1] $end + $var wire 2 , v_arru_arrp[4] [2:1] $end + $var wire 2 - v_arru_strp[3] [1:0] $end + $var wire 2 . v_arru_strp[4] [1:0] $end + $var real 64 / v_real $end + $var real 64 1 v_arr_real[0] $end + $var real 64 3 v_arr_real[1] $end $var wire 64 D v_chandle [63:0] $end - $var wire 64 0 v_str32x2 [63:0] $end - $var wire 32 + v_enumed [31:0] $end - $var wire 32 , v_enumed2 [31:0] $end - $var wire 3 2 v_enumb [2:0] $end - $var wire 6 3 v_enumb2_str [5:0] $end + $var wire 64 5 v_str32x2 [63:0] $end + $var wire 32 7 v_enumed [31:0] $end + $var wire 32 8 v_enumed2 [31:0] $end + $var wire 3 9 v_enumb [2:0] $end + $var wire 6 : v_enumb2_str [5:0] $end $var wire 8 F unpacked_array[-2] [7:0] $end $var wire 8 G unpacked_array[-1] [7:0] $end $var wire 8 H unpacked_array[0] [7:0] $end @@ -47,9 +47,9 @@ $timescale 1ps $end $var wire 32 L PARAM [31:0] $end $upscope $end $scope module unnamedblk1 $end - $var wire 32 ' b [31:0] $end + $var wire 32 ; b [31:0] $end $scope module unnamedblk2 $end - $var wire 32 ( a [31:0] $end + $var wire 32 < a [31:0] $end $upscope $end $upscope $end $upscope $end @@ -59,28 +59,28 @@ $enddefinitions $end #0 1# -b0000 $ -r0 % -b00000000000000000000000000000000 ' -b00000000000000000000000000000000 ( -b00 ) +b00000000000000000000000000000000 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000000 + -b00000000000000000000000000000000 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000000000000000000000000000000011111111 0 -b000 2 -b000000 3 -04 -b00000000000000000000000000000000 5 -b00 6 -b00 7 -b00 8 -b00 9 -r0 : -r0 < +r0 / +r0 1 +r0 3 +b0000000000000000000000000000000000000000000000000000000011111111 5 +b00000000000000000000000000000000 7 +b00000000000000000000000000000000 8 +b000 9 +b000000 : +b00000000000000000000000000000000 ; +b00000000000000000000000000000000 < +0= 0> 0? 0@ @@ -96,139 +96,139 @@ b00000000000000000000000000000100 J b00000000000000000000000000000010 K b00000000000000000000000000000011 L #10 -b1111 $ -r0.1 % -b00000000000000000000000000000101 ' -b00000000000000000000000000000101 ( -b11 ) +b00000000000000000000000000000001 $ +b11 % +b1111 & +b11 ' +b11 ( +b1111 ) b1111 * -b00000000000000000000000000000001 + -b00000000000000000000000000000010 , +b11 + +b11 , b11 - b11 . -b1111 / -b0000000000000000000000000000000100000000000000000000000011111110 0 -b111 2 -14 -b00000000000000000000000000000001 5 -b11 6 -b11 7 -b11 8 -b11 9 -r0.2 : -r0.3 < +r0.1 / +r0.2 1 +r0.3 3 +b0000000000000000000000000000000100000000000000000000000011111110 5 +b00000000000000000000000000000001 7 +b00000000000000000000000000000010 8 +b111 9 +b00000000000000000000000000000101 ; +b00000000000000000000000000000101 < +1= #15 -04 +0= #20 -b0000 $ -r0.2 % -b00 ) +b00000000000000000000000000000010 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000010 + -b00000000000000000000000000000100 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000001000000000000000000000000011111101 0 -b110 2 -b111111 3 -14 -b00000000000000000000000000000010 5 -b00 6 -b00 7 -b00 8 -b00 9 -r0.4 : -r0.6 < +r0.2 / +r0.4 1 +r0.6 3 +b0000000000000000000000000000001000000000000000000000000011111101 5 +b00000000000000000000000000000010 7 +b00000000000000000000000000000100 8 +b110 9 +b111111 : +1= #25 -04 +0= #30 -b1111 $ -r0.3 % -b11 ) +b00000000000000000000000000000011 $ +b11 % +b1111 & +b11 ' +b11 ( +b1111 ) b1111 * -b00000000000000000000000000000011 + -b00000000000000000000000000000110 , +b11 + +b11 , b11 - b11 . -b1111 / -b0000000000000000000000000000001100000000000000000000000011111100 0 -b101 2 -b110110 3 -14 -b00000000000000000000000000000011 5 -b11 6 -b11 7 -b11 8 -b11 9 -r0.6000000000000001 : -r0.8999999999999999 < +r0.3 / +r0.6000000000000001 1 +r0.8999999999999999 3 +b0000000000000000000000000000001100000000000000000000000011111100 5 +b00000000000000000000000000000011 7 +b00000000000000000000000000000110 8 +b101 9 +b110110 : +1= #35 -04 +0= #40 -b0000 $ -r0.4 % -b00 ) +b00000000000000000000000000000100 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000100 + -b00000000000000000000000000001000 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000010000000000000000000000000011111011 0 -b100 2 -b101101 3 -14 -b00000000000000000000000000000100 5 -b00 6 -b00 7 -b00 8 -b00 9 -r0.8 : -r1.2 < +r0.4 / +r0.8 1 +r1.2 3 +b0000000000000000000000000000010000000000000000000000000011111011 5 +b00000000000000000000000000000100 7 +b00000000000000000000000000001000 8 +b100 9 +b101101 : +1= #45 -04 +0= #50 -b1111 $ -r0.5 % -b11 ) +b00000000000000000000000000000101 $ +b11 % +b1111 & +b11 ' +b11 ( +b1111 ) b1111 * -b00000000000000000000000000000101 + -b00000000000000000000000000001010 , +b11 + +b11 , b11 - b11 . -b1111 / -b0000000000000000000000000000010100000000000000000000000011111010 0 -b011 2 -b100100 3 -14 -b00000000000000000000000000000101 5 -b11 6 -b11 7 -b11 8 -b11 9 -r1 : -r1.5 < +r0.5 / +r1 1 +r1.5 3 +b0000000000000000000000000000010100000000000000000000000011111010 5 +b00000000000000000000000000000101 7 +b00000000000000000000000000001010 8 +b011 9 +b100100 : +1= #55 -04 +0= #60 -b0000 $ -r0.6 % -b00 ) +b00000000000000000000000000000110 $ +b00 % +b0000 & +b00 ' +b00 ( +b0000 ) b0000 * -b00000000000000000000000000000110 + -b00000000000000000000000000001100 , +b00 + +b00 , b00 - b00 . -b0000 / -b0000000000000000000000000000011000000000000000000000000011111001 0 -b010 2 -b011011 3 -14 -b00000000000000000000000000000110 5 -b00 6 -b00 7 -b00 8 -b00 9 -r1.2 : -r1.8 < +r0.6 / +r1.2 1 +r1.8 3 +b0000000000000000000000000000011000000000000000000000000011111001 5 +b00000000000000000000000000000110 7 +b00000000000000000000000000001100 8 +b010 9 +b011011 : +1= diff --git a/test_regress/t/t_trace_complex_params_fst.out b/test_regress/t/t_trace_complex_params_fst.out index 663f71da5..73f2152c0 100644 --- a/test_regress/t/t_trace_complex_params_fst.out +++ b/test_regress/t/t_trace_complex_params_fst.out @@ -1,5 +1,5 @@ $date - Thu Jan 25 08:07:29 2024 + Tue Jun 10 19:02:39 2025 $end $version @@ -11,12 +11,12 @@ $end $scope module top $end $attrbegin misc 07 t.enumed_t 4 ZERO ONE TWO THREE 00000000000000000000000000000000 00000000000000000000000000000001 00000000000000000000000000000010 00000000000000000000000000000011 1 $end $attrbegin misc 07 t.enumb_t 4 BZERO BONE BTWO BTHREE 000 001 010 011 2 $end +$var wire 1 ! clk $end $scope module $unit $end -$var bit 1 ! global_bit $end +$var bit 1 " global_bit $end $upscope $end -$var wire 1 " clk $end $scope module t $end -$var wire 1 " clk $end +$var wire 1 ! clk $end $var integer 32 # cyc [31:0] $end $var bit 2 $ v_strp [1:0] $end $var bit 4 % v_strp_strp [3:0] $end @@ -105,11 +105,11 @@ b00 & b0000 % b00 $ b00000000000000000000000000000000 # -0" -1! +1" +0! $end #10 -1" +1! b00000000000000000000000000000001 # b11 $ b1111 % @@ -131,9 +131,9 @@ b111 ; b00000000000000000000000000000101 D b00000000000000000000000000000101 E #15 -0" +0! #20 -1" +1! b110 ; b00000000000000000000000000000100 : b00000000000000000000000000000010 9 @@ -154,9 +154,9 @@ b00 $ b00000000000000000000000000000010 # b111111 < #25 -0" +0! #30 -1" +1! b110110 < b00000000000000000000000000000011 # b11 $ @@ -177,9 +177,9 @@ b00000000000000000000000000000011 9 b00000000000000000000000000000110 : b101 ; #35 -0" +0! #40 -1" +1! b100 ; b00000000000000000000000000001000 : b00000000000000000000000000000100 9 @@ -200,9 +200,9 @@ b00 $ b00000000000000000000000000000100 # b101101 < #45 -0" +0! #50 -1" +1! b100100 < b00000000000000000000000000000101 # b11 $ @@ -223,9 +223,9 @@ b00000000000000000000000000000101 9 b00000000000000000000000000001010 : b011 ; #55 -0" +0! #60 -1" +1! b010 ; b00000000000000000000000000001100 : b00000000000000000000000000000110 9 diff --git a/test_regress/t/t_trace_complex_structs.out b/test_regress/t/t_trace_complex_structs.out index 62af1451c..ee2694794 100644 --- a/test_regress/t/t_trace_complex_structs.out +++ b/test_regress/t/t_trace_complex_structs.out @@ -1,10 +1,10 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end $scope module top $end + $var wire 1 I clk $end $scope module $unit $end $var wire 1 # global_bit $end $upscope $end - $var wire 1 I clk $end $scope module t $end $var wire 1 I clk $end $var wire 32 $ cyc [31:0] $end diff --git a/test_regress/t/t_trace_complex_structs_fst.out b/test_regress/t/t_trace_complex_structs_fst.out index e55bcf96f..54d3858d3 100644 --- a/test_regress/t/t_trace_complex_structs_fst.out +++ b/test_regress/t/t_trace_complex_structs_fst.out @@ -1,5 +1,5 @@ $date - Thu Jan 25 08:09:51 2024 + Tue Jun 10 19:02:40 2025 $end $version @@ -11,12 +11,12 @@ $end $scope module top $end $attrbegin misc 07 t.enumed_t 4 ZERO ONE TWO THREE 00000000000000000000000000000000 00000000000000000000000000000001 00000000000000000000000000000010 00000000000000000000000000000011 1 $end $attrbegin misc 07 t.enumb_t 4 BZERO BONE BTWO BTHREE 000 001 010 011 2 $end +$var wire 1 ! clk $end $scope module $unit $end -$var bit 1 ! global_bit $end +$var bit 1 " global_bit $end $upscope $end -$var wire 1 " clk $end $scope module t $end -$var wire 1 " clk $end +$var wire 1 ! clk $end $var integer 32 # cyc [31:0] $end $scope struct v_strp $end $var bit 1 $ b1 $end @@ -151,11 +151,11 @@ b00 , 0% 0$ b00000000000000000000000000000000 # -0" -1! +1" +0! $end #10 -1" +1! b00000000000000000000000000000001 # 1$ 1% @@ -189,9 +189,9 @@ b111 G b00000000000000000000000000000101 N b00000000000000000000000000000101 O #15 -0" +0! #20 -1" +1! b110 G b00000000000000000000000000000100 F b00000000000000000000000000000010 E @@ -225,9 +225,9 @@ b00000000000000000000000000000010 # b111 H b111 I #25 -0" +0! #30 -1" +1! b110 I b110 H b00000000000000000000000000000011 # @@ -261,9 +261,9 @@ b00000000000000000000000000000011 E b00000000000000000000000000000110 F b101 G #35 -0" +0! #40 -1" +1! b100 G b00000000000000000000000000001000 F b00000000000000000000000000000100 E @@ -297,9 +297,9 @@ b00000000000000000000000000000100 # b101 H b101 I #45 -0" +0! #50 -1" +1! b100 I b100 H b00000000000000000000000000000101 # @@ -333,9 +333,9 @@ b00000000000000000000000000000101 E b00000000000000000000000000001010 F b011 G #55 -0" +0! #60 -1" +1! b010 G b00000000000000000000000000001100 F b00000000000000000000000000000110 E diff --git a/test_regress/t/t_trace_event.out b/test_regress/t/t_trace_event.out index 33f528708..13b11089b 100644 --- a/test_regress/t/t_trace_event.out +++ b/test_regress/t/t_trace_event.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module t $end $var event 1 # ev_test $end $var wire 32 $ i [31:0] $end diff --git a/test_regress/t/t_trace_event_fst.out b/test_regress/t/t_trace_event_fst.out index bda112149..c67115be4 100644 --- a/test_regress/t/t_trace_event_fst.out +++ b/test_regress/t/t_trace_event_fst.out @@ -1,5 +1,5 @@ $date - Sun Sep 22 22:54:12 2024 + Tue Jun 10 19:02:19 2025 $end $version @@ -8,8 +8,6 @@ $end $timescale 1ps $end -$scope module $rootio $end -$upscope $end $scope module t $end $var event 1 ! ev_test $end $var int 32 " i [31:0] $end diff --git a/test_regress/t/t_trace_no_top_name.out b/test_regress/t/t_trace_no_top_name.out index 5eef24e61..2905133f4 100644 --- a/test_regress/t/t_trace_no_top_name.out +++ b/test_regress/t/t_trace_no_top_name.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module another_top $end $var wire 1 # b $end $upscope $end diff --git a/test_regress/t/t_trace_no_top_name2.v b/test_regress/t/t_trace_no_top_name2.v index b1f408cb6..4d02a9029 100644 --- a/test_regress/t/t_trace_no_top_name2.v +++ b/test_regress/t/t_trace_no_top_name2.v @@ -4,6 +4,14 @@ // any use, without warranty, 2024 by Wilson Snyder. // SPDX-License-Identifier: CC0-1.0 +package foo_pkg; + function int foo_func; + input int b; + int b_current; + return 0; + endfunction +endpackage + module sub; int a = 1212; endmodule @@ -13,7 +21,9 @@ module t (/*AUTOARG*/ clk ); input clk; - int cyc; + int cyc; + + import foo_pkg::*; sub sub(); diff --git a/test_regress/t/t_trace_no_top_name2_fst.out b/test_regress/t/t_trace_no_top_name2_fst.out index 81393e41f..51bb6dce5 100644 --- a/test_regress/t/t_trace_no_top_name2_fst.out +++ b/test_regress/t/t_trace_no_top_name2_fst.out @@ -1,5 +1,5 @@ $date - Sat Sep 21 08:10:39 2024 + Tue Jun 10 18:57:59 2025 $end $version @@ -11,67 +11,71 @@ $end $scope module $rootio $end $var wire 1 ! clk $end $upscope $end +$scope module foo_pkg $end +$var int 32 " foo_func__Vstatic__b_current [31:0] $end +$upscope $end $scope module t $end $var wire 1 ! clk $end -$var int 32 " cyc [31:0] $end +$var int 32 # cyc [31:0] $end $scope module sub $end -$var int 32 # a [31:0] $end +$var int 32 $ a [31:0] $end $upscope $end $upscope $end $enddefinitions $end #0 $dumpvars -b00000000000000000000010010111100 # +b00000000000000000000010010111100 $ +b00000000000000000000000000000000 # b00000000000000000000000000000000 " 0! $end #1 1! -b00000000000000000000000000000001 " +b00000000000000000000000000000001 # #2 0! #3 1! -b00000000000000000000000000000010 " +b00000000000000000000000000000010 # #4 0! #5 1! -b00000000000000000000000000000011 " +b00000000000000000000000000000011 # #6 0! #7 1! -b00000000000000000000000000000100 " +b00000000000000000000000000000100 # #8 0! #9 1! -b00000000000000000000000000000101 " +b00000000000000000000000000000101 # #10 0! #11 1! -b00000000000000000000000000000110 " +b00000000000000000000000000000110 # #12 0! #13 1! -b00000000000000000000000000000111 " +b00000000000000000000000000000111 # #14 0! #15 1! -b00000000000000000000000000001000 " +b00000000000000000000000000001000 # #16 0! #17 1! -b00000000000000000000000000001001 " +b00000000000000000000000000001001 # #18 0! #19 1! -b00000000000000000000000000001010 " +b00000000000000000000000000001010 # #20 0! diff --git a/test_regress/t/t_trace_no_top_name2_saif.out b/test_regress/t/t_trace_no_top_name2_saif.out index 8c984483e..99ad2662c 100644 --- a/test_regress/t/t_trace_no_top_name2_saif.out +++ b/test_regress/t/t_trace_no_top_name2_saif.out @@ -11,6 +11,42 @@ (clk (T0 10) (T1 10) (TZ 0) (TX 0) (TB 0) (TC 20)) ) ) + (INSTANCE foo_pkg + (NET + (foo_func__Vstatic__b_current\[0\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[1\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[2\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[3\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[4\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[5\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[6\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[7\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[8\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[9\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[10\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[11\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[12\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[13\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[14\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[15\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[16\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[17\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[18\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[19\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[20\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[21\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[22\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[23\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[24\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[25\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[26\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[27\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[28\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[29\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[30\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + (foo_func__Vstatic__b_current\[31\] (T0 20) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0)) + ) + ) (INSTANCE t (NET (clk (T0 10) (T1 10) (TZ 0) (TX 0) (TB 0) (TC 20)) diff --git a/test_regress/t/t_trace_no_top_name2_vcd.out b/test_regress/t/t_trace_no_top_name2_vcd.out index 45e6e891c..7835046a5 100644 --- a/test_regress/t/t_trace_no_top_name2_vcd.out +++ b/test_regress/t/t_trace_no_top_name2_vcd.out @@ -3,6 +3,9 @@ $timescale 1ps $end $scope module $rootio $end $var wire 1 # clk $end $upscope $end + $scope module foo_pkg $end + $var wire 32 & foo_func__Vstatic__b_current [31:0] $end + $upscope $end $scope module t $end $var wire 1 # clk $end $var wire 32 $ cyc [31:0] $end @@ -17,6 +20,7 @@ $enddefinitions $end 0# b00000000000000000000000000000000 $ b00000000000000000000010010111100 % +b00000000000000000000000000000000 & #1 1# b00000000000000000000000000000001 $ diff --git a/test_regress/t/t_trace_param_override.out b/test_regress/t/t_trace_param_override.out index c139f47f0..e896822d2 100644 --- a/test_regress/t/t_trace_param_override.out +++ b/test_regress/t/t_trace_param_override.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module t $end $var wire 32 # POVERRODE [31:0] $end $var wire 32 $ PORIG [31:0] $end diff --git a/test_regress/t/t_trace_public.out b/test_regress/t/t_trace_public.out index 1ded6ffc4..c545c91dc 100644 --- a/test_regress/t/t_trace_public.out +++ b/test_regress/t/t_trace_public.out @@ -1,6 +1,8 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end $scope module top $end + $var wire 1 5 CLK $end + $var wire 1 6 RESET $end $scope module t $end $var wire 1 5 CLK $end $var wire 1 # RESET $end @@ -23,8 +25,6 @@ $timescale 1ps $end $var wire 128 1 i128 [63:-64] $end $upscope $end $upscope $end - $var wire 1 5 CLK $end - $var wire 1 6 RESET $end $upscope $end $enddefinitions $end diff --git a/test_regress/t/t_trace_timing1.out b/test_regress/t/t_trace_timing1.out index 9aa36ef0b..ac703d8cc 100644 --- a/test_regress/t/t_trace_timing1.out +++ b/test_regress/t/t_trace_timing1.out @@ -1,7 +1,5 @@ $version Generated by VerilatedVcd $end $timescale 1ps $end - $scope module $rootio $end - $upscope $end $scope module t $end $var wire 32 % CLOCK_CYCLE [31:0] $end $var wire 1 # rst $end