Compare commits

...

13 Commits

Author SHA1 Message Date
Greg Davill b518f006ba
Merge c20a6f4396 into 4fe121e5aa 2026-04-15 21:29:52 -04:00
Wilson Snyder 4fe121e5aa Commentary: Changes update 2026-04-15 17:46:08 -04:00
Wilson Snyder 1011ea86fa Commentary (#7428) (#7432) 2026-04-15 17:45:48 -04:00
github action 885fbaf075 Apply 'make format' 2026-04-15 12:11:06 +00:00
Rowan Goemans c143c2fdd2
Fix side-effect loss when slicing array expressions (#7427) (#7429)
Fixes #7427.
2026-04-15 08:10:11 -04:00
Todd Strader 7f571971ca
Optimize trace code for faster compiles on repeated types (#6707) (#6832) 2026-04-14 19:16:21 -04:00
Yilou Wang 38b7734530
Fix subclass with rand_mode(0) getting randomized (#7376) (#7383)
Fixes #7376.
2026-04-14 16:47:24 -04:00
Geza Lore ab0264deca
Optimize more Dfg peephole patterns (#7423) 2026-04-14 16:22:54 +01:00
Greg Davill c20a6f4396
Fix whitespace error 2026-04-11 16:03:13 +09:30
Greg Davill 419f3192c5
Avoid greedy calls to userIterateAndNext 2026-04-11 15:32:27 +09:30
Greg Davill e9f42fdfbd
Resolve SelExtract and determine element width from dtype 2026-04-11 15:07:39 +09:30
Greg Davill fee71d420c
Fix array and slice flattening in assignment pattern initialisation 2026-04-11 14:21:40 +09:30
Greg Davill d4613ed1a4
Tests: Add test for array pattern concatenation 2026-04-11 14:21:35 +09:30
178 changed files with 84495 additions and 33131 deletions

View File

@ -54,6 +54,7 @@ Verilator 5.047 devel
* Support sequence `first_match` operator (#7392). [Yilou Wang]
* Support nonconsecutive repetition [=N] in sequence expressions (#7397). [Yilou Wang]
* Support per-process RNG for process::srandom() and object seeding (#7408) (#7415) (#7408). [Yilou Wang]
* Support 2**n expressions in constraint randomization (#7422). [Yilou Wang]
* Add VPI callback support to --main (#7145).
* Add V3LiftExpr pass to lower impure expressions and calls (#7141) (#7164). [Geza Lore, Testorrent USA, Inc.]
* Add --func-recursion-depth CLI option (#7175) (#7179).
@ -66,6 +67,7 @@ Verilator 5.047 devel
* Change array tracing to dump left index to right index (#7205). [Geza Lore, Testorrent USA, Inc.]
* Change `--converge-limit` default to 10000 (#7209).
* Remove DFG extract optimization pass (#7394). [Geza Lore, Testorrent USA, Inc.]
* Optimize trace code for faster compiles on repeated types (#6707) (#6832). [Todd Strader]
* Optimize size of trace declaration object code (#7150). [Szymon Gizler, Antmicro Ltd.]
* Optimize function call return value temporaries (#7152). [Geza Lore, Testorrent USA, Inc.]
* Optimize conditional merging across some impure statements (#7159). [Geza Lore, Testorrent USA, Inc.]
@ -77,6 +79,7 @@ Verilator 5.047 devel
* Optimize more patterns in DfgPeephole (#7332). [Geza Lore, Testorrent USA, Inc.]
* Optimize read references in DFG (#7354). [Geza Lore, Testorrent USA, Inc.]
* Optimize DFG only once, after scoping (#7362). [Geza Lore, Testorrent USA, Inc.]
* Optimize more DFG peephole patterns (#7423). [Geza Lore, Testorrent USA, Inc.]
* Fix recursive default assignment for sub-arrays (#4589) (#7202). [Julian Carrier]
* Fix virtual interface member trigger convergence (#5116) (#7323). [Yilou Wang]
* Fix shift width mismatch in constraint solver SMT emission (#5420) (#7265). [Yilou Wang]
@ -139,6 +142,7 @@ Verilator 5.047 devel
* Fix virtual interface function calls binding to wrong instance (#7363). [Yilou Wang]
* Fix false ASSIGNIN on interface input port connections (#7365). [Yilou Wang]
* Fix string `inside` queue (#7373).
* Fix subclass with rand_mode(0) getting randomized (#7376) (#7383). [Yilou Wang]
* Fix VPI access to Verilog `force`-ed signals (#7381). [Christian Hecken, Heidelberg University]
* Fix sampling of hierarchical references (#7386). [Ryszard Rozak, Antmicro Ltd.]
* Fix virtual class inheritance false error (#7403) (#7405). [Nikolay Puzanov]

View File

@ -230,6 +230,7 @@ Risto Pejašinović
Robert Balas
Robin Heinemann
Rodrigo Batista de Moraes
Rowan Goemans
Rupert Swarbrick
Ryan Ziegler
Ryszard Rozak

View File

@ -40,7 +40,8 @@ To build using MSVC:
.. code-block:: bash
cd verilator # directory containing source files of verilator
mkdir build
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release --install-prefix $PWD/../install
cmake --build . --config Release
cmake --install . --prefix $PWD/../install
@ -50,7 +51,8 @@ To build using ninja:
.. code-block:: bash
cd verilator
mkdir build
mkdir -p build
cd build
cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release --install-prefix $PWD/../install -DCMAKE_MAKE_PROGRAM=<path to ninja binary> -DBISON_EXECUTABLE=<path to bison> -DFLEX_EXECUTABLE=<path to flex>
<path to ninja binary> #execute ninja
cmake --install . --prefix $PWD/../install
@ -71,7 +73,7 @@ Example
cd verilator/examples
cd cmake_hello_c
mkdir build
mkdir -p build
cd build
cmake .. # cmake -G Ninja ..
cmake --build . --config Release # ninja

View File

@ -2601,11 +2601,11 @@ List Of Warnings
Since version 5.046:
Issued if neither :vlopt:`--sched-zero-delay`, nor
:vlopt:`--sched-zero-delay` is used on the command line, and the input does
not contain a compile time known ``#0`` delay, but does contain a
``#(expressin)`` where the delay value cannot be determined at compile time.
Passing :vlopt:`--no-sched-zero-delay` can improve runtime performance if
variable delays are all known to be non-zero at runtime.
:vlopt:`--sched-zero-delay` is used on the command line, and the input
does not contain a compile time known ``#0`` delay, but does contain a
``#(expression)`` where the delay value cannot be determined at compile
time. Passing :vlopt:`--no-sched-zero-delay` can improve runtime
performance if variable delays are all known to be non-zero at runtime.
Also issued if :vlopt:`--no-sched-zero-delay` is used on the command line,
but the input contains a compile time known ``#0`` delay. This is safe to

View File

@ -1139,6 +1139,16 @@ public:
bool isWritable() const VL_MT_SAFE { return m_e == OUTPUT || m_e == INOUT || m_e == REF; }
bool isRef() const VL_MT_SAFE { return m_e == REF; }
bool isConstRef() const VL_MT_SAFE { return m_e == CONSTREF; }
string traceSigDirection() const {
if (isInout()) {
return "VerilatedTraceSigDirection::INOUT";
} else if (isWritable()) {
return "VerilatedTraceSigDirection::OUTPUT";
} else if (isNonOutput()) {
return "VerilatedTraceSigDirection::INPUT";
}
return "VerilatedTraceSigDirection::NONE";
}
};
constexpr bool operator==(const VDirection& lhs, const VDirection& rhs) VL_MT_SAFE {
return lhs.m_e == rhs.m_e;
@ -1798,6 +1808,10 @@ public:
static const char* const names[] = {"CONSTANT", "FULL", "CHANGE"};
return names[m_e];
}
const char* func_prefix() const {
static const char* const names[] = {"trace_const", "trace_full", "trace_chg"};
return names[m_e];
}
};
constexpr bool operator==(const VTraceType& lhs, const VTraceType& rhs) {
return lhs.m_e == rhs.m_e;

View File

@ -4679,6 +4679,7 @@ public:
string selfPointerProtect(bool useSelfForThis) const {
return selfPointer().protect(useSelfForThis, protect());
}
bool maybePointedTo() const override VL_MT_SAFE { return true; }
};
class AstCMethodCall final : public AstNodeCCall {
// C++ method call

View File

@ -2089,6 +2089,12 @@ public:
}
VDirection direction() const VL_MT_SAFE { return m_direction; }
bool isIO() const VL_MT_SAFE { return m_direction != VDirection::NONE; }
bool isVLIO() const {
const AstBasicDType* const bdtypep = basicp();
return isPrimaryIO() && bdtypep && !bdtypep->isOpaque()
&& !dtypep()->skipRefp()->isCompound()
&& !VN_IS(dtypep()->skipRefp(), UnpackArrayDType);
}
void declDirection(const VDirection& flag) { m_declDirection = flag; }
VDirection declDirection() const { return m_declDirection; }
void varType(VVarType type) { m_varType = type; }
@ -2107,7 +2113,7 @@ public:
string dpiTmpVarType(const string& varName) const;
// Return Verilator internal type for argument: CData, SData, IData, WData
string vlArgType(bool named, bool forReturn, bool forFunc, const string& namespc = "",
bool asRef = false) const;
bool asRef = false, bool constRef = false) const;
string vlEnumType() const; // Return VerilatorVarType: VLVT_UINT32, etc
string vlEnumDir() const; // Return VerilatorVarDir: VLVD_INOUT, etc
string vlPropDecl(const string& propName) const; // Return VerilatorVarProps declaration

View File

@ -1267,6 +1267,9 @@ class AstTraceDecl final : public AstNodeStmt {
// Parents: {statement list}
// Expression being traced - Moved to AstTraceInc by V3Trace
// @astgen op1 := valuep : Optional[AstNodeExpr]
//
// @astgen ptr := m_dtypeCallp: Optional[AstCCall] // Type init function call
// @astgen ptr := m_dtypeDeclp: Optional[AstTraceDecl] // CCall TraceDecl which replaces this
uint32_t m_code{std::numeric_limits<uint32_t>::max()}; // Trace identifier code
uint32_t m_fidx{0}; // Trace function index
const string m_showname; // Name of variable
@ -1274,18 +1277,23 @@ class AstTraceDecl final : public AstNodeStmt {
const VNumRange m_arrayRange; // Property of var the trace details
const VVarType m_varType; // Type of variable (for localparam vs. param)
const VDirection m_declDirection; // Declared direction input/output etc
const bool m_inDtypeFunc; // Trace decl inside type init function
int m_codeInc{0}; // Code increment for type
public:
AstTraceDecl(FileLine* fl, const string& showname,
AstVar* varp, // For input/output state etc
AstNodeExpr* valuep, const VNumRange& bitRange, const VNumRange& arrayRange)
AstNodeExpr* valuep, const VNumRange& bitRange, const VNumRange& arrayRange,
AstCCall* const dtypeCallp, const bool inDtypeFunc)
: ASTGEN_SUPER_TraceDecl(fl)
, m_showname{showname}
, m_bitRange{bitRange}
, m_arrayRange{arrayRange}
, m_varType{varp->varType()}
, m_declDirection{varp->declDirection()} {
, m_declDirection{varp->declDirection()}
, m_inDtypeFunc{inDtypeFunc} {
dtypeFrom(valuep);
this->valuep(valuep);
this->dtypeCallp(dtypeCallp);
}
void dump(std::ostream& str) const override;
void dumpJson(std::ostream& str) const override;
@ -1294,7 +1302,7 @@ public:
string name() const override VL_MT_STABLE { return m_showname; }
bool maybePointedTo() const override VL_MT_SAFE { return true; }
bool hasDType() const override VL_MT_SAFE { return true; }
bool sameNode(const AstNode* samep) const override { return false; }
bool sameNode(const AstNode* samep) const override { return true; }
string showname() const { return m_showname; } // * = Var name
// Details on what we're tracing
uint32_t code() const { return m_code; }
@ -1302,7 +1310,9 @@ public:
bool codeAssigned() const { return m_code != std::numeric_limits<uint32_t>::max(); }
uint32_t fidx() const { return m_fidx; }
void fidx(uint32_t fidx) { m_fidx = fidx; }
void codeInc(uint32_t codeInc) { m_codeInc = codeInc; }
uint32_t codeInc() const {
if (m_codeInc) { return m_codeInc; }
return (m_arrayRange.ranged() ? m_arrayRange.elements() : 1)
* valuep()->dtypep()->widthWords()
* (VL_EDATASIZE / 32); // A code is always 32-bits
@ -1311,6 +1321,11 @@ public:
const VNumRange& arrayRange() const { return m_arrayRange; }
VVarType varType() const { return m_varType; }
VDirection declDirection() const { return m_declDirection; }
AstCCall* dtypeCallp() const { return m_dtypeCallp; }
void dtypeCallp(AstCCall* const callp) { m_dtypeCallp = callp; }
AstTraceDecl* dtypeDeclp() const { return m_dtypeDeclp; }
void dtypeDeclp(AstTraceDecl* const declp) { m_dtypeDeclp = declp; }
bool inDtypeFunc() const { return m_inDtypeFunc; }
};
class AstTraceInc final : public AstNodeStmt {
// Trace point dump
@ -1359,20 +1374,23 @@ class AstTracePushPrefix final : public AstNodeStmt {
const VTracePrefixType m_prefixType; // Type of prefix being pushed
const int m_left; // Array left index, or struct/union member count
const int m_right; // Array right index
const bool m_quotedPrefix; // Quote prefix name
public:
AstTracePushPrefix(FileLine* fl, const string& prefix, VTracePrefixType prefixType,
int left = 0, int right = 0)
int left = 0, int right = 0, bool quotedPrefix = true)
: ASTGEN_SUPER_TracePushPrefix(fl)
, m_prefix{prefix}
, m_prefixType{prefixType}
, m_left{left}
, m_right{right} {}
, m_right{right}
, m_quotedPrefix{quotedPrefix} {}
ASTGEN_MEMBERS_AstTracePushPrefix;
bool sameNode(const AstNode* samep) const override { return false; }
string prefix() const { return m_prefix; }
VTracePrefixType prefixType() const { return m_prefixType; }
int left() const { return m_left; }
int right() const { return m_right; }
bool quotedPrefix() const { return m_quotedPrefix; }
};
class AstWait final : public AstNodeStmt {
// @astgen op1 := condp : AstNodeExpr

View File

@ -622,7 +622,7 @@ string AstVar::verilogKwd() const {
}
string AstVar::vlArgType(bool named, bool forReturn, bool forFunc, const string& namespc,
bool asRef) const {
bool asRef, bool constRef) const {
UASSERT_OBJ(!forReturn, this,
"Internal data is never passed as return, but as first argument");
string ostatic;
@ -630,7 +630,7 @@ string AstVar::vlArgType(bool named, bool forReturn, bool forFunc, const string&
asRef = asRef || isDpiOpenArray() || (forFunc && (isWritable() || isRef() || isConstRef()));
if (forFunc && isReadOnly() && asRef) ostatic = ostatic + "const ";
if (forFunc && (isReadOnly() || constRef) && asRef) ostatic = ostatic + "const ";
string oname;
if (named) {
@ -3317,7 +3317,8 @@ void AstStop::dumpJson(std::ostream& str) const {
}
void AstTraceDecl::dump(std::ostream& str) const {
this->AstNodeStmt::dump(str);
if (code()) str << " [code=" << code() << "]";
if (codeAssigned()) str << " [code=" << code() << "]";
if (dtypeCallp()) str << " [dtypeCallp=" << dtypeCallp() << "]";
}
void AstTraceDecl::dumpJson(std::ostream& str) const {
dumpJsonNumFunc(str, code);

File diff suppressed because it is too large Load Diff

View File

@ -27,12 +27,12 @@
// Enumeration of each peephole optimization. Must be kept in sorted order (enforced by tests).
// clang-format off
#define FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION(macro) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_ASSOC_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_ASSOC_BINARY_LHS_OF_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_ASSOC_BINARY_RHS_OF_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_MUX_FROM_ONES) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_MUX_FROM_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_REPLICATE) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_SEL) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_SELF_EQ) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, FOLD_SELF_GT) \
@ -68,16 +68,19 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, PUSH_SEL_THROUGH_SPLICE) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, PUSH_SHIFTL_THROUGH_COND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, PUSH_SHIFTR_THROUGH_COND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_ACI_BINARY_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_ACI_BINARY_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_ADD_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_AND_WITH_ONES) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_AND_WITH_SELF) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_CONCAT_OF_ADJOINING_SELS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_COND_WITH_BRANCHES_SAME) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_COND_WITH_FALSE_CONDITION) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_COND_WITH_TRUE_CONDITION) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_EQ_BIT_1) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_FULL_WIDTH_SEL) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_IDEMPOTENT_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_NEQ_BIT_0) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_NOT_NOT) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_OR_WITH_SELF) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_OR_WITH_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_REDUNDANT_ZEXT_ON_RHS_OF_SHIFT) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REMOVE_REPLICATE_ONCE) \
@ -92,13 +95,19 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_ADD_WITH_COUNT_ONES) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_AND_OF_NOT_AND_NEQ) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_AND_OF_NOT_AND_NOT) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_AND_REP_COND_ELSE_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_AND_WITH_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_BITWISE_OF_REDUCTION_OF_SELS_WITH_REDUCTION) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_BITWISE_OF_SELS_WITH_REDUCTION) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONCAT_SAME) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONCAT_SAME_REP_ON_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONCAT_SAME_REP_ON_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONCAT_SEL_BOTTOM_AND_ZERO_WITH_SHIFTL) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONCAT_ZERO_AND_SEL_TOP_WITH_SHIFTR) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_CONST_ONES_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_CONST_ONE_ZERO) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_CONST_ZERO_ONE) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_CONST_ZERO_ONES) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_DEC) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_INC) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_OR_THEN_COND_LHS) \
@ -107,6 +116,8 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_SAME_CAT_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_SAME_COND_ELSE) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_SAME_COND_THEN) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_THEN_OR_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_THEN_OR_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_WITH_ELSE_BRANCH_COND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_WITH_ELSE_BRANCH_ONES) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_COND_WITH_ELSE_BRANCH_ZERO) \
@ -116,10 +127,12 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONTRADICTORY_AND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_CONTRADICTORY_AND_3) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_DISTRIBUTIVE_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_EQ_BIT_0) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_EXTEND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_LOGAND_WITH_AND) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_LOGOR_WITH_OR) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_MUX_WITH_SEL) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NEQ_BIT_1) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NESTED_CONCAT_OF_ADJOINING_SELS_ON_LHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NESTED_CONCAT_OF_ADJOINING_SELS_ON_RHS) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, REPLACE_NOT_EQ) \
@ -149,10 +162,7 @@
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, RIGHT_LEANING_ASSOC) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_COND_WITH_NEQ_CONDITION) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_COND_WITH_NOT_CONDITION) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_CONST_IN_COMMUTATIVE_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_NOT_IN_COMMUTATIVE_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_SAME_IN_COMMUTATIVE_BINARY) \
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_SIDE_IN_COMMUTATIVE_BINARY)
_FOR_EACH_DFG_PEEPHOLE_OPTIMIZATION_APPLY(macro, SWAP_SIDES_IN_BINARY)
// clang-format on
class VDfgPeepholePattern final {

View File

@ -207,9 +207,7 @@ void EmitCBaseVisitorConst::emitVarDecl(const AstVar* nodep, bool asRef) {
if (asRef && refNeedParens) puts(")");
emitDeclArrayBrackets(nodep);
puts(";\n");
} else if (nodep->isPrimaryIO() && basicp && !basicp->isOpaque()
&& !nodep->dtypep()->skipRefp()->isCompound()
&& !VN_IS(nodep->dtypep()->skipRefp(), UnpackArrayDType)) {
} else if (nodep->isVLIO()) {
if (nodep->isInout()) {
putns(nodep, "VL_INOUT");
} else if (nodep->isWritable()) {

View File

@ -627,6 +627,16 @@ class EmitCTrace final : public EmitCFunc {
}
void emitTraceInitOne(const AstTraceDecl* nodep, int enumNum) {
std::string direction;
direction = nodep->declDirection().traceSigDirection();
AstCCall* const callp = nodep->dtypeCallp();
if (callp) {
callp->argTypes(callp->argTypes() + ", " + cvtToStr(nodep->fidx()) + ", c+"
+ cvtToStr(nodep->code()) + ", " + direction);
return;
}
if (nodep->dtypep()->basicp()->isDouble()) {
puts("VL_TRACE_DECL_DOUBLE");
} else if (nodep->isWide()) {
@ -653,7 +663,11 @@ class EmitCTrace final : public EmitCFunc {
// Function index
puts(",");
puts(cvtToStr(nodep->fidx()));
if (nodep->inDtypeFunc()) {
puts("fidx");
} else {
puts(cvtToStr(nodep->fidx()));
}
// Name
puts(",");
@ -663,14 +677,10 @@ class EmitCTrace final : public EmitCFunc {
puts("," + cvtToStr(enumNum));
// Direction
if (nodep->declDirection().isInout()) {
puts(", VerilatedTraceSigDirection::INOUT");
} else if (nodep->declDirection().isWritable()) {
puts(", VerilatedTraceSigDirection::OUTPUT");
} else if (nodep->declDirection().isNonOutput()) {
puts(", VerilatedTraceSigDirection::INPUT");
if (nodep->inDtypeFunc()) {
puts(", direction");
} else {
puts(", VerilatedTraceSigDirection::NONE");
puts(", " + direction);
}
// Kind
@ -767,16 +777,7 @@ class EmitCTrace final : public EmitCFunc {
puts("VL_SC_BV_DATAP(");
}
iterateConst(varrefp); // Put var name out
// Tracing only supports 1D arrays
if (nodep->declp()->arrayRange().ranged()) {
if (arrayindex == -2) {
puts("[i]");
} else if (arrayindex == -1) {
puts("[0]");
} else {
puts("[" + cvtToStr(arrayindex) + "]");
}
}
emitTraceIndex(nodep, arrayindex);
if (varp->isSc()) puts(".read()");
if (emitTraceIsScUint(nodep)) {
puts(nodep->isQuad() ? ".to_uint64()" : ".to_uint()");
@ -789,10 +790,24 @@ class EmitCTrace final : public EmitCFunc {
} else {
puts("(");
iterateConst(nodep->valuep());
emitTraceIndex(nodep, arrayindex);
puts(")");
}
}
void emitTraceIndex(const AstTraceInc* const nodep, int arrayindex) {
// Tracing only supports 1D arrays
if (nodep->declp()->arrayRange().ranged()) {
if (arrayindex == -2) {
puts("[i]");
} else if (arrayindex == -1) {
puts("[0]");
} else {
puts("[" + cvtToStr(arrayindex) + "]");
}
}
}
// VISITORS
using EmitCFunc::visit; // Suppress hidden overloaded virtual function warning
void visit(AstCFunc* nodep) override {
@ -812,7 +827,11 @@ class EmitCTrace final : public EmitCFunc {
}
void visit(AstTracePushPrefix* nodep) override {
putns(nodep, "VL_TRACE_PUSH_PREFIX(tracep, ");
putsQuoted(VIdProtect::protectWordsIf(nodep->prefix(), nodep->protect()));
if (nodep->quotedPrefix()) {
putsQuoted(VIdProtect::protectWordsIf(nodep->prefix(), nodep->protect()));
} else {
puts(nodep->prefix());
}
puts(", VerilatedTracePrefixType::");
puts(nodep->prefixType().ascii());
puts(", " + std::to_string(nodep->left()));

View File

@ -429,11 +429,11 @@ class GateOkVisitor final : public VNVisitorConst {
// We only allow a LHS ref for the var being set, and a RHS ref for
// something else being read.
AstVarScope* const vscp = nodep->varScopep();
if (nodep->access().isWriteOnly()) {
if (m_lhsVarRef) clearSimple(">1 write refs");
m_lhsVarRef = nodep;
} else {
AstVarScope* const vscp = nodep->varScopep();
// TODO: possible bug, should it be >= 1 as add is below?
if (m_readVscps.size() > 1) {
if (m_buffersOnly) clearSimple(">1 rhs varRefs");

View File

@ -66,6 +66,19 @@ enum ClassRandom : uint8_t {
static constexpr const char* GLOBAL_CONSTRAINT_SEPARATOR = "__DT__";
static constexpr const char* BASIC_RANDOMIZE_FUNC_NAME = "__VBasicRand";
// Walk extends chain to find __Vrandmode variable (stored in AstClass::user2p).
// user2p is only set on the root class where __Vrandmode was created, so
// derived classes need this chain walk. Accepts AstNodeModule* for flexibility.
static AstVar* getRandModeVarFromClass(AstNodeModule* classp) {
while (classp) {
if (classp->user2p()) return VN_AS(classp->user2p(), Var);
AstClass* const cp = VN_CAST(classp, Class);
if (!cp || !cp->extendsp()) return nullptr;
classp = cp->extendsp()->classp();
}
return nullptr;
}
// ######################################################################
// Establishes the target of a rand_mode() call
@ -1085,7 +1098,7 @@ class ConstraintExprVisitor final : public VNVisitor {
AstNodeExpr* randModeAccess;
if (membersel) {
AstNodeModule* const varClassp = VN_AS(varp->user2p(), NodeModule);
AstVar* const effectiveRandModeVarp = VN_AS(varClassp->user2p(), Var);
AstVar* const effectiveRandModeVarp = getRandModeVarFromClass(varClassp);
if (effectiveRandModeVarp) {
// Member's class has randmode, use it
AstNodeExpr* parentAccess = membersel->fromp()->cloneTree(false);
@ -1346,7 +1359,7 @@ class ConstraintExprVisitor final : public VNVisitor {
initTaskp->addStmtsp(methodp->makeStmt());
if (isGlobalConstrained && membersel && randMode.usesMode) {
AstNodeModule* const varClassp = VN_AS(varp->user2p(), NodeModule);
AstVar* const subRandModeVarp = VN_AS(varClassp->user2p(), Var);
AstVar* const subRandModeVarp = getRandModeVarFromClass(varClassp);
if (subRandModeVarp) {
AstNodeExpr* const parentAccess = membersel->fromp()->cloneTree(false);
AstMemberSel* const randModeSel
@ -2574,6 +2587,8 @@ class ConstraintExprVisitor final : public VNVisitor {
VL_DO_DANGLING(pushDeletep(nodep), nodep);
iterate(inlinedp);
}
// Skip non-constraint stmts appended to the iterating list during inline randomize-with
void visit(AstNodeStmt* nodep) override {}
void visit(AstNodeExpr* nodep) override {
if (editFormat(nodep)) return;
nodep->v3fatalSrc(
@ -3039,13 +3054,6 @@ class RandomizeVisitor final : public VNVisitor {
classp->user2p(randModeVarp);
return randModeVarp;
}
static AstVar* getRandModeVar(AstClass* const classp) {
if (classp->user2p()) return VN_AS(classp->user2p(), Var);
if (AstClassExtends* const extendsp = classp->extendsp()) {
return getRandModeVar(extendsp->classp());
}
return nullptr;
}
AstVar* getCreateConstraintModeVar(AstClass* const classp) {
if (classp->user4p()) return VN_AS(classp->user4p(), Var);
if (AstClassExtends* const extendsp = classp->extendsp()) {
@ -3287,7 +3295,7 @@ class RandomizeVisitor final : public VNVisitor {
}
static AstNodeStmt* wrapIfRandMode(AstClass* classp, AstVar* const varp, AstNodeStmt* stmtp) {
const RandomizeMode rmode = {.asInt = varp->user1()};
return VN_AS(wrapIfMode(rmode, getRandModeVar(classp), stmtp), NodeStmt);
return VN_AS(wrapIfMode(rmode, getRandModeVarFromClass(classp), stmtp), NodeStmt);
}
AstNode* wrapIfConstraintMode(AstClass* classp, AstConstraint* const constrp, AstNode* stmtp) {
const RandomizeMode rmode = {.asInt = constrp->user1()};
@ -3955,7 +3963,7 @@ class RandomizeVisitor final : public VNVisitor {
if (commonPrefixp == exprp) break;
AstVar* const randVarp = getVarFromRef(exprp);
AstClass* const classp = VN_AS(randVarp->user2p(), Class);
AstVar* const randModeVarp = getRandModeVar(classp);
AstVar* const randModeVarp = getRandModeVarFromClass(classp);
if (savedRandModeVarps.find(randModeVarp) == savedRandModeVarps.end()) {
AstVar* const randModeTmpVarp
= makeTmpRandModeVar(exprp, randModeVarp, storeStmtsp, restoreStmtsp);
@ -4202,7 +4210,7 @@ class RandomizeVisitor final : public VNVisitor {
FileLine* fl = nodep->fileline();
AstFunc* const randomizep = V3Randomize::newRandomizeFunc(m_memberMap, nodep);
AstVar* const fvarp = VN_AS(randomizep->fvarp(), Var);
AstVar* const randModeVarp = getRandModeVar(nodep);
AstVar* const randModeVarp = getRandModeVarFromClass(nodep);
addPrePostCall(nodep, randomizep, "pre_randomize");
// Call nested pre_randomize on rand class-type members (IEEE 18.4.1)
@ -4585,7 +4593,7 @@ class RandomizeVisitor final : public VNVisitor {
UASSERT_OBJ(randModeTarget.classp, nodep,
"Should have checked in RandomizeMarkVisitor");
AstVar* const receiverp = randModeTarget.receiverp;
AstVar* const randModeVarp = getRandModeVar(randModeTarget.classp);
AstVar* const randModeVarp = getRandModeVarFromClass(randModeTarget.classp);
AstNodeExpr* const lhsp = makeModeAssignLhs(nodep->fileline(), randModeTarget.classp,
randModeTarget.fromp, randModeVarp);
replaceWithModeAssign(nodep,
@ -4833,7 +4841,7 @@ class RandomizeVisitor final : public VNVisitor {
}
// Set rand mode if present (not needed if classGenp exists and was copied)
AstVar* const randModeVarp = getRandModeVar(classp);
AstVar* const randModeVarp = getRandModeVarFromClass(classp);
if (!classGenp && randModeVarp) addSetRandMode(randomizeFuncp, localGenp, randModeVarp);
// Generate constraint setup code and a hardcoded call to the solver

View File

@ -105,8 +105,8 @@ class SliceVisitor final : public VNVisitor {
newp = nullptr;
int itemIdx = 0;
int i = 0;
const AstInitArray::KeyItemMap& itemMap = initp->map();
if (const int prevItemIdx = initp->user2()) {
const AstInitArray::KeyItemMap& itemMap = initp->map();
const auto it = itemMap.find(considerOrder(arrayp, prevItemIdx));
if (it != itemMap.end()) {
const AstInitItem* itemp = it->second;
@ -119,8 +119,10 @@ class SliceVisitor final : public VNVisitor {
}
const AstNodeDType* const expectedItemDTypep = arrayp->subDTypep()->skipRefp();
while (i <= elemIdx) {
const auto itemIt = itemMap.find(considerOrder(arrayp, itemIdx));
AstNodeExpr* const itemp
= initp->getIndexDefaultedValuep(considerOrder(arrayp, itemIdx));
= itemIt != itemMap.end() ? itemIt->second->valuep() : initp->defaultp();
const bool directItem = itemIt != itemMap.end();
if (!itemp && !m_assignError) {
nodep->v3error("Array initialization has too few elements, need element "
<< elemIdx);
@ -132,7 +134,7 @@ class SliceVisitor final : public VNVisitor {
= AstNode::computeCastable(expectedItemDTypep, itemRawDTypep, itemp);
if (castable == VCastable::SAMEISH || castable == VCastable::COMPATIBLE) {
if (i == elemIdx) {
newp = itemp->cloneTreePure(false);
newp = itemp->cloneTree(false, !directItem && needPure);
break;
} else { // Check the next item
++i;
@ -184,7 +186,6 @@ class SliceVisitor final : public VNVisitor {
m_assignError = true;
}
if (newp) {
const AstInitArray::KeyItemMap& itemMap = initp->map();
const auto it = itemMap.find(considerOrder(arrayp, itemIdx));
if (it != itemMap.end()) { // Remember current position for the next invocation.
initp->user2(itemIdx);
@ -283,16 +284,6 @@ class SliceVisitor final : public VNVisitor {
AstNodeAssign* const newp
= nodep->cloneType(cloneAndSel(nodep->lhsp(), elements, elemIdx, elemIdx != 0),
cloneAndSel(nodep->rhsp(), elements, elemIdx, elemIdx != 0));
if (elemIdx == 0) {
nodep->foreach([this](AstExprStmt* const exprp) {
// Result expression is always evaluated to the same value, so the statements
// can be removed once they were included in the expression created for the 1st
// element.
AstNodeExpr* const resultp = exprp->resultp()->unlinkFrBack();
exprp->replaceWith(resultp);
VL_DO_DANGLING(pushDeletep(exprp), exprp);
});
}
UINFOTREE(9, newp, "", "new");
newlistp = AstNode::addNext(newlistp, newp);
}
@ -356,17 +347,6 @@ class SliceVisitor final : public VNVisitor {
T_NodeBiop* const clonep = new T_NodeBiop{
nodep->fileline(), cloneAndSel(nodep->lhsp(), elements, elemIdx, elemIdx != 0),
cloneAndSel(nodep->rhsp(), elements, elemIdx, elemIdx != 0)};
if (elemIdx == 0) {
nodep->foreach([this](AstExprStmt* const exprp) {
// Result expression is always evaluated to the same value, so the
// statements can be removed once they were included in the expression
// created for the 1st element.
AstNodeExpr* const resultp = exprp->resultp()->unlinkFrBack();
exprp->replaceWith(resultp);
VL_DO_DANGLING(pushDeletep(exprp), exprp);
});
}
if (!logp) {
logp = clonep;
} else {

View File

@ -39,13 +39,16 @@
#include "V3Trace.h"
#include "V3Ast.h"
#include "V3DupFinder.h"
#include "V3EmitCBase.h"
#include "V3Graph.h"
#include "V3Stats.h"
#include "V3UniqueNames.h"
#include <limits>
#include <set>
#include <unordered_map>
VL_DEFINE_DEBUG_FUNCTIONS;
@ -118,6 +121,8 @@ class TraceTraceVertex final : public V3GraphVertex {
AstTraceDecl* const m_nodep; // TRACEINC this represents
// nullptr, or other vertex with the real code() that duplicates this one
TraceTraceVertex* m_duplicatep = nullptr;
// When aliasing to a dtype parent, offset of the member within the dtype
uint32_t m_dtypeAliasOffset = 0;
public:
TraceTraceVertex(V3Graph* graphp, AstTraceDecl* nodep)
@ -134,6 +139,9 @@ public:
UASSERT_OBJ(!duplicatep(), nodep(), "Assigning duplicatep() to already duplicated node");
m_duplicatep = dupp;
}
void redirectDuplicatep(TraceTraceVertex* dupp) { m_duplicatep = dupp; }
uint32_t dtypeAliasOffset() const { return m_dtypeAliasOffset; }
void dtypeAliasOffset(uint32_t offset) { m_dtypeAliasOffset = offset; }
};
class TraceVarVertex final : public V3GraphVertex {
@ -161,9 +169,12 @@ class TraceVisitor final : public VNVisitor {
// Ast*::user4() // V3Hasher calculation
// Cleared entire netlist
// AstCFunc::user1() // V3GraphVertex* for this node
// AstCFunc::user2() // bool; func contains trace decls (needs splitting)
// AstTraceDecl::user1() // V3GraphVertex* for this node
// AstTraceDecl::user2() // dtype decl cannot be used for _chg
// AstVarScope::user1() // V3GraphVertex* for this node
// AstStmtExpr::user2() // bool; walked next list for other ccalls
// AstVarRef::user2() // dtype V3TraceDecl* for this node
// Ast*::user3() // TraceActivityVertex* for this node
const VNUser1InUse m_inuser1;
const VNUser2InUse m_inuser2;
@ -183,6 +194,15 @@ class TraceVisitor final : public VNVisitor {
V3Graph m_graph; // Var/CFunc tracking
TraceActivityVertex* const m_alwaysVtxp; // "Always trace" vertex
bool m_finding = false; // Pass one of algorithm?
struct DtypeFuncs final {
public:
AstCFunc* fullFuncp = nullptr;
AstCFunc* chgFuncp = nullptr;
};
std::unordered_map<const AstNodeDType*, DtypeFuncs>
m_dtypeNonConstFuncs; // Full / Chg funcs per type
std::unordered_map<const AstNodeDType*, AstCFunc*> m_dtypeConstFuncs; // Const func per type
V3UniqueNames m_dtypeNames{""}; // Unique type func names
// Trace parallelism. Only VCD tracing can be parallelized at this time.
const uint32_t m_parallelism
@ -203,31 +223,165 @@ class TraceVisitor final : public VNVisitor {
UINFO(9, "Finding duplicates");
// Note uses user4
V3DupFinder dupFinder; // Duplicate code detection
// Compute member offsets within dtype instances incrementally.
// For each dtype member TraceDecl, stores its code offset within the
// dtype parent's code range.
std::unordered_map<const AstTraceDecl*, uint32_t> memberOffsets;
std::unordered_map<const AstTraceDecl*, uint32_t> runningOffset;
// For fixup pass: track dups redirected to dtype parents, so we can
// fix them if the parent's user2 is later set during the loop.
// Maps dup vertex -> original canonical member vertex.
std::vector<std::pair<TraceTraceVertex*, TraceTraceVertex*>> dtypeParentRedirects;
// Hash all of the traced values and find if there are any duplicates
for (V3GraphVertex& vtx : m_graph.vertices()) {
if (TraceTraceVertex* const vvertexp = vtx.cast<TraceTraceVertex>()) {
const AstTraceDecl* const nodep = vvertexp->nodep();
AstTraceDecl* const nodep = vvertexp->nodep();
if (nodep->dtypeCallp()) continue;
if (nodep->dtypeDeclp()) {
uint32_t& offset = runningOffset[nodep->dtypeDeclp()];
memberOffsets[nodep] = offset;
offset += nodep->codeInc();
}
UASSERT_OBJ(!vvertexp->duplicatep(), nodep, "Should not be a duplicate");
const auto dupit = dupFinder.findDuplicate(nodep->valuep());
const auto dupit = dupFinder.findDuplicate(nodep);
if (dupit == dupFinder.end()) {
dupFinder.insert(nodep->valuep());
dupFinder.insert(nodep);
} else {
const AstTraceDecl* const dupDeclp = VN_AS(dupit->second->backp(), TraceDecl);
AstTraceDecl* const dupDeclp = VN_AS(dupit->second, TraceDecl);
UASSERT_OBJ(dupDeclp, nodep, "Trace duplicate of wrong type");
TraceTraceVertex* const dupvertexp
= dupDeclp->user1u().toGraphVertex()->cast<TraceTraceVertex>();
UINFO(8, " Orig " << nodep);
UINFO(8, " dup " << dupDeclp);
// Mark the hashed node as the original and our
// iterating node as duplicated
vvertexp->duplicatep(dupvertexp);
UINFO(8, " Orig " << dupDeclp << endl);
UINFO(8, " dup " << nodep << endl);
if (dupDeclp->dtypeDeclp() && !dupDeclp->dtypeDeclp()->user2()) {
AstTraceDecl* const dtypeParentp = dupDeclp->dtypeDeclp();
TraceTraceVertex* const dtypeVtxp
= dtypeParentp->user1u().toGraphVertex()->cast<TraceTraceVertex>();
const auto it2 = memberOffsets.find(dupDeclp);
UASSERT_OBJ(it2 != memberOffsets.end(), dupDeclp,
"Member offset not precomputed");
vvertexp->duplicatep(dtypeVtxp);
vvertexp->dtypeAliasOffset(it2->second);
dtypeParentRedirects.emplace_back(vvertexp, dupvertexp);
} else {
vvertexp->duplicatep(dupvertexp);
}
if (nodep->dtypeDeclp()) nodep->dtypeDeclp()->user2(true);
}
}
}
for (const auto& pair : dtypeParentRedirects) {
TraceTraceVertex* const dupVtxp = pair.first;
TraceTraceVertex* const memberVtxp = pair.second;
const AstTraceDecl* const parentDeclp = dupVtxp->duplicatep()->nodep();
if (parentDeclp->user2()) {
dupVtxp->redirectDuplicatep(memberVtxp);
dupVtxp->dtypeAliasOffset(0);
}
}
if (dumpLevel() || debug() >= 9)
dupFinder.dumpFile(v3Global.debugFilename("trace") + ".hash", false);
}
void graphDtypePrune() {
for (V3GraphVertex* const vtxp : m_graph.vertices().unlinkable()) {
if (TraceTraceVertex* const vvertexp = vtxp->cast<TraceTraceVertex>()) {
AstTraceDecl* const declp = vvertexp->nodep();
// This skips the dtype sub-func optimization if a var is affected by multiple
// activities. We really only need to do this for _chg funcs (and not decls,
// _const and _full) but it's simpiler to do it all one way or the other.
if (declp) {
if (declp->user2() || (declp->dtypeDeclp() && !declp->dtypeDeclp()->user2())) {
AstCCall* const callp = declp->dtypeCallp();
if (callp) {
AstNode* stmtexprp = callp->backp();
VL_DO_DANGLING(pushDeletep(stmtexprp->unlinkFrBack()), stmtexprp);
} else {
bool emptyScope;
do {
emptyScope = false;
AstNode* const declBackp = declp->backp();
AstNode* const declNextp = declp->nextp();
if (VN_IS(declBackp, TracePushPrefix)
&& VN_IS(declNextp, TracePopPrefix)) {
VL_DO_DANGLING(pushDeletep(declBackp->unlinkFrBack()),
declBackp);
VL_DO_DANGLING(pushDeletep(declNextp->unlinkFrBack()),
declNextp);
emptyScope = true;
}
} while (emptyScope);
}
// Can't purge until we finish this pass
pushDeletep(declp->unlinkFrBack());
vvertexp->rerouteEdges(&m_graph);
vvertexp->unlinkDelete(&m_graph);
}
declp->dtypeDeclp(nullptr);
}
}
}
}
void splitTraceDeclFuncs() {
const int splitLimit = v3Global.opt.outputSplitCTrace() ? v3Global.opt.outputSplitCTrace()
: std::numeric_limits<int>::max();
if (splitLimit == std::numeric_limits<int>::max()) return;
for (AstNode* nodep = m_topScopep->blocksp(); nodep; nodep = nodep->nextp()) {
AstCFunc* const funcp = VN_CAST(nodep, CFunc);
if (!funcp || !funcp->user2()) continue;
const string baseName = funcp->name();
uint32_t subNum = 1;
int curSize = 0;
AstCFunc* curFuncp = funcp;
std::vector<AstNodeStmt*> callStmts;
auto startNewSubFunc = [&]() {
FileLine* const flp = funcp->fileline();
const string newName = baseName + "_" + cvtToStr(subNum++);
AstCFunc* const newFuncp = new AstCFunc{flp, newName, m_topScopep};
newFuncp->argTypes(v3Global.opt.traceClassBase() + "* tracep");
newFuncp->isTrace(true);
newFuncp->isStatic(false);
newFuncp->isLoose(true);
newFuncp->slow(true);
newFuncp->dontCombine(true);
m_topScopep->addBlocksp(newFuncp);
newFuncp->addStmtsp(new AstCStmt{flp, "const int c = vlSymsp->__Vm_baseCode;"});
AstCCall* const callp = new AstCCall{flp, newFuncp};
callp->dtypeSetVoid();
callp->argTypes("tracep");
callStmts.push_back(callp->makeStmt());
curFuncp = newFuncp;
curSize = 0;
};
for (AstNode *stmtp = funcp->stmtsp(), *nextp; stmtp; stmtp = nextp) {
nextp = stmtp->nextp();
curSize += stmtp->nodeCount();
if (curFuncp != funcp) {
stmtp->unlinkFrBack();
curFuncp->addStmtsp(stmtp);
}
if (curSize > splitLimit && nextp) startNewSubFunc();
}
for (AstNodeStmt* const callStmtp : callStmts) { funcp->addStmtsp(callStmtp); }
}
}
void graphSimplify(bool initial) {
if (initial) {
// Remove all variable nodes
@ -481,24 +635,26 @@ class TraceVisitor final : public VNVisitor {
}
AstCFunc* newCFunc(VTraceType traceType, AstCFunc* topFuncp, uint32_t funcNum,
uint32_t baseCode = 0) {
uint32_t baseCode = 0, const AstTraceDecl* const declp = nullptr,
bool declSub = false) {
// Create new function
const bool isTopFunc = topFuncp == nullptr;
const bool isTopFunc = !declp && topFuncp == nullptr;
std::string funcName;
if (isTopFunc) {
if (traceType == VTraceType::CONSTANT) {
funcName = "trace_const";
} else if (traceType == VTraceType::FULL) {
funcName = "trace_full";
} else {
funcName = "trace_chg";
}
if (isTopFunc || declp) {
funcName = traceType.func_prefix();
} else {
funcName = topFuncp->name();
funcName += "_sub";
}
funcName += "_";
funcName += cvtToStr(funcNum);
if (declp) {
funcName += "_dtype";
if (declSub) funcName += "_sub";
funcName += "__";
funcName = m_dtypeNames.get(funcName);
} else {
funcName += "_";
funcName += cvtToStr(funcNum);
}
FileLine* const flp = m_topScopep->fileline();
AstCFunc* const funcp = new AstCFunc{flp, funcName, m_topScopep};
@ -511,7 +667,10 @@ class TraceVisitor final : public VNVisitor {
m_topScopep->addBlocksp(funcp);
const std::string bufArg
= v3Global.opt.traceClassBase()
+ "::" + (v3Global.opt.useTraceOffload() ? "OffloadBuffer" : "Buffer") + "* bufp";
+ "::" + (v3Global.opt.useTraceOffload() ? "OffloadBuffer" : "Buffer") + "* bufp"
+ (declp ? (", uint32_t offset, const " + declp->dtypep()->cType("", true, true)
+ " __VdtypeVar")
: "");
if (isTopFunc) {
// Top functions
funcp->argTypes("void* voidSelf, " + bufArg);
@ -546,35 +705,82 @@ class TraceVisitor final : public VNVisitor {
if (traceType != VTraceType::CHANGE) {
// Full dump sub function
funcp->addStmtsp(new AstCStmt{flp, //
"uint32_t* const oldp VL_ATTR_UNUSED = "
"bufp->oldp(vlSymsp->__Vm_baseCode);\n"});
string("uint32_t* const oldp VL_ATTR_UNUSED = "
"bufp->oldp(vlSymsp->__Vm_baseCode")
+ (declp ? " + offset" : "") + ");\n"});
} else {
// Change dump sub function
if (v3Global.opt.useTraceOffload()) {
funcp->addStmtsp(new AstCStmt{flp, //
"const uint32_t base VL_ATTR_UNUSED = "
"vlSymsp->__Vm_baseCode + "
+ cvtToStr(baseCode) + ";\n"});
+ (declp ? " offset" : cvtToStr(baseCode))
+ ";\n"});
funcp->addStmtsp(
new AstCStmt{flp, "(void)bufp; // Prevent unused variable warning\n"});
} else {
funcp->addStmtsp(new AstCStmt{flp, //
"uint32_t* const oldp VL_ATTR_UNUSED = "
"bufp->oldp(vlSymsp->__Vm_baseCode + "
+ cvtToStr(baseCode) + ");\n"});
+ (declp ? " offset" : cvtToStr(baseCode))
+ ");\n"});
}
}
// Add call to top function
AstCCall* const callp = new AstCCall{funcp->fileline(), funcp};
callp->dtypeSetVoid();
callp->argTypes("bufp");
topFuncp->addStmtsp(callp->makeStmt());
if (!declp) {
// Add call to top function
AstCCall* const callp = new AstCCall{funcp->fileline(), funcp};
callp->dtypeSetVoid();
callp->argTypes("bufp");
topFuncp->addStmtsp(callp->makeStmt());
}
}
// Done
UINFO(5, " newCFunc " << funcp);
return funcp;
}
AstCFunc* newCDtypeSubFunc(VTraceType traceType, const AstTraceDecl* const declp,
AstCFunc* parentp) {
AstCFunc* const funcp = newCFunc(traceType, nullptr, 0, 0, declp, true);
FileLine* const flp = m_topScopep->fileline();
AstCCall* const callp = new AstCCall{flp, funcp};
callp->dtypeSetVoid();
callp->argTypes("bufp, offset, __VdtypeVar");
parentp->addStmtsp(callp->makeStmt());
return funcp;
}
AstCFunc* createConstDtypeTraceFunctions(const AstTraceDecl* declp) {
const AstNodeDType* const dtypep = declp->dtypep()->skipRefp();
auto pair = m_dtypeConstFuncs.emplace(dtypep, nullptr);
if (pair.second) {
FileLine* const flp = declp->fileline();
AstCFunc* const funcp = newCFunc(VTraceType::CONSTANT, nullptr, 0, 0, declp);
bool first = true;
for (AstNode* callStmtp = declp->dtypeCallp()->funcp()->stmtsp(); callStmtp;
callStmtp = callStmtp->nextp()) {
const AstCCall* const callp
= VN_CAST(VN_CAST(callStmtp, StmtExpr)->exprp(), CCall);
bool onlyOne = first && !callStmtp->nextp();
AstCFunc* const subFuncp
= onlyOne ? funcp : newCDtypeSubFunc(VTraceType::CONSTANT, declp, funcp);
for (AstNode* stmtp = callp->funcp()->stmtsp(); stmtp; stmtp = stmtp->nextp()) {
if (AstTraceDecl* const fieldDeclp = VN_CAST(stmtp, TraceDecl)) {
AstTraceInc* const incp
= new AstTraceInc{flp, fieldDeclp, VTraceType::CONSTANT};
subFuncp->addStmtsp(incp);
}
}
first = false;
}
pair.first->second = funcp;
}
return pair.first->second;
}
void createConstTraceFunctions(const TraceVec& traces) {
const int splitLimit = v3Global.opt.outputSplitCTrace() ? v3Global.opt.outputSplitCTrace()
: std::numeric_limits<int>::max();
@ -583,18 +789,12 @@ class TraceVisitor final : public VNVisitor {
uint32_t subFuncNum = 0;
AstCFunc* subFuncp = nullptr;
int subStmts = 0;
std::vector<const TraceTraceVertex*> duplicates;
for (auto it = traces.cbegin(); it != traces.end(); ++it) {
const TraceTraceVertex* const vtxp = it->second;
AstTraceDecl* const declp = vtxp->nodep();
if (const TraceTraceVertex* const canonVtxp = vtxp->duplicatep()) {
// This is a duplicate trace node. We will assign the signal
// number to the canonical node, and emit this as an alias, so
// no need to create a TraceInc node.
const AstTraceDecl* const canonDeclp = canonVtxp->nodep();
UASSERT_OBJ(!canonVtxp->duplicatep(), canonDeclp, "Canonical node is a duplicate");
UASSERT_OBJ(canonDeclp->codeAssigned(), canonDeclp,
"Canonical node should have code assigned already");
declp->code(canonDeclp->code());
if (vtxp->duplicatep()) {
duplicates.push_back(vtxp);
continue;
}
@ -616,11 +816,71 @@ class TraceVisitor final : public VNVisitor {
++subFuncNum;
}
FileLine* const flp = declp->fileline();
AstTraceInc* const incp = new AstTraceInc{flp, declp, VTraceType::CONSTANT};
subFuncp->addStmtsp(incp);
subStmts += incp->nodeCount();
if (declp->dtypeCallp()) {
AstCFunc* const funcp = createConstDtypeTraceFunctions(declp);
AstNodeExpr* argsp = nullptr;
argsp = AstNode::addNext(argsp, declp->valuep()->cloneTree(false));
AstCCall* const callp = new AstCCall{flp, funcp, argsp};
callp->dtypeSetVoid();
callp->argTypes(callp->argTypes() + "bufp, " + std::to_string(declp->code()));
subFuncp->addStmtsp(callp->makeStmt());
subStmts += 1;
} else {
AstTraceInc* const incp = new AstTraceInc{flp, declp, VTraceType::CONSTANT};
subFuncp->addStmtsp(incp);
subStmts += incp->nodeCount();
}
}
}
// Assign codes to duplicate nodes from their canonicals
for (const TraceTraceVertex* const vtxp : duplicates) {
AstTraceDecl* const declp = vtxp->nodep();
const TraceTraceVertex* const canonVtxp = vtxp->duplicatep();
const AstTraceDecl* const canonDeclp = canonVtxp->nodep();
UASSERT_OBJ(!canonVtxp->duplicatep(), canonDeclp, "Canonical node is a duplicate");
UASSERT_OBJ(canonDeclp->codeAssigned(), canonDeclp,
"Canonical node should have code assigned already");
declp->code(canonDeclp->code() + vtxp->dtypeAliasOffset());
}
}
DtypeFuncs createNonConstDtypeTraceFunctions(const AstTraceDecl* declp) {
AstNodeDType* dtypep = declp->dtypep()->skipRefp();
auto pair = m_dtypeNonConstFuncs.emplace(dtypep, DtypeFuncs{});
if (pair.second) {
FileLine* const flp = declp->fileline();
AstCFunc* const fullFuncp = newCFunc(VTraceType::FULL, nullptr, 0, 0, declp);
AstCFunc* const chgFuncp = newCFunc(VTraceType::CHANGE, nullptr, 0, 0, declp);
bool first = true;
for (AstNode* callStmtp = declp->dtypeCallp()->funcp()->stmtsp(); callStmtp;
callStmtp = callStmtp->nextp()) {
const AstCCall* const callp
= VN_CAST(VN_CAST(callStmtp, StmtExpr)->exprp(), CCall);
bool onlyOne = first && !callStmtp->nextp();
AstCFunc* const fullSubFuncp
= onlyOne ? fullFuncp : newCDtypeSubFunc(VTraceType::FULL, declp, fullFuncp);
AstCFunc* const chgSubFuncp
= onlyOne ? chgFuncp : newCDtypeSubFunc(VTraceType::CHANGE, declp, chgFuncp);
for (AstNode* stmtp = callp->funcp()->stmtsp(); stmtp; stmtp = stmtp->nextp()) {
if (AstTraceDecl* const fieldDeclp = VN_CAST(stmtp, TraceDecl)) {
AstTraceInc* const incFullp
= new AstTraceInc{flp, fieldDeclp, VTraceType::FULL};
fullSubFuncp->addStmtsp(incFullp);
AstTraceInc* const incChgp
= new AstTraceInc{flp, fieldDeclp, VTraceType::CHANGE};
chgSubFuncp->addStmtsp(incChgp);
}
}
first = false;
}
pair.first->second = {.fullFuncp = fullFuncp, .chgFuncp = chgFuncp};
}
return pair.first->second;
}
void createNonConstTraceFunctions(const TraceVec& traces, uint32_t nAllCodes,
@ -698,24 +958,44 @@ class TraceVisitor final : public VNVisitor {
// Add TraceInc nodes
FileLine* const flp = declp->fileline();
AstTraceInc* const incFulp = new AstTraceInc{flp, declp, VTraceType::FULL};
subFulFuncp->addStmtsp(incFulp);
AstTraceInc* const incChgp
= new AstTraceInc{flp, declp, VTraceType::CHANGE, baseCode};
ifp->addThensp(incChgp);
if (declp->dtypeCallp()) {
DtypeFuncs funcs = createNonConstDtypeTraceFunctions(declp);
AstNodeExpr* argsp = nullptr;
argsp = AstNode::addNext(argsp, declp->valuep()->cloneTree(false));
AstCCall* const callFullp = new AstCCall{flp, funcs.fullFuncp, argsp};
callFullp->dtypeSetVoid();
callFullp->argTypes(callFullp->argTypes() + "bufp, "
+ std::to_string(declp->code()));
subFulFuncp->addStmtsp(callFullp->makeStmt());
argsp = nullptr;
argsp = AstNode::addNext(argsp, declp->valuep()->cloneTree(false));
AstCCall* const callChgp = new AstCCall{flp, funcs.chgFuncp, argsp};
callChgp->dtypeSetVoid();
callChgp->argTypes(callChgp->argTypes() + "bufp, "
+ std::to_string(declp->code()));
ifp->addThensp(callChgp->makeStmt());
// Set the function index of the decl
declp->fidx(topFuncNum);
// Track splitting due to size
UASSERT_OBJ(incFulp->nodeCount() == incChgp->nodeCount(), declp,
"Should have equal cost");
const VNumRange range = declp->arrayRange();
if (range.ranged()) {
// 2x because each element is a TraceInc and a VarRef
subStmts += range.elements() * 2;
subStmts += 2;
} else {
subStmts += incChgp->nodeCount();
AstTraceInc* const incFulp = new AstTraceInc{flp, declp, VTraceType::FULL};
subFulFuncp->addStmtsp(incFulp);
AstTraceInc* const incChgp
= new AstTraceInc{flp, declp, VTraceType::CHANGE, baseCode};
ifp->addThensp(incChgp);
// Set the function index of the decl
declp->fidx(topFuncNum);
// Track splitting due to size
UASSERT_OBJ(incFulp->nodeCount() == incChgp->nodeCount(), declp,
"Should have equal cost");
const VNumRange range = declp->arrayRange();
if (range.ranged()) {
// 2x because each element is a TraceInc and a VarRef
subStmts += range.elements() * 2;
} else {
subStmts += incChgp->nodeCount();
}
}
// Track partitioning
@ -761,6 +1041,9 @@ class TraceVisitor final : public VNVisitor {
void createTraceFunctions() {
// Detect and remove duplicate values
detectDuplicates();
graphDtypePrune();
splitTraceDeclFuncs();
m_graph.removeRedundantEdgesMax(&V3GraphEdge::followAlwaysTrue);
// Simplify & optimize the graph
@ -885,7 +1168,7 @@ class TraceVisitor final : public VNVisitor {
|| nodep->isCoroutine()) {
// Cannot treat a coroutine as slow, it may be resumed later
const bool slow = nodep->slow() && !nodep->isCoroutine();
V3GraphVertex* const activityVtxp = getActivityVertexp(nodep, slow);
TraceActivityVertex* const activityVtxp = getActivityVertexp(nodep, slow);
new V3GraphEdge{&m_graph, activityVtxp, funcVtxp, 1};
}
}
@ -895,21 +1178,23 @@ class TraceVisitor final : public VNVisitor {
}
void visit(AstTraceDecl* nodep) override {
UINFO(8, " TRACE " << nodep);
if (!m_finding) {
if (!m_finding && !nodep->inDtypeFunc()) {
V3GraphVertex* const vertexp = new TraceTraceVertex{&m_graph, nodep};
nodep->user1p(vertexp);
UASSERT_OBJ(m_cfuncp, nodep, "Trace not under func");
m_cfuncp->user2(true);
VL_RESTORER(m_tracep);
m_tracep = nodep;
iterateChildren(nodep);
}
}
void visit(AstVarRef* nodep) override {
UASSERT_OBJ(nodep->varScopep(), nodep, "No var scope?");
AstVarScope* const varscopep = nodep->varScopep();
V3GraphVertex* varVtxp = varscopep->user1u().toGraphVertex();
if (m_tracep) {
UASSERT_OBJ(nodep->varScopep(), nodep, "No var scope?");
UASSERT_OBJ(nodep->access().isReadOnly(), nodep, "Lvalue in trace? Should be const.");
V3GraphVertex* varVtxp = nodep->varScopep()->user1u().toGraphVertex();
if (!varVtxp) {
varVtxp = new TraceVarVertex{&m_graph, nodep->varScopep()};
nodep->varScopep()->user1p(varVtxp);
@ -920,12 +1205,23 @@ class TraceVisitor final : public VNVisitor {
|| nodep->varp()->isSigPublic()) { // Or ones user can change
new V3GraphEdge{&m_graph, m_alwaysVtxp, traceVtxp, 1};
}
if (m_tracep->dtypeCallp()) varscopep->user2p(m_tracep);
} else if (m_cfuncp && m_finding && nodep->access().isWriteOrRW()) {
UASSERT_OBJ(nodep->varScopep(), nodep, "No var scope?");
V3GraphVertex* const funcVtxp = getCFuncVertexp(m_cfuncp);
V3GraphVertex* const varVtxp = nodep->varScopep()->user1u().toGraphVertex();
if (varVtxp) { // else we're not tracing this signal
new V3GraphEdge{&m_graph, funcVtxp, varVtxp, 1};
AstTraceDecl* const declp = VN_AS(varscopep->user2p(), TraceDecl);
if (declp) {
V3GraphVertex* const cFuncVtxp = getCFuncVertexp(m_cfuncp);
for (const V3GraphEdge& edge : cFuncVtxp->inEdges()) {
V3GraphVertex* const activityp = edge.fromp();
if (!declp->user3p()) {
declp->user3p(activityp);
} else if (declp->user3u().toGraphVertex() != activityp) {
declp->user2(true);
}
}
}
}
}
}
@ -936,7 +1232,15 @@ public:
// CONSTRUCTORS
explicit TraceVisitor(AstNetlist* nodep)
: m_alwaysVtxp{new TraceActivityVertex{&m_graph, TraceActivityVertex::ACTIVITY_ALWAYS}} {
nodep->user2ClearTree(); // TraceDecl multiple activities flag
nodep->user3ClearTree(); // TraceDecl TraceActivityVertex (assumes we start at nullptr)
iterate(nodep);
nodep->foreach([](AstTraceDecl* const declp) {
if (declp->inDtypeFunc()) {
declp->valuep()->unlinkFrBack()->deleteTree();
declp->valuep(nullptr);
}
});
}
~TraceVisitor() override {
V3Stats::addStat("Tracing, Activity setters", m_statSetters);

View File

@ -24,13 +24,21 @@
#include "V3TraceDecl.h"
#include "V3Ast.h"
#include "V3Control.h"
#include "V3EmitCBase.h"
#include "V3Error.h"
#include "V3File.h"
#include "V3Global.h"
#include "V3Number.h"
#include "V3Stats.h"
#include "V3UniqueNames.h"
#include <cstdint>
#include <functional>
#include <limits>
#include <tuple>
#include <unordered_map>
#include <vector>
VL_DEFINE_DEBUG_FUNCTIONS;
@ -94,6 +102,10 @@ public:
// TraceDecl state, as a visitor of each AstNode
class TraceDeclVisitor final : public VNVisitor {
// NODE STATE
// AstCFunc::user1() // code offset for current type
// AstCFunc::user2() // VarScope for dtype functions
// STATE
AstTopScope* const m_topScopep; // The singleton AstTopScope
const AstScope* m_currScopep = nullptr; // Current scope being visited
@ -101,6 +113,30 @@ class TraceDeclVisitor final : public VNVisitor {
std::vector<AstCFunc*> m_topFuncps; // Top level trace initialization functions
std::vector<AstCFunc*> m_subFuncps; // Trace sub functions for this scope
std::set<const AstTraceDecl*> m_declUncalledps; // Declarations not called
// Functions per type and variable kind (wire vs logic etc.)
struct DtypeFuncKey final {
const AstNodeDType* dtypep;
VVarType varType;
bool operator==(const DtypeFuncKey& other) const {
return dtypep == other.dtypep && varType == other.varType;
}
};
struct DtypeFuncKeyHash final {
size_t operator()(const DtypeFuncKey& key) const {
return std::hash<const AstNodeDType*>{}(key.dtypep)
^ (std::hash<uint8_t>{}(key.varType) << 1);
}
};
std::unordered_map<DtypeFuncKey, AstCFunc*, DtypeFuncKeyHash>
m_dtypeFuncs; // Functions per type+kind
AstCFunc* m_dtypeFuncp = nullptr; // Current type func
AstCFunc* m_dtypeSubFuncp = nullptr; // Current type sub func
const string m_dtypeArgs{", const char* name, uint32_t fidx, uint32_t c, "
"VerilatedTraceSigDirection direction"}; // Type func args
AstTraceDecl* m_dtypeDeclp = nullptr; // Current type func decl
V3UniqueNames m_dtypeNames{""}; // Unique names for dtype funcs
bool m_skipDtypeFunc = false; // Don't create a type func
uint32_t m_offset = std::numeric_limits<uint32_t>::max(); // Offset for types
int m_topFuncSize = 0; // Size of the top function currently being built
int m_subFuncSize = 0; // Size of the sub function currently being built
const int m_funcSizeLimit // Maximum size of a function
@ -255,9 +291,15 @@ class TraceDeclVisitor final : public VNVisitor {
}
void addToSubFunc(AstNodeStmt* stmtp) {
if (m_subFuncSize > m_funcSizeLimit || m_subFuncps.empty()) {
m_subFuncSize = 0;
//
// TODO (maybe) -- sub funcs for dtype components
if (m_dtypeSubFuncp) {
if (m_subFuncSize > m_funcSizeLimit) newDeclSubFunc();
m_dtypeSubFuncp->addStmtsp(stmtp);
m_subFuncSize += stmtp->nodeCount();
return;
}
// Defer trace splitting until V3Trace
if (m_subFuncps.empty()) {
FileLine* const flp = m_currScopep->fileline();
const string n = cvtToStr(m_subFuncps.size());
const string name{"trace_init_sub__" + m_currScopep->nameDotless() + "__" + n};
@ -269,20 +311,38 @@ class TraceDeclVisitor final : public VNVisitor {
m_subFuncSize += stmtp->nodeCount();
}
void addTraceDecl(const VNumRange& arrayRange,
int widthOverride) { // If !=0, is packed struct/array where basicp size
// misreflects one element
AstTraceDecl* addTraceDecl(const VNumRange& arrayRange,
int widthOverride, // If !=0, is packed struct/array where basicp
// size misreflects one element
AstCCall* const dtypeCallp = nullptr) {
VNumRange bitRange;
if (widthOverride) {
bitRange = VNumRange{widthOverride - 1, 0};
} else if (const AstBasicDType* const bdtypep = m_traValuep->dtypep()->basicp()) {
bitRange = bdtypep->nrange();
}
FileLine* const flp = m_traVscp->fileline();
AstNodeExpr* valuep = m_traValuep->cloneTree(false);
const bool validOffset = m_offset != std::numeric_limits<uint32_t>::max();
AstTraceDecl* const newp
= new AstTraceDecl{m_traVscp->fileline(), m_traName, m_traVscp->varp(),
m_traValuep->cloneTree(false), bitRange, arrayRange};
= new AstTraceDecl{flp, m_traName, m_traVscp->varp(), valuep,
bitRange, arrayRange, dtypeCallp, validOffset};
if (validOffset) {
newp->code(m_offset);
if (!dtypeCallp) { m_offset += newp->codeInc(); }
valuep->foreach([&](AstVarRef* const refp) {
UASSERT_OBJ(refp->varScopep() == m_traVscp, refp,
"Trace decl expression references unexpected var");
refp->replaceWith(new AstCExpr{flp, "__VdtypeVar", m_traVscp->width()});
VL_DO_DANGLING(refp->deleteTree(), refp);
});
} else {
newp->dtypeDeclp(m_dtypeDeclp);
}
m_declUncalledps.emplace(newp);
addToSubFunc(newp);
return newp;
}
void addIgnore(const string& why) {
@ -398,6 +458,166 @@ class TraceDeclVisitor final : public VNVisitor {
});
}
bool isBasicIO() { return m_traVscp->varp()->isVLIO(); }
void newDeclSubFunc() {
FileLine* const flp = m_dtypeFuncp->fileline();
AstCFunc* const subFuncp = newCFunc(flp, m_dtypeNames.get("trace_init_dtype_sub__"));
subFuncp->argTypes(subFuncp->argTypes() + m_dtypeArgs);
AstCCall* const subCallp = new AstCCall{flp, subFuncp};
subCallp->dtypeSetVoid();
subCallp->argTypes("tracep, name, fidx, c, direction");
m_dtypeFuncp->addStmtsp(subCallp->makeStmt());
m_dtypeSubFuncp = subFuncp;
m_subFuncSize = 0;
}
void newDeclFunc(AstNodeDType* nodep) {
AstNodeDType* const skipTypep = nodep->skipRefp();
// offset and direction args added in EmitCImp
std::string callArgs{"tracep, \"" + VIdProtect::protect(m_traName) + "\""};
VL_RESTORER(m_traName);
FileLine* const flp = skipTypep->fileline();
const DtypeFuncKey dtypeKey{skipTypep, m_traVscp->varp()->varType()};
auto pair = m_dtypeFuncs.emplace(dtypeKey, nullptr);
AstCFunc** funcpp = &pair.first->second;
if (pair.second) {
*funcpp = newCFunc(flp, m_dtypeNames.get("trace_init_dtype__"));
(*funcpp)->argTypes((*funcpp)->argTypes() + m_dtypeArgs);
(*funcpp)->user2p(m_traVscp);
}
AstCCall* const callp = new AstCCall{flp, *funcpp};
callp->dtypeSetVoid();
callp->argTypes(callArgs);
m_dtypeDeclp = addTraceDecl(VNumRange{}, skipTypep->width(), callp);
addToSubFunc(callp->makeStmt());
if (pair.second) {
VL_RESTORER(m_offset);
m_offset = 0;
VL_RESTORER(m_dtypeFuncp);
VL_RESTORER(m_dtypeSubFuncp);
VL_RESTORER(m_subFuncSize);
m_dtypeFuncp = *funcpp;
newDeclSubFunc();
if (AstStructDType* const dtypep = VN_CAST(skipTypep, StructDType)) {
declStruct(dtypep, true);
} else if (AstUnpackArrayDType* const dtypep = VN_CAST(skipTypep, UnpackArrayDType)) {
declUnpackedArray(dtypep, true);
} else if (AstPackArrayDType* const dtypep = VN_CAST(skipTypep, PackArrayDType)) {
declPackedArray(dtypep, true);
} else {
UASSERT_OBJ(false, skipTypep, "Creating a trace function for an unexpected type");
}
m_dtypeFuncp->user1(m_offset);
}
m_dtypeDeclp->codeInc((*funcpp)->user1());
m_offset += m_dtypeDeclp->codeInc();
}
void declUnpackedArray(AstUnpackArrayDType* const nodep, bool newFunc) {
string prefixName(newFunc ? "name" : m_traName);
VL_RESTORER(m_traName);
FileLine* const flp = nodep->fileline();
addToSubFunc(new AstTracePushPrefix{flp, prefixName, VTracePrefixType::ARRAY_UNPACKED,
nodep->left(), nodep->right(), !newFunc});
if (VN_IS(nodep->subDTypep()->skipRefToEnump(),
BasicDType) // Nothing lower than this array
&& m_traVscp->dtypep()->skipRefToEnump() == nodep) { // Nothing above this array
// Simple 1-D array, use existing V3EmitC runtime loop rather than unrolling
// This will put "(index)" at end of signal name for us
if (m_traVscp->dtypep()->skipRefToEnump()->isString()) {
addIgnore("Unsupported: strings");
} else {
m_traName = "";
addTraceDecl(nodep->declRange(), 0);
}
} else {
AstNodeDType* const subtypep = nodep->subDTypep()->skipRefToEnump();
// Always iterate left index to right index
const int inc = nodep->rangep()->ascending() ? 1 : -1;
for (int i = nodep->left(); i != nodep->right() + inc; i += inc) {
VL_RESTORER(m_traValuep);
m_traName = '[' + std::to_string(i) + ']';
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstArraySel{flp, m_traValuep, i - nodep->lo()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_DANGLING(m_traValuep->deleteTree(), m_traValuep);
}
}
addToSubFunc(new AstTracePopPrefix{flp});
}
void declPackedArray(AstPackArrayDType* const nodep, bool newFunc) {
string prefixName(newFunc ? "name" : m_traName);
AstNodeDType* const subtypep = nodep->subDTypep()->skipRefToEnump();
VL_RESTORER(m_traName);
FileLine* const flp = nodep->fileline();
addToSubFunc(new AstTracePushPrefix{flp, prefixName, VTracePrefixType::ARRAY_PACKED,
nodep->left(), nodep->right(), !newFunc});
// Always iterate left index to right index
const int inc = nodep->rangep()->ascending() ? 1 : -1;
for (int i = nodep->left(); i != nodep->right() + inc; i += inc) {
VL_RESTORER(m_traValuep);
m_traName = '[' + std::to_string(i) + ']';
const int lsb = (i - nodep->lo()) * subtypep->width();
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstSel{flp, m_traValuep, lsb, subtypep->width()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_CLEAR(m_traValuep->deleteTree(), m_traValuep = nullptr);
}
addToSubFunc(new AstTracePopPrefix{flp});
}
void declStruct(AstStructDType* const nodep, bool newFunc) {
FileLine* const flp = nodep->fileline();
string prefixName(newFunc ? "name" : m_traName);
int nMembers = 0;
for (AstNode* mp = nodep->membersp(); mp; mp = mp->nextp()) ++nMembers;
if (!nodep->packed()) {
addToSubFunc(new AstTracePushPrefix{flp, prefixName, //
VTracePrefixType::STRUCT_UNPACKED, nMembers, 0,
!newFunc});
for (const AstMemberDType *itemp = nodep->membersp(), *nextp; itemp; itemp = nextp) {
nextp = VN_AS(itemp->nextp(), MemberDType);
AstNodeDType* const subtypep = itemp->subDTypep()->skipRefToEnump();
m_traName = itemp->prettyName();
VL_RESTORER(m_traValuep);
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstStructSel{flp, m_traValuep, itemp->name()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_DANGLING(m_traValuep->deleteTree(), m_traValuep);
}
addToSubFunc(new AstTracePopPrefix{flp});
} else {
addToSubFunc(new AstTracePushPrefix{flp, prefixName, //
VTracePrefixType::STRUCT_PACKED, nMembers, 0,
!newFunc});
for (const AstMemberDType *itemp = nodep->membersp(), *nextp; itemp; itemp = nextp) {
nextp = VN_AS(itemp->nextp(), MemberDType);
AstNodeDType* const subtypep = itemp->subDTypep()->skipRefToEnump();
m_traName = itemp->prettyName();
VL_RESTORER(m_traValuep);
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstSel{flp, m_traValuep, itemp->lsb(), subtypep->width()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_DANGLING(m_traValuep->deleteTree(), m_traValuep);
}
addToSubFunc(new AstTracePopPrefix{flp});
}
}
// VISITORS
void visit(AstScope* nodep) override {
UINFO(9, "visit " << nodep);
@ -545,10 +765,14 @@ class TraceDeclVisitor final : public VNVisitor {
// VISITORS - Data types when tracing
void visit(AstConstDType* nodep) override {
if (!m_traVscp) return;
VL_RESTORER(m_offset);
VL_RESTORER(m_skipDtypeFunc);
m_skipDtypeFunc = true;
iterate(nodep->subDTypep()->skipRefToEnump());
}
void visit(AstRefDType* nodep) override {
if (!m_traVscp) return;
VL_RESTORER(m_offset);
iterate(nodep->subDTypep()->skipRefToEnump());
}
void visit(AstIfaceRefDType* /*nodep*/) override {
@ -570,39 +794,22 @@ class TraceDeclVisitor final : public VNVisitor {
return;
}
VL_RESTORER(m_traName);
FileLine* const flp = nodep->fileline();
addToSubFunc(new AstTracePushPrefix{flp, m_traName, VTracePrefixType::ARRAY_UNPACKED,
nodep->left(), nodep->right()});
if (VN_IS(nodep->subDTypep()->skipRefToEnump(),
BasicDType) // Nothing lower than this array
&& m_traVscp->dtypep()->skipRefToEnump() == nodep) { // Nothing above this array
// Simple 1-D array, use existing V3EmitC runtime loop rather than unrolling
// This will put "(index)" at end of signal name for us
if (m_traVscp->dtypep()->skipRefToEnump()->isString()) {
addIgnore("Unsupported: strings");
} else {
m_traName = "";
addTraceDecl(nodep->declRange(), 0);
}
} else {
AstNodeDType* const subtypep = nodep->subDTypep()->skipRefToEnump();
// Always iterate left index to right index
const int inc = nodep->rangep()->ascending() ? 1 : -1;
for (int i = nodep->left(); i != nodep->right() + inc; i += inc) {
VL_RESTORER(m_traValuep);
m_traName = '[' + std::to_string(i) + ']';
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstArraySel{flp, m_traValuep, i - nodep->lo()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_DANGLING(m_traValuep->deleteTree(), m_traValuep);
}
// Skip unpacked arrays of non-traceable leaf types (e.g. strings)
if (VN_IS(nodep->subDTypep()->skipRefToEnump(), BasicDType)
&& nodep->subDTypep()->skipRefToEnump()->isString()) {
addIgnore("Unsupported: strings");
return;
}
addToSubFunc(new AstTracePopPrefix{flp});
VL_RESTORER(m_skipDtypeFunc);
VL_RESTORER(m_dtypeDeclp);
if (isBasicIO()) m_skipDtypeFunc = true;
if (!(m_skipDtypeFunc || m_dtypeDeclp)) {
VL_RESTORER(m_offset);
newDeclFunc(nodep);
}
declUnpackedArray(nodep, false);
}
void visit(AstPackArrayDType* nodep) override {
if (!m_traVscp) return;
@ -625,26 +832,15 @@ class TraceDeclVisitor final : public VNVisitor {
}
}
VL_RESTORER(m_traName);
FileLine* const flp = nodep->fileline();
VL_RESTORER(m_skipDtypeFunc);
VL_RESTORER(m_dtypeDeclp);
if (isBasicIO()) m_skipDtypeFunc = true;
addToSubFunc(new AstTracePushPrefix{flp, m_traName, VTracePrefixType::ARRAY_PACKED,
nodep->left(), nodep->right()});
// Always iterate left index to right index
const int inc = nodep->rangep()->ascending() ? 1 : -1;
for (int i = nodep->left(); i != nodep->right() + inc; i += inc) {
VL_RESTORER(m_traValuep);
m_traName = '[' + std::to_string(i) + ']';
const int lsb = (i - nodep->lo()) * subtypep->width();
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstSel{flp, m_traValuep, lsb, subtypep->width()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_CLEAR(m_traValuep->deleteTree(), m_traValuep = nullptr);
if (!(m_skipDtypeFunc || m_dtypeDeclp)) {
VL_RESTORER(m_offset);
newDeclFunc(nodep);
}
addToSubFunc(new AstTracePopPrefix{flp});
declPackedArray(nodep, false);
}
void visit(AstStructDType* nodep) override {
if (!m_traVscp) return;
@ -657,47 +853,26 @@ class TraceDeclVisitor final : public VNVisitor {
return;
}
VL_RESTORER(m_traName);
FileLine* const flp = nodep->fileline();
VL_RESTORER(m_skipDtypeFunc);
VL_RESTORER(m_dtypeDeclp);
if (isBasicIO()) m_skipDtypeFunc = true;
int nMembers = 0;
for (AstNode* mp = nodep->membersp(); mp; mp = mp->nextp()) ++nMembers;
if (!nodep->packed()) {
addToSubFunc(new AstTracePushPrefix{flp, m_traName, //
VTracePrefixType::STRUCT_UNPACKED, nMembers});
for (const AstMemberDType *itemp = nodep->membersp(), *nextp; itemp; itemp = nextp) {
nextp = VN_AS(itemp->nextp(), MemberDType);
AstNodeDType* const subtypep = itemp->subDTypep()->skipRefToEnump();
m_traName = itemp->prettyName();
VL_RESTORER(m_traValuep);
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstStructSel{flp, m_traValuep, itemp->name()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_DANGLING(m_traValuep->deleteTree(), m_traValuep);
}
addToSubFunc(new AstTracePopPrefix{flp});
} else {
addToSubFunc(new AstTracePushPrefix{flp, m_traName, //
VTracePrefixType::STRUCT_PACKED, nMembers});
for (const AstMemberDType *itemp = nodep->membersp(), *nextp; itemp; itemp = nextp) {
nextp = VN_AS(itemp->nextp(), MemberDType);
AstNodeDType* const subtypep = itemp->subDTypep()->skipRefToEnump();
m_traName = itemp->prettyName();
VL_RESTORER(m_traValuep);
m_traValuep = m_traValuep->cloneTree(false);
m_traValuep = new AstSel{flp, m_traValuep, itemp->lsb(), subtypep->width()};
m_traValuep->dtypep(subtypep);
iterate(subtypep);
VL_DO_DANGLING(m_traValuep->deleteTree(), m_traValuep);
}
addToSubFunc(new AstTracePopPrefix{flp});
// Only create sub functions for top-level structs, i.e. don't have struct funcs
// call other struct funcs for child types. This could easily be done for decl funcs
// but full / chg funcs would require copying / aligning data for child types or more
// complicated / wonky / generalized data access.
if (!(m_skipDtypeFunc || m_dtypeDeclp)) {
VL_RESTORER(m_offset);
newDeclFunc(nodep);
}
declStruct(nodep, false);
}
void visit(AstUnionDType* nodep) override {
if (!m_traVscp) return;
VL_RESTORER(m_skipDtypeFunc);
m_skipDtypeFunc = true;
if (nodep->packed() && !v3Global.opt.traceStructs()) {
// Everything downstream is packed, so deal with as one trace unit
// This may not be the nicest for user presentation, but is

View File

@ -5509,8 +5509,6 @@ class WidthVisitor final : public VNVisitor {
}
if (patp) {
// Don't want the RHS an array
allConstant &= VN_IS(patp->lhssp(), Const);
patp->dtypep(arrayDtp->subDTypep());
AstNodeExpr* const valuep = patternMemberValueIterate(patp);
if (VN_IS(arrayDtp, UnpackArrayDType)) {
@ -5519,7 +5517,50 @@ class WidthVisitor final : public VNVisitor {
= new AstInitArray{nodep->fileline(), arrayDtp, nullptr};
newp = newap;
}
VN_AS(newp, InitArray)->addIndexValuep(ent - range.lo(), valuep);
// If valuep is a reference to an array constant (or a
// slice of one), flatten its elements into the target
// array. Width resolution has already run (including
// early resolution in patVectorMap), so slices appear
// as AstSliceSel.
const AstInitArray* subInitp = nullptr;
int flattenLo = 0;
int flattenElements = 0;
if (const auto* vrp = VN_CAST(valuep, NodeVarRef)) {
subInitp = VN_CAST(vrp->varp()->valuep(), InitArray);
if (subInitp) {
if (const auto* adtp
= VN_CAST(vrp->varp()->dtypep()->skipRefp(), NodeArrayDType)) {
flattenElements = adtp->declRange().elements();
}
}
} else if (const auto* slicep = VN_CAST(valuep, SliceSel)) {
if (const auto* vrp = VN_CAST(slicep->fromp(), NodeVarRef)) {
subInitp = VN_CAST(vrp->varp()->valuep(), InitArray);
if (subInitp) {
flattenLo = slicep->declRange().lo();
flattenElements = slicep->declRange().elements();
}
}
}
if (subInitp && flattenElements > 0) {
// Sub-array values are always constant
VL_DO_DANGLING(pushDeletep(valuep), valuep);
for (int sn = 0; sn < flattenElements; ++sn) {
UASSERT_OBJ(entn < range.elements(), nodep,
"Flattened sub-array overflows target array");
VN_AS(newp, InitArray)
->addIndexValuep(ent - range.lo(),
subInitp->getIndexDefaultedValuep(flattenLo + sn)
->cloneTree(false));
if (sn < flattenElements - 1) {
++entn;
ent += range.leftToRightInc();
}
}
} else {
allConstant &= VN_IS(valuep, Const);
VN_AS(newp, InitArray)->addIndexValuep(ent - range.lo(), valuep);
}
} else { // Packed. Convert to concat for now.
if (!newp) {
newp = valuep;
@ -9541,7 +9582,29 @@ class WidthVisitor final : public VNVisitor {
if (!newEntry) {
patp->v3error("Assignment pattern key used multiple times: " << element);
}
element += range.leftToRightInc();
// For positional members that reference an array (or a slice
// of one), advance by that array/slice's element count so
// subsequent members are mapped correctly. Width-resolve the
// value expression so its dtype is set
int elementAdvance = 1;
if (!patp->keyp()
&& (VN_IS(patp->lhssp(), NodeVarRef) || VN_IS(patp->lhssp(), SelExtract))) {
userIterateAndNext(patp->lhssp(), WidthVP{CONTEXT_DET, PRELIM}.p());
AstNodeExpr* const exprp = patp->lhssp();
if (const AstNodeDType* const dtypep = exprp->dtypep()) {
if (const auto* adtp = VN_CAST(dtypep->skipRefp(), UnpackArrayDType)) {
// Only flatten constant arrays backed by InitArray
const AstNodeVarRef* vrp = VN_CAST(exprp, NodeVarRef);
if (!vrp) {
if (const auto* slicep = VN_CAST(exprp, SliceSel))
vrp = VN_CAST(slicep->fromp(), NodeVarRef);
}
if (vrp && VN_IS(vrp->varp()->valuep(), InitArray))
elementAdvance = adtp->declRange().elements();
}
}
}
element += range.leftToRightInc() * elementAdvance;
}
return patmap;
}

View File

@ -2634,49 +2634,85 @@ class VlTest:
case _:
self.error("Unknown trace file format " + traceFn)
def _vcd_read(self, filename: str) -> dict:
data = {}
@staticmethod
def _vcd_parse_header(filename: str, root_scope: 'str | None' = None) -> 'tuple[dict, dict]':
"""Parse VCD header into hierarchy data and signal-code mapping.
Returns (hier_data, var_codes) where:
hier_data: dict used by _vcd_read for hierarchy comparison
(scope paths -> scope description, var paths -> $var prefix,
attr paths -> $attrbegin text)
var_codes: dict mapping 'scope.signal' -> VCD code identifier
"""
hier_data: dict = {}
var_codes: dict = {}
hier_stack = [root_scope] if root_scope else []
attr: list = []
with open(filename, 'r', encoding='latin-1') as fh:
hier_stack = ["TOP"]
var = []
attr = []
for line in fh:
match1 = re.search(r'\$scope (\S*)\s+(\S+)', line)
match2 = re.search(r'(\$var \S+\s+\d+\s+)\S+\s+(.+)\s+\$end', line)
match3 = re.search(r'(\$attrbegin .* \$end)', line)
line = line.rstrip()
# print("VR"+ ' '*len(hier_stack) +" L " + line)
if match1: # $scope
name = match1.group(2)
# print("VR"+ ' '*len(hier_stack) +" scope " + line)
hier_stack += [name]
m_scope = re.search(r'\$scope\s+(\S*)\s+(\S+)', line)
m_var = re.search(r'(\$var\s+\S+\s+\d+\s+)(\S+)\s+(.+)\s+\$end', line)
m_attr = re.search(r'(\$attrbegin .* \$end)', line)
if m_scope:
scope_type = m_scope.group(1)
name = m_scope.group(2)
hier_stack.append(name)
scope = '.'.join(hier_stack)
data[scope] = match1.group(1) + " " + name
hier_data[scope] = scope_type + " " + name
if attr:
data[scope + "#"] = " ".join(attr)
hier_data[scope + "#"] = " ".join(attr)
attr = []
elif match2: # $var
# print("VR"+ ' '*len(hier_stack) +" var " + line)
elif m_var:
scope = '.'.join(hier_stack)
var = match2.group(2)
data[scope + "." + var] = match2.group(1)
decl_prefix = m_var.group(1)
code = m_var.group(2)
var_name = m_var.group(3)
hier_data[scope + "." + var_name] = decl_prefix
if attr:
data[scope + "." + var + "#"] = " ".join(attr)
hier_data[scope + "." + var_name + "#"] = " ".join(attr)
attr = []
elif match3: # $attrbegin
# print("VR"+ ' '*len(hier_stack) +" attr " + line)
attr.append(match3.group(1))
bare_name = var_name.split()[0]
var_codes[scope + "." + bare_name] = code
elif m_attr:
attr.append(m_attr.group(1))
elif re.search(r'\$enddefinitions', line):
break
n = len(re.findall(r'\$upscope', line))
if n:
for i in range(0, n): # pylint: disable=unused-variable
# print("VR"+ ' '*len(hier_stack) +" upscope " + line)
for _i in range(0, n):
hier_stack.pop()
if attr:
self.error(f"Unhandled attribute: {attr}")
return hier_data, var_codes
def _vcd_read(self, filename: str) -> dict:
data, _ = self._vcd_parse_header(filename, root_scope="TOP")
return data
def vcd_extract_codes(self, filename: str) -> dict:
_, codes = self._vcd_parse_header(filename)
return codes
def vcd_check_aliased(self, codes: dict, sig_a: str, sig_b: str) -> None:
code_a = codes.get(sig_a)
code_b = codes.get(sig_b)
if code_a is None:
self.error(f"Signal '{sig_a}' not found in VCD")
if code_b is None:
self.error(f"Signal '{sig_b}' not found in VCD")
if code_a != code_b:
self.error(f"Expected '{sig_a}' (code {code_a}) to alias "
f"'{sig_b}' (code {code_b})")
def vcd_check_not_aliased(self, codes: dict, sig_a: str, sig_b: str) -> None:
code_a = codes.get(sig_a)
code_b = codes.get(sig_b)
if code_a is None:
self.error(f"Signal '{sig_a}' not found in VCD")
if code_b is None:
self.error(f"Signal '{sig_b}' not found in VCD")
if code_a == code_b:
self.error(f"Expected '{sig_a}' and '{sig_b}' to have different codes, "
f"both have code {code_a}")
def inline_checks(self) -> None:
covfn = self.coverage_filename
contents = self.file_contents(covfn)
@ -2771,7 +2807,7 @@ class VlTest:
contents = self.file_contents(filename)
if contents == "_Already_Errored_":
return
count = len(re.findall(regexp, contents))
count = len(re.findall(regexp, contents, re.MULTILINE))
if expcount != count:
self.error("File_grep_count: " + filename + ": Got='" + str(count) + "' Expected='" +
str(expcount) + "' in regexp: '" + regexp + "'")
@ -2781,7 +2817,7 @@ class VlTest:
contents = self.file_contents(filename)
if contents == "_Already_Errored_":
return
match = re.search(regexp, contents)
match = re.search(regexp, contents, re.MULTILINE)
if match:
if expvalue is not None and str(expvalue) != match.group(1):
self.error("file_grep: " + filename + ": Got='" + match.group(1) +

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# 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-FileCopyrightText: 2026 Wilson Snyder
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile()
test.execute()
test.passes()

View File

@ -0,0 +1,159 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Greg Davill
// SPDX-License-Identifier: CC0-1.0
`define stop $stop
`define checkh(gotv,
expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
package arr_pkg;
localparam logic [31:0] PKG_ADDRS[3] = '{32'hAA001000, 32'hAA002000, 32'hAA003000};
endpackage
module t ( /*AUTOARG*/);
// Test: array concatenation in pattern initialization
// An array localparam used as a value in another array's pattern
// should have its elements "flattened" into the target array.
localparam logic [31:0] BASE_ADDRS[3] = '{32'h80001000, 32'h80002000, 32'h80003000};
// Sub-array slice at the start
localparam logic [31:0] ALL_ADDRS[4] = '{BASE_ADDRS[0:1], 32'h80003000, 32'h80004000};
// Sub-array slice in the middle
localparam logic [31:0] MID[5] = '{32'hFF, BASE_ADDRS[0:1], 32'hAA, 32'hBB};
// Multiple full sub-arrays
localparam logic [31:0] EXTRA[2] = '{32'hC0, 32'hD0};
localparam logic [31:0] MULTI[5] = '{BASE_ADDRS, EXTRA};
// Sub-array with default (sparse InitArray)
localparam logic [31:0] DFLT[3] = '{default: 32'hDD};
localparam logic [31:0] WITH_DFLT[4] = '{DFLT, 32'hEE};
// Slice at the end
localparam logic [31:0] TAIL[4] = '{32'hAA, 32'hBB, BASE_ADDRS[1:2]};
// Multiple slices combined
localparam logic [31:0] MULTI_SLICE[4] = '{BASE_ADDRS[0:1], BASE_ADDRS[1:2]};
// Single-element slice
localparam logic [31:0] SINGLE[3] = '{BASE_ADDRS[0:0], 32'hAA, 32'hBB};
// Descending-range source array
localparam logic [31:0] DESC[2:0] = '{32'hD0, 32'hD1, 32'hD2};
localparam logic [31:0] WITH_DESC[4] = '{DESC[1:0], 32'hAA, 32'hBB};
// Slice bounds from parameter expressions
localparam int unsigned N = 2;
localparam logic [31:0] PARAM_SLICE[4] = '{BASE_ADDRS[0:N-1], 32'hAA, 32'hBB};
// Multiple param-bounded slices composing a larger array
localparam logic [31:0] SRC_A[4] = '{32'hA0, 32'hA1, 32'hA2, 32'hA3};
localparam logic [31:0] SRC_B[4] = '{32'hB0, 32'hB1, 32'hB2, 32'hB3};
localparam int unsigned NA = 2;
localparam int unsigned NB = 3;
localparam int unsigned TOTAL = NA + NB;
localparam logic [31:0] COMPOSED[TOTAL] = '{SRC_A[0:NA-1], SRC_B[0:NB-1]};
// Test key'd associative array initialisations
localparam logic [31:0] KEY_ARR_A[4] = '{0: BASE_ADDRS[0:1], 2: 32'hF2, 3: 32'hF3};
localparam logic [31:0] KEY_ARR_B[4] = '{2: ALL_ADDRS[1:2], default: 32'h00};
// Keyed pattern where values are indexed from another array param
// the key determines position, not the source array's element count.
localparam logic [31:0] KEYED_FROM_ARR[3] = '{
0: BASE_ADDRS[2], 1: BASE_ADDRS[0], 2: BASE_ADDRS[1]
};
// Package-scoped array as a positional pattern member
localparam logic [31:0] WITH_PKG[4] = '{arr_pkg::PKG_ADDRS, 32'hFF};
// Package-scoped array slice
localparam logic [31:0] PKG_SLICE[4] = '{arr_pkg::PKG_ADDRS[0:1], 32'hAA, 32'hBB};
initial begin
`checkh(ALL_ADDRS[0], 32'h80001000);
`checkh(ALL_ADDRS[1], 32'h80002000);
`checkh(ALL_ADDRS[2], 32'h80003000);
`checkh(ALL_ADDRS[3], 32'h80004000);
`checkh(MID[0], 32'hFF);
`checkh(MID[1], 32'h80001000);
`checkh(MID[2], 32'h80002000);
`checkh(MID[3], 32'hAA);
`checkh(MID[4], 32'hBB);
`checkh(MULTI[0], 32'h80001000);
`checkh(MULTI[1], 32'h80002000);
`checkh(MULTI[2], 32'h80003000);
`checkh(MULTI[3], 32'hC0);
`checkh(MULTI[4], 32'hD0);
`checkh(WITH_DFLT[0], 32'hDD);
`checkh(WITH_DFLT[1], 32'hDD);
`checkh(WITH_DFLT[2], 32'hDD);
`checkh(WITH_DFLT[3], 32'hEE);
`checkh(TAIL[0], 32'hAA);
`checkh(TAIL[1], 32'hBB);
`checkh(TAIL[2], 32'h80002000);
`checkh(TAIL[3], 32'h80003000);
`checkh(MULTI_SLICE[0], 32'h80001000);
`checkh(MULTI_SLICE[1], 32'h80002000);
`checkh(MULTI_SLICE[2], 32'h80002000);
`checkh(MULTI_SLICE[3], 32'h80003000);
`checkh(SINGLE[0], 32'h80001000);
`checkh(SINGLE[1], 32'hAA);
`checkh(SINGLE[2], 32'hBB);
`checkh(WITH_DESC[0], 32'hD2);
`checkh(WITH_DESC[1], 32'hD1);
`checkh(WITH_DESC[2], 32'hAA);
`checkh(WITH_DESC[3], 32'hBB);
`checkh(PARAM_SLICE[0], 32'h80001000);
`checkh(PARAM_SLICE[1], 32'h80002000);
`checkh(PARAM_SLICE[2], 32'hAA);
`checkh(PARAM_SLICE[3], 32'hBB);
`checkh(COMPOSED[0], 32'hA0);
`checkh(COMPOSED[1], 32'hA1);
`checkh(COMPOSED[2], 32'hB0);
`checkh(COMPOSED[3], 32'hB1);
`checkh(COMPOSED[4], 32'hB2);
`checkh(KEY_ARR_A[0], 32'h80001000);
`checkh(KEY_ARR_A[1], 32'h80002000);
`checkh(KEY_ARR_A[2], 32'hF2);
`checkh(KEY_ARR_A[3], 32'hF3);
`checkh(KEY_ARR_B[0], 32'h00);
`checkh(KEY_ARR_B[1], 32'h00);
`checkh(KEY_ARR_B[2], 32'h80002000);
`checkh(KEY_ARR_B[3], 32'h80003000);
`checkh(KEYED_FROM_ARR[0], 32'h80003000);
`checkh(KEYED_FROM_ARR[1], 32'h80001000);
`checkh(KEYED_FROM_ARR[2], 32'h80002000);
`checkh(WITH_PKG[0], 32'hAA001000);
`checkh(WITH_PKG[1], 32'hAA002000);
`checkh(WITH_PKG[2], 32'hAA003000);
`checkh(WITH_PKG[3], 32'hFF);
`checkh(PKG_SLICE[0], 32'hAA001000);
`checkh(PKG_SLICE[1], 32'hAA002000);
`checkh(PKG_SLICE[2], 32'hAA);
`checkh(PKG_SLICE[3], 32'hBB);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# 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-FileCopyrightText: 2026 Wilson Snyder
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile()
test.execute()
test.passes()

View File

@ -0,0 +1,49 @@
// DESCRIPTION: Verilator: Assignment pattern preserves array expression side effects
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-FileCopyrightText: 2026 Rowan Goemans
// SPDX-License-Identifier: CC0-1.0
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
module t;
// verilator lint_off ASCRANGE
typedef logic [0:2][7:0] triple_lv_t;
// verilator lint_on ASCRANGE
typedef triple_lv_t pair_t [0:1];
function automatic triple_lv_t mk3(
input logic [7:0] a,
input logic [7:0] b,
input logic [7:0] c
);
mk3 = '{0: a, 1: b, 2: c};
endfunction
pair_t pair;
initial begin
// verilator lint_off SIDEEFFECT
pair = '{
0: mk3(8'd1, 8'd2, 8'd3),
1: mk3(8'd4, 8'd5, 8'd6)
};
// verilator lint_on SIDEEFFECT
`checkd(pair[0][0], 8'd1);
`checkd(pair[0][1], 8'd2);
`checkd(pair[0][2], 8'd3);
`checkd(pair[1][0], 8'd4);
`checkd(pair[1][1], 8'd5);
`checkd(pair[1][2], 8'd6);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -13,7 +13,6 @@ module t;
initial begin
smaller = 8'hfa;
bigger = bigger_t'(signed'(smaller));
$display("%x", bigger); // NOCOMMIT
if (bigger != 16'hfffa) $stop;
$write("*-* All Finished *-*\n");

View File

@ -0,0 +1,21 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# 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-FileCopyrightText: 2026 Wilson Snyder
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
if not test.have_solver:
test.skip("No constraint solver installed")
test.compile()
test.execute()
test.passes()

View File

@ -0,0 +1,116 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 PlanV GmbH
// SPDX-License-Identifier: CC0-1.0
// verilog_format: off
typedef logic [31:0] uvm_reg_data_t;
class uvm_object;
endclass
class uvm_reg_field extends uvm_object;
rand uvm_reg_data_t value;
int unsigned m_size;
function uvm_reg_data_t get;
return value;
endfunction
function void set_rand_mode(bit rand_mode);
value.rand_mode(rand_mode);
uvm_reg_field_valid.constraint_mode(rand_mode);
endfunction
function bit get_rand_mode();
return bit'(value.rand_mode());
endfunction
constraint uvm_reg_field_valid {
if (64'd64 > {32'd0, m_size}) {
{32'd0, value} < (64'd1 << m_size);
}
}
function void configure(int unsigned size);
m_size = size;
endfunction
endclass
class uvm_reg extends uvm_object;
virtual function void build();
endfunction
endclass
class regA extends uvm_reg;
rand uvm_reg_field fA1;
rand uvm_reg_field fA2;
virtual function void build();
this.fA1 = new;
this.fA2 = new;
this.fA1.configure(16);
this.fA2.configure(16);
endfunction
endclass
class test extends uvm_object;
regA rg;
function new;
rg = new;
rg.build();
endfunction
task run_test;
uvm_reg_data_t pre_fA1;
uvm_reg_data_t pre_fA2;
int rand_ok;
// Disable fA1, enable fA2
rg.fA1.set_rand_mode(0);
rg.fA2.set_rand_mode(1);
if (rg.fA1.get_rand_mode() != 0) $stop;
if (rg.fA2.get_rand_mode() != 1) $stop;
pre_fA1 = rg.fA1.value;
rand_ok = rg.randomize();
if (rand_ok != 0) begin
// fA1 should be unchanged
if (rg.fA1.get() !== pre_fA1) begin
$display("%%Error: fA1 changed: got=%0h exp=%0h", rg.fA1.get(), pre_fA1);
$stop;
end
end
// Re-enable fA1, disable fA2
rg.fA1.set_rand_mode(1);
rg.fA2.set_rand_mode(0);
pre_fA2 = rg.fA2.value;
rand_ok = rg.randomize();
if (rand_ok != 0) begin
// fA2 should be unchanged
if (rg.fA2.get() !== pre_fA2) begin
$display("%%Error: fA2 changed: got=%0h exp=%0h", rg.fA2.get(), pre_fA2);
$stop;
end
end
$write("*-* All Finished *-*\n");
$finish;
endtask
endclass
module top;
initial begin
test t;
t = new;
t.run_test();
end
endmodule

View File

@ -125,7 +125,8 @@ module t (
`signal(SWAP_VAR_IN_COMMUTATIVE_BINARY, rand_b + rand_a);
`signal(PUSH_BITWISE_OP_THROUGH_CONCAT, 32'h12345678 ^ {8'h0, rand_a[23:0]});
`signal(PUSH_BITWISE_OP_THROUGH_CONCAT_2, 32'h12345678 ^ {rand_b[7:0], rand_a[23:0]});
`signal(PUSH_COMPARE_OP_THROUGH_CONCAT, 4'b1011 == {2'b10, rand_a[1:0]});
`signal(PUSH_COMPARE_OP_THROUGH_CONCAT_EQ, 4'b1011 == {2'b10, rand_a[1:0]});
`signal(PUSH_COMPARE_OP_THROUGH_CONCAT_NE, 4'b1011 != {2'b10, rand_a[1:0]});
`signal(PUSH_REDUCTION_THROUGH_COND_WITH_CONST_BRANCH, |(rand_a[32] ? rand_a[3:0] : 4'h0));
`signal(REPLACE_REDUCTION_OF_CONST_AND, &const_a);
`signal(REPLACE_REDUCTION_OF_CONST_OR, |const_a);
@ -251,6 +252,8 @@ module t (
`signal(REPLACE_COND_CONST_ONE_ZERO, rand_a[0] ? 8'b1 : 8'b0);
`signal(REPLACE_COND_CONST_ZERO_ONE, rand_a[0] ? 8'b0 : 8'b1);
`signal(REPLACE_COND_CONST_ONES_ZERO, rand_a[0] ? 8'hff : 8'b0);
`signal(REPLACE_COND_CONST_ZERO_ONAE, rand_a[0] ? 8'b0 : 8'hff);
`signal(REPLACE_COND_CAT_LHS_CONST_ONE_ZERO, rand_a[0] ? {8'b1, rand_b[0]} : {8'b0, rand_b[1]});
`signal(REPLACE_COND_CAT_LHS_CONST_ZERO_ONE, rand_a[0] ? {8'b0, rand_b[0]} : {8'b1, rand_b[1]});
`signal(REPLACE_COND_SAME_CAT_LHS, rand_a[0] ? {8'd0, rand_b[0]} : {8'd0, rand_b[1]});
@ -310,6 +313,18 @@ module t (
`signal(FOLD_MUX_FROM_ONES, ones[rand_a[5:0]]);
`signal(FOLD_MUX_FROM_ZERO, zero[rand_a[5:0]]);
`signal(REPLACE_MUX_WITH_SEL, rand_a[const_a[5:0]]);
`signal(REPLACE_COND_THEN_OR_LHS, rand_a[0] ? rand_a[1] | rand_b[1] : rand_a[1]);
`signal(REPLACE_COND_THEN_OR_RHS, rand_a[0] ? rand_a[1] | rand_b[1] : rand_b[1]);
`signal(REMOVE_ACI_BINARY_LHS, ~rand_a & (~rand_b & ~rand_a));
`signal(REMOVE_ACI_BINARY_RHS, (~rand_b & ~rand_a) & ~rand_a);
`signal(REPLACE_CONCAT_SAME, {rand_a, rand_a});
`signal(REPLACE_CONCAT_REP_ON_LHS, {{2{rand_a}}, rand_a});
`signal(REPLACE_CONCAT_REP_ON_RHS, {rand_a, {2{rand_a}}});
`signal(REPLACE_AND_REP_COND_ELSE_ZERO, {4{rand_a[0]}} & (rand_a[1] ? rand_b[3:0] : 4'd0));
`signal(REPLACE_EQ_BIT_0, 1'b0 == rand_a[0]);
`signal(REMOVE_EQ_BIT_1, 1'b1 == rand_a[0]);
`signal(REMOVE_NEQ_BIT_0, 1'b0 != rand_a[0]);
`signal(REPLACE_NEQ_BIT_1, 1'b1 != rand_a[0]);
// Operators that should work wiht mismatched widths
`signal(MISMATCHED_ShiftL,const_a << 4'd2);

View File

@ -91,8 +91,8 @@ DFG patterns with depth 3
DFG patterns with depth 4
1 (CONCAT (REDXOR (AND (NOT _:A/a):B*/a (NOT _:C/a):D*/a):E*/a):F/1 (CONCAT (REDXOR (AND _:D*/a _:G*/a):H/a):I/1 (CONCAT (REDXOR _:J/a):K/1 (CONCAT _:L/1 _:M/b):N/c):O/d):P/e):Q/f
1 (CONCAT (REDXOR (AND (NOT _:A/a):B*/a (NOT _:C/a):D*/a):E/a):F/1 (CONCAT (REDXOR (AND _:G*/a _:D*/a):H/a):I/1 (CONCAT (SEL@0 _:J*/a):K/1 (CONCAT _:L/1 _:M/b):N/c):O/d):P/e):Q/f
1 (CONCAT (REDXOR (AND (NOT _:A/a):B*/a (NOT _:C/a):D*/a):E/a):F/1 (CONCAT (SEL@0 (AND _:B*/a _:G*/a):H*/a):I/1 (CONCAT (REDXOR _:J*/b):K/1 (CONCAT _:L/1 _:M/c):N/d):O/e):P/b):Q/f
1 (CONCAT (REDXOR (AND (NOT _:A/a):B*/a (NOT _:C/a):D*/a):E/a):F/1 (CONCAT (REDXOR (AND _:D*/a _:G*/a):H/a):I/1 (CONCAT (SEL@0 _:J*/a):K/1 (CONCAT _:L/1 _:M/b):N/c):O/d):P/e):Q/f
1 (CONCAT (REDXOR (AND (NOT _:A/a):B*/a (NOT _:C/a):D*/a):E/a):F/1 (CONCAT (SEL@0 (AND _:D*/a _:G*/a):H*/a):I/1 (CONCAT (REDXOR _:J*/b):K/1 (CONCAT _:L/1 _:M/c):N/d):O/e):P/b):Q/f
1 (CONCAT (REDXOR (REPLICATE (NOT _:A*/a):B/a cA:C/a):D*/b):E/1 (CONCAT (REDXOR (SEL@0 _:D*/b):F/c):G/1 (REDXOR (REPLICATE _:A*/a cA:H/a):I/b):J*/1):K/d):L/e
1 (CONCAT (REDXOR (REPLICATE (REPLICATE _:A*/a cA:B/b):C*/b cA:D/b):E/c):F*/1 (CONCAT (REDXOR (REPLICATE _:G/b cA:H/b):I*/c):J/1 (CONCAT (REDXOR _:K/d):L/1 (REDXOR _:E/c):F*/1):M/e):N/f):O/g
1 (CONCAT (REDXOR (REPLICATE (REPLICATE _:A*/a cA:B/b):C*/c cA:D/b):E*/b):F/1 (CONCAT (REDXOR (REPLICATE _:E*/b cA:G/b):H/d):I*/1 (CONCAT (REDXOR _:J*/d):K/1 (CONCAT _:L/1 _:I*/1):M/e):N/f):O/g):P/h

View File

@ -14,8 +14,11 @@ test.scenarios('simulator')
test.compile(verilator_flags2=["--trace-vcd", "--trace-structs", "--output-split-ctrace", "32"])
if test.vlt_all:
test.file_grep_count(test.obj_dir + "/V" + test.name + "__Trace__0.cpp",
r'void Vt.*trace_chg_.*sub.*{', 3)
test.file_grep_count(
test.obj_dir + "/V" + test.name + "__Trace__0.cpp",
# dtype sub funcs prevent trace_chg splitting, but --vltmt still forces three of them
r'void Vt.*trace_chg_.*sub.*{',
3 if test.vltmt else 1)
test.execute()

View File

@ -18,7 +18,7 @@ test.compile(verilator_flags2=["-Wno-UNOPTTHREADS", "--stats", test.pli_filename
test.execute()
if test.vlt:
test.file_grep(test.stats, r'Optimizations, Const bit op reduction\s+(\d+)', 43)
test.file_grep(test.stats, r'Optimizations, Const bit op reduction\s+(\d+)', 41)
test.file_grep(test.stats, r'SplitVar, packed variables split automatically\s+(\d+)', 1)
test.passes()

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:24 2026
Tue Apr 14 15:20:27 2026
$end
$version

View File

@ -1,51 +1,50 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 # clk $end
$var wire 1 " clk $end
$scope module t $end
$var wire 1 # clk $end
$var wire 3 $ cyc [2:0] $end
$var wire 1 " clk $end
$var wire 3 # cyc [2:0] $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
0#
b000 $
0"
b000 #
#10
1#
b001 $
1"
b001 #
#15
0#
0"
#20
1#
b010 $
1"
b010 #
#25
0#
0"
#30
1#
b011 $
1"
b011 #
#35
0#
0"
#40
1#
b100 $
1"
b100 #
#45
0#
0"
#50
1#
b101 $
1"
b101 #
#55
0#
0"
#60
1#
b110 $
1"
b110 #
#65
0#
0"
#70
1#
b111 $
1"
b111 #
#75
0#
0"

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:46 2026
Tue Apr 14 15:20:28 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:42 2026
Tue Apr 14 15:20:28 2026
$end
$version

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:51 2026
Tue Apr 14 15:20:31 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:14 2026
Tue Apr 14 15:20:31 2026
$end
$version

View File

@ -1,142 +1,141 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 } clk $end
$var wire 1 | clk $end
$scope module t $end
$var wire 8 ~ P [0:7] $end
$var wire 1 } clk $end
$var wire 32 # cyc [31:0] $end
$var wire 8 !! Q [0:7] $end
$var wire 1 $ v_a [0:0] $end
$var wire 2 % v_b [0:1] $end
$var wire 8 & v_c [0:7] $end
$var wire 9 ' v_d [0:8] $end
$var wire 16 ( v_e [0:15] $end
$var wire 17 ) v_f [0:16] $end
$var wire 32 * v_g [0:31] $end
$var wire 33 + v_h [0:32] $end
$var wire 64 - v_i [0:63] $end
$var wire 65 / v_j [0:64] $end
$var wire 128 2 v_k [0:127] $end
$var wire 129 6 v_l [0:128] $end
$var wire 256 ; v_m [0:255] $end
$var wire 257 C v_n [0:256] $end
$var wire 512 L v_o [0:511] $end
$var wire 3 \ v_p [-1:1] $end
$var wire 15 ] v_q [-7:7] $end
$var wire 31 ^ v_r [-15:15] $end
$var wire 63 _ v_s [-31:31] $end
$var wire 127 a v_t [-63:63] $end
$var wire 255 e v_u [-127:127] $end
$var wire 511 m v_v [-255:255] $end
$var wire 8 } P [0:7] $end
$var wire 1 | clk $end
$var wire 32 " cyc [31:0] $end
$var wire 8 ~ Q [0:7] $end
$var wire 1 # v_a [0:0] $end
$var wire 2 $ v_b [0:1] $end
$var wire 8 % v_c [0:7] $end
$var wire 9 & v_d [0:8] $end
$var wire 16 ' v_e [0:15] $end
$var wire 17 ( v_f [0:16] $end
$var wire 32 ) v_g [0:31] $end
$var wire 33 * v_h [0:32] $end
$var wire 64 , v_i [0:63] $end
$var wire 65 . v_j [0:64] $end
$var wire 128 1 v_k [0:127] $end
$var wire 129 5 v_l [0:128] $end
$var wire 256 : v_m [0:255] $end
$var wire 257 B v_n [0:256] $end
$var wire 512 K v_o [0:511] $end
$var wire 3 [ v_p [-1:1] $end
$var wire 15 \ v_q [-7:7] $end
$var wire 31 ] v_r [-15:15] $end
$var wire 63 ^ v_s [-31:31] $end
$var wire 127 ` v_t [-63:63] $end
$var wire 255 d v_u [-127:127] $end
$var wire 511 l v_v [-255:255] $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
b00000000000000000000000000000000 #
0$
b00 %
b00000000 &
b000000000 '
b0000000000000000 (
b00000000000000000 )
b00000000000000000000000000000000 *
b000000000000000000000000000000000 +
b0000000000000000000000000000000000000000000000000000000000000000 -
b00000000000000000000000000000000000000000000000000000000000000000 /
b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6
b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ;
b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 C
b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 L
b000 \
b000000000000000 ]
b0000000000000000000000000000000 ^
b000000000000000000000000000000000000000000000000000000000000000 _
b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 e
b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m
0}
b00001010 ~
b00010100 !!
b00000000000000000000000000000000 "
0#
b00 $
b00000000 %
b000000000 &
b0000000000000000 '
b00000000000000000 (
b00000000000000000000000000000000 )
b000000000000000000000000000000000 *
b0000000000000000000000000000000000000000000000000000000000000000 ,
b00000000000000000000000000000000000000000000000000000000000000000 .
b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 5
b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :
b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B
b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 K
b000 [
b000000000000000 \
b0000000000000000000000000000000 ]
b000000000000000000000000000000000000000000000000000000000000000 ^
b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 d
b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 l
0|
b00001010 }
b00010100 ~
#10
b00000000000000000000000000000001 #
1$
b11 %
b11111111 &
b111111111 '
b1111111111111111 (
b11111111111111111 )
b11111111111111111111111111111111 *
b111111111111111111111111111111111 +
b1111111111111111111111111111111111111111111111111111111111111111 -
b11111111111111111111111111111111111111111111111111111111111111111 /
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 2
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 6
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ;
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 C
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 L
b111 \
b111111111111111 ]
b1111111111111111111111111111111 ^
b111111111111111111111111111111111111111111111111111111111111111 _
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 a
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 e
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 m
1}
b00000000000000000000000000000001 "
1#
b11 $
b11111111 %
b111111111 &
b1111111111111111 '
b11111111111111111 (
b11111111111111111111111111111111 )
b111111111111111111111111111111111 *
b1111111111111111111111111111111111111111111111111111111111111111 ,
b11111111111111111111111111111111111111111111111111111111111111111 .
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 5
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 :
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 B
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 K
b111 [
b111111111111111 \
b1111111111111111111111111111111 ]
b111111111111111111111111111111111111111111111111111111111111111 ^
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 `
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 d
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 l
1|
#15
0}
0|
#20
b00000000000000000000000000000010 #
0$
b10 %
b11111110 &
b111111110 '
b1111111111111110 (
b11111111111111110 )
b11111111111111111111111111111110 *
b111111111111111111111111111111110 +
b1111111111111111111111111111111111111111111111111111111111111110 -
b11111111111111111111111111111111111111111111111111111111111111110 /
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 2
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 6
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 ;
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 C
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 L
b110 \
b111111111111110 ]
b1111111111111111111111111111110 ^
b111111111111111111111111111111111111111111111111111111111111110 _
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 a
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 e
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 m
1}
b00000000000000000000000000000010 "
0#
b10 $
b11111110 %
b111111110 &
b1111111111111110 '
b11111111111111110 (
b11111111111111111111111111111110 )
b111111111111111111111111111111110 *
b1111111111111111111111111111111111111111111111111111111111111110 ,
b11111111111111111111111111111111111111111111111111111111111111110 .
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 1
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 5
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 :
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 B
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 K
b110 [
b111111111111110 \
b1111111111111111111111111111110 ]
b111111111111111111111111111111111111111111111111111111111111110 ^
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 `
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 d
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 l
1|
#25
0}
0|
#30
b00000000000000000000000000000011 #
b00 %
b11111100 &
b111111100 '
b1111111111111100 (
b11111111111111100 )
b11111111111111111111111111111100 *
b111111111111111111111111111111100 +
b1111111111111111111111111111111111111111111111111111111111111100 -
b11111111111111111111111111111111111111111111111111111111111111100 /
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 2
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 6
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 ;
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 C
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 L
b100 \
b111111111111100 ]
b1111111111111111111111111111100 ^
b111111111111111111111111111111111111111111111111111111111111100 _
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 a
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 e
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 m
1}
b00000000000000000000000000000011 "
b00 $
b11111100 %
b111111100 &
b1111111111111100 '
b11111111111111100 (
b11111111111111111111111111111100 )
b111111111111111111111111111111100 *
b1111111111111111111111111111111111111111111111111111111111111100 ,
b11111111111111111111111111111111111111111111111111111111111111100 .
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 1
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 5
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 :
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 B
b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 K
b100 [
b111111111111100 \
b1111111111111111111111111111100 ]
b111111111111111111111111111111111111111111111111111111111111100 ^
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 `
b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 d
b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100 l
1|

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:01 2026
Tue Apr 14 15:20:31 2026
$end
$version

File diff suppressed because it is too large Load Diff

View File

@ -7,33 +7,33 @@ $timescale 1ps $end
$scope module t $end
$var wire 1 & clk $end
$var wire 5 ' state [4:0] $end
$var wire 1 , fst_inout $end
$var wire 1 - fst_inout $end
$var wire 32 ( cyc [31:0] $end
$var wire 1 ) rstn $end
$var real 64 - fst_gparam_real $end
$var real 64 / fst_lparam_real $end
$var real 64 - fst_real $end
$var wire 32 1 fst_integer [31:0] $end
$var wire 1 2 fst_bit $end
$var wire 1 3 fst_logic $end
$var wire 32 4 fst_int [31:0] $end
$var wire 16 5 fst_shortint [15:0] $end
$var wire 64 6 fst_longint [63:0] $end
$var wire 8 8 fst_byte [7:0] $end
$var real 64 . fst_gparam_real $end
$var real 64 0 fst_lparam_real $end
$var real 64 . fst_real $end
$var wire 32 2 fst_integer [31:0] $end
$var wire 1 3 fst_bit $end
$var wire 1 4 fst_logic $end
$var wire 32 5 fst_int [31:0] $end
$var wire 16 6 fst_shortint [15:0] $end
$var wire 64 7 fst_longint [63:0] $end
$var wire 8 9 fst_byte [7:0] $end
$var wire 64 * fst_time [63:0] $end
$var wire 32 9 fst_parameter [31:0] $end
$var wire 32 : fst_lparam [31:0] $end
$var wire 1 , fst_supply0 $end
$var wire 1 ; fst_supply1 $end
$var wire 1 , fst_tri0 $end
$var wire 1 ; fst_tri1 $end
$var wire 1 < fst_tri $end
$var wire 1 = fst_triand $end
$var wire 1 > fst_trior $end
$var wire 1 ? fst_wand $end
$var wire 1 @ fst_wor $end
$var wire 1 A fst_wire $end
$var wire 1 B fst_uwire $end
$var wire 32 : fst_parameter [31:0] $end
$var wire 32 ; fst_lparam [31:0] $end
$var wire 1 - fst_supply0 $end
$var wire 1 < fst_supply1 $end
$var wire 1 - fst_tri0 $end
$var wire 1 < fst_tri1 $end
$var wire 1 = fst_tri $end
$var wire 1 > fst_triand $end
$var wire 1 ? fst_trior $end
$var wire 1 @ fst_wand $end
$var wire 1 A fst_wor $end
$var wire 1 B fst_wire $end
$var wire 1 C fst_uwire $end
$scope module test $end
$var wire 1 & clk $end
$var wire 1 ) rstn $end
@ -59,25 +59,26 @@ b00000000000000000000000000000000 (
0)
b0000000000000000000000000000000000000000000000000000000000000000 *
0,
r1.23 -
r4.56 /
b00000000000000000000000000000000 1
02
0-
r1.23 .
r4.56 0
b00000000000000000000000000000000 2
03
b00000000000000000000000000000000 4
b0000000000000000 5
b0000000000000000000000000000000000000000000000000000000000000000 6
b00000000 8
b00000000000000000000000001111011 9
b00000000000000000000000111001000 :
1;
0<
04
b00000000000000000000000000000000 5
b0000000000000000 6
b0000000000000000000000000000000000000000000000000000000000000000 7
b00000000 9
b00000000000000000000000001111011 :
b00000000000000000000000111001000 ;
1<
0=
0>
0?
0@
0A
0B
0C
#10
b10100 "
b00001 #

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:04 2026
Tue Apr 14 15:20:34 2026
$end
$version

View File

@ -1,12 +1,12 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module t $end
$var wire 32 # sig [31:0] $end
$var wire 32 " sig [31:0] $end
$upscope $end
$enddefinitions $end
#0
b00000000000000000000000000001010 #
b00000000000000000000000000001010 "
#20
b00000000000000000000000000010100 #
b00000000000000000000000000010100 "

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:00 2026
Tue Apr 14 15:20:35 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:49 2026
Tue Apr 14 15:21:24 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:55 2026
Tue Apr 14 15:20:36 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:45 2026
Tue Apr 14 15:21:24 2026
$end
$version

View File

@ -1,10 +1,10 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module $unit::Cls__P0__Vclpkg $end
$var wire 32 # PARAM [31:0] $end
$var wire 32 " PARAM [31:0] $end
$upscope $end
$enddefinitions $end
#0
b00000000000000000000000000000000 #
b00000000000000000000000000000000 "

View File

@ -38,6 +38,7 @@ module t (
typedef strp_t arru_strp_t[4:3];
strp_t v_strp;
strp_t v_strp2;
strp_strp_t v_strp_strp;
unip_strp_t v_unip_strp;
arrp_t v_arrp;
@ -98,6 +99,7 @@ module t (
always @(posedge clk) begin
cyc <= cyc + 1;
v_strp <= ~v_strp;
v_strp2 <= ~v_strp2;
v_strp_strp <= ~v_strp_strp;
v_unip_strp <= ~v_unip_strp;
v_arrp_strp <= ~v_arrp_strp;

View File

@ -1,5 +1,9 @@
$date
Sat Mar 14 09:16:56 2026
<<<<<<< HEAD
Tue Apr 14 15:20:37 2026
=======
Tue Mar 31 17:14:29 2026
>>>>>>> 8895f96e4 (CR)
$end
$version
@ -19,106 +23,108 @@ $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
$var bit 2 & v_unip_strp [1:0] $end
$var bit 2 ' v_arrp [2:1] $end
$var bit 4 ( v_arrp_arrp [3:0] $end
$var bit 4 ) v_arrp_strp [3:0] $end
$var bit 2 % v_strp2 [1:0] $end
$var bit 4 & v_strp_strp [3:0] $end
$var bit 2 ' v_unip_strp [1:0] $end
$var bit 2 ( v_arrp [2:1] $end
$var bit 4 ) v_arrp_arrp [3:0] $end
$var bit 4 * v_arrp_strp [3:0] $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array v_arru $end
$var bit 1 * v_arru[2] $end
$var bit 1 + v_arru[1] $end
$var bit 1 + v_arru[2] $end
$var bit 1 , v_arru[1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arru $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [4] $end
$var bit 1 , v_arru_arru[4][2] $end
$var bit 1 - v_arru_arru[4][1] $end
$var bit 1 - v_arru_arru[4][2] $end
$var bit 1 . v_arru_arru[4][1] $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [3] $end
$var bit 1 . v_arru_arru[3][2] $end
$var bit 1 / v_arru_arru[3][1] $end
$var bit 1 / v_arru_arru[3][2] $end
$var bit 1 0 v_arru_arru[3][1] $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arrp $end
$var bit 2 0 v_arru_arrp[4] [2:1] $end
$var bit 2 1 v_arru_arrp[3] [2:1] $end
$var bit 2 1 v_arru_arrp[4] [2:1] $end
$var bit 2 2 v_arru_arrp[3] [2:1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_strp $end
$var bit 2 2 v_arru_strp[4] [1:0] $end
$var bit 2 3 v_arru_strp[3] [1:0] $end
$var bit 2 3 v_arru_strp[4] [1:0] $end
$var bit 2 4 v_arru_strp[3] [1:0] $end
$upscope $end
$var real 64 4 v_real $end
$var real 64 5 v_real $end
$attrbegin array unpacked bounds 1 $end
$scope sv_array v_arr_real $end
$var real 64 5 v_arr_real[0] $end
$var real 64 6 v_arr_real[1] $end
$var real 64 6 v_arr_real[0] $end
$var real 64 7 v_arr_real[1] $end
$upscope $end
$var longint 64 7 v_chandle [63:0] $end
$var logic 64 8 v_str32x2 [63:0] $end
$var longint 64 8 v_chandle [63:0] $end
$var logic 64 9 v_str32x2 [63:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 9 v_enumed [31:0] $end
$var int 32 : v_enumed [31:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 : v_enumed2 [31:0] $end
$var int 32 ; v_enumed2 [31:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 ; v_enumb [2:0] $end
$var logic 6 < v_enumb2_str [5:0] $end
$var logic 3 < v_enumb [2:0] $end
$var logic 6 = v_enumb2_str [5:0] $end
$attrbegin array unpacked bounds -8589934592 $end
$scope sv_array unpacked_array $end
$var logic 8 = unpacked_array[-2] [7:0] $end
$var logic 8 > unpacked_array[-1] [7:0] $end
$var logic 8 ? unpacked_array[0] [7:0] $end
$var logic 8 > unpacked_array[-2] [7:0] $end
$var logic 8 ? unpacked_array[-1] [7:0] $end
$var logic 8 @ unpacked_array[0] [7:0] $end
$upscope $end
$var bit 1 @ LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var bit 1 A LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var parameter 32 A PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var parameter 32 B PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var parameter 32 C PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var parameter 32 D PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
b00000000000000000000000000000011 C
b00000000000000000000000000000010 B
b00000000000000000000000000000100 A
0@
b00000000000000000000000000000011 D
b00000000000000000000000000000010 C
b00000000000000000000000000000100 B
0A
b00000000 @
b00000000 ?
b00000000 >
b00000000 =
b000000 <
b000 ;
b000000 =
b000 <
b00000000000000000000000000000000 ;
b00000000000000000000000000000000 :
b00000000000000000000000000000000 9
b0000000000000000000000000000000000000000000000000000000011111111 8
b0000000000000000000000000000000000000000000000000000000000000000 7
b0000000000000000000000000000000000000000000000000000000011111111 9
b0000000000000000000000000000000000000000000000000000000000000000 8
r0 7
r0 6
r0 5
r0 4
b00 4
b00 3
b00 2
b00 1
b00 0
00
0/
0.
0-
0,
0+
0*
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000000 #
1"
@ -128,134 +134,140 @@ $end
1!
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.1 4
r0.2 5
r0.3 6
b0000000000000000000000000000000100000000000000000000000011111110 8
b00000000000000000000000000000001 9
b00000000000000000000000000000010 :
b111 ;
b11 4
r0.1 5
r0.2 6
r0.3 7
b0000000000000000000000000000000100000000000000000000000011111110 9
b00000000000000000000000000000001 :
b00000000000000000000000000000010 ;
b111 <
#15
0!
#20
1!
b110 ;
b00000000000000000000000000000100 :
b00000000000000000000000000000010 9
b0000000000000000000000000000001000000000000000000000000011111101 8
r0.6 6
r0.4 5
r0.2 4
b110 <
b00000000000000000000000000000100 ;
b00000000000000000000000000000010 :
b0000000000000000000000000000001000000000000000000000000011111101 9
r0.6 7
r0.4 6
r0.2 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000010 #
b111111 <
b111111 =
#25
0!
#30
1!
b110110 <
b110110 =
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.3 4
r0.6000000000000001 5
r0.8999999999999999 6
b0000000000000000000000000000001100000000000000000000000011111100 8
b00000000000000000000000000000011 9
b00000000000000000000000000000110 :
b101 ;
b11 4
r0.3 5
r0.6000000000000001 6
r0.8999999999999999 7
b0000000000000000000000000000001100000000000000000000000011111100 9
b00000000000000000000000000000011 :
b00000000000000000000000000000110 ;
b101 <
#35
0!
#40
1!
b100 ;
b00000000000000000000000000001000 :
b00000000000000000000000000000100 9
b0000000000000000000000000000010000000000000000000000000011111011 8
r1.2 6
r0.8 5
r0.4 4
b100 <
b00000000000000000000000000001000 ;
b00000000000000000000000000000100 :
b0000000000000000000000000000010000000000000000000000000011111011 9
r1.2 7
r0.8 6
r0.4 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000100 #
b101101 <
b101101 =
#45
0!
#50
1!
b100100 <
b100100 =
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.5 4
r1 5
r1.5 6
b0000000000000000000000000000010100000000000000000000000011111010 8
b00000000000000000000000000000101 9
b00000000000000000000000000001010 :
b011 ;
b11 4
r0.5 5
r1 6
r1.5 7
b0000000000000000000000000000010100000000000000000000000011111010 9
b00000000000000000000000000000101 :
b00000000000000000000000000001010 ;
b011 <
#55
0!
#60
1!
b010 ;
b00000000000000000000000000001100 :
b00000000000000000000000000000110 9
b0000000000000000000000000000011000000000000000000000000011111001 8
r1.8 6
r1.2 5
r0.6 4
b010 <
b00000000000000000000000000001100 ;
b00000000000000000000000000000110 :
b0000000000000000000000000000011000000000000000000000000011111001 9
r1.8 7
r1.2 6
r0.6 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000110 #
b011011 <
b011011 =

View File

@ -52,6 +52,8 @@
(cyc\[31\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_strp\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp2\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp2\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp_strp\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp_strp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp_strp\[2\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
@ -68,20 +70,20 @@
(v_arrp_strp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_strp\[2\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_strp\[3\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru[1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru[2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[4][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru[1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[4][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arru[4][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arrp[4]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[4]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[4]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[4]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_real\[0\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_real\[1\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_real\[2\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))

View File

@ -1,51 +1,52 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 : clk $end
$var wire 1 ; clk $end
$scope module $unit $end
$var wire 1 " global_bit $end
$upscope $end
$scope module t $end
$var wire 1 : clk $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 2 % v_strp2 [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[2] $end
$var wire 1 = v_arru_arru[3][1] $end
$var wire 1 > v_arru_arru[3][2] $end
$var wire 1 = v_arru[1] $end
$var wire 1 > v_arru_arru[4][2] $end
$var wire 1 ? v_arru_arru[4][1] $end
$var wire 1 @ v_arru_arru[4][2] $end
$var wire 2 * v_arru_arrp[3] [2:1] $end
$var wire 1 @ v_arru_arru[3][2] $end
$var wire 1 A v_arru_arru[3][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_arrp[3] [2:1] $end
$var wire 2 - v_arru_strp[4] [1:0] $end
$var real 64 . v_real $end
$var real 64 0 v_arr_real[0] $end
$var real 64 2 v_arr_real[1] $end
$var wire 64 A v_chandle [63:0] $end
$var wire 64 4 v_str32x2 [63:0] $end
$var wire 32 6 v_enumed [31:0] $end
$var wire 32 7 v_enumed2 [31:0] $end
$var wire 3 8 v_enumb [2:0] $end
$var wire 6 9 v_enumb2_str [5:0] $end
$var wire 8 C unpacked_array[-2] [7:0] $end
$var wire 8 D unpacked_array[-1] [7:0] $end
$var wire 8 E unpacked_array[0] [7:0] $end
$var wire 1 F LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var wire 2 . v_arru_strp[3] [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 B v_chandle [63: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 D unpacked_array[-2] [7:0] $end
$var wire 8 E unpacked_array[-1] [7:0] $end
$var wire 8 F unpacked_array[0] [7:0] $end
$var wire 1 G LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var wire 32 G PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var wire 32 H PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var wire 32 I PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var wire 32 J PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
@ -55,170 +56,177 @@ $enddefinitions $end
1"
b00000000000000000000000000000000 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0 .
r0 0
r0 2
b0000000000000000000000000000000000000000000000000000000011111111 4
b00000000000000000000000000000000 6
b00 .
r0 /
r0 1
r0 3
b0000000000000000000000000000000000000000000000000000000011111111 5
b00000000000000000000000000000000 7
b000 8
b000000 9
0:
b00000000000000000000000000000000 8
b000 9
b000000 :
0;
0<
0=
0>
0?
0@
b0000000000000000000000000000000000000000000000000000000000000000 A
b00000000 C
0A
b0000000000000000000000000000000000000000000000000000000000000000 B
b00000000 D
b00000000 E
0F
b00000000000000000000000000000100 G
b00000000000000000000000000000010 H
b00000000000000000000000000000011 I
b00000000 F
0G
b00000000000000000000000000000100 H
b00000000000000000000000000000010 I
b00000000000000000000000000000011 J
#10
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.1 .
r0.2 0
r0.3 2
b0000000000000000000000000000000100000000000000000000000011111110 4
b00000000000000000000000000000001 6
b00000000000000000000000000000010 7
b111 8
1:
b11 .
r0.1 /
r0.2 1
r0.3 3
b0000000000000000000000000000000100000000000000000000000011111110 5
b00000000000000000000000000000001 7
b00000000000000000000000000000010 8
b111 9
1;
#15
0:
0;
#20
b00000000000000000000000000000010 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.2 .
r0.4 0
r0.6 2
b0000000000000000000000000000001000000000000000000000000011111101 4
b00000000000000000000000000000010 6
b00000000000000000000000000000100 7
b110 8
b111111 9
1:
b00 .
r0.2 /
r0.4 1
r0.6 3
b0000000000000000000000000000001000000000000000000000000011111101 5
b00000000000000000000000000000010 7
b00000000000000000000000000000100 8
b110 9
b111111 :
1;
#25
0:
0;
#30
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.3 .
r0.6000000000000001 0
r0.8999999999999999 2
b0000000000000000000000000000001100000000000000000000000011111100 4
b00000000000000000000000000000011 6
b00000000000000000000000000000110 7
b101 8
b110110 9
1:
b11 .
r0.3 /
r0.6000000000000001 1
r0.8999999999999999 3
b0000000000000000000000000000001100000000000000000000000011111100 5
b00000000000000000000000000000011 7
b00000000000000000000000000000110 8
b101 9
b110110 :
1;
#35
0:
0;
#40
b00000000000000000000000000000100 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.4 .
r0.8 0
r1.2 2
b0000000000000000000000000000010000000000000000000000000011111011 4
b00000000000000000000000000000100 6
b00000000000000000000000000001000 7
b100 8
b101101 9
1:
b00 .
r0.4 /
r0.8 1
r1.2 3
b0000000000000000000000000000010000000000000000000000000011111011 5
b00000000000000000000000000000100 7
b00000000000000000000000000001000 8
b100 9
b101101 :
1;
#45
0:
0;
#50
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.5 .
r1 0
r1.5 2
b0000000000000000000000000000010100000000000000000000000011111010 4
b00000000000000000000000000000101 6
b00000000000000000000000000001010 7
b011 8
b100100 9
1:
b11 .
r0.5 /
r1 1
r1.5 3
b0000000000000000000000000000010100000000000000000000000011111010 5
b00000000000000000000000000000101 7
b00000000000000000000000000001010 8
b011 9
b100100 :
1;
#55
0:
0;
#60
b00000000000000000000000000000110 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.6 .
r1.2 0
r1.8 2
b0000000000000000000000000000011000000000000000000000000011111001 4
b00000000000000000000000000000110 6
b00000000000000000000000000001100 7
b010 8
b011011 9
1:
b00 .
r0.6 /
r1.2 1
r1.8 3
b0000000000000000000000000000011000000000000000000000000011111001 5
b00000000000000000000000000000110 7
b00000000000000000000000000001100 8
b010 9
b011011 :
1;

View File

@ -1,5 +1,9 @@
$date
Sat Mar 14 09:16:46 2026
<<<<<<< HEAD
Tue Apr 14 15:20:39 2026
=======
Tue Mar 31 17:14:34 2026
>>>>>>> 8895f96e4 (CR)
$end
$version
@ -18,106 +22,108 @@ $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
$var bit 2 & v_unip_strp [1:0] $end
$var bit 2 ' v_arrp [2:1] $end
$var bit 4 ( v_arrp_arrp [3:0] $end
$var bit 4 ) v_arrp_strp [3:0] $end
$var bit 2 % v_strp2 [1:0] $end
$var bit 4 & v_strp_strp [3:0] $end
$var bit 2 ' v_unip_strp [1:0] $end
$var bit 2 ( v_arrp [2:1] $end
$var bit 4 ) v_arrp_arrp [3:0] $end
$var bit 4 * v_arrp_strp [3:0] $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array v_arru $end
$var bit 1 * v_arru[2] $end
$var bit 1 + v_arru[1] $end
$var bit 1 + v_arru[2] $end
$var bit 1 , v_arru[1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arru $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [4] $end
$var bit 1 , v_arru_arru[4][2] $end
$var bit 1 - v_arru_arru[4][1] $end
$var bit 1 - v_arru_arru[4][2] $end
$var bit 1 . v_arru_arru[4][1] $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [3] $end
$var bit 1 . v_arru_arru[3][2] $end
$var bit 1 / v_arru_arru[3][1] $end
$var bit 1 / v_arru_arru[3][2] $end
$var bit 1 0 v_arru_arru[3][1] $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arrp $end
$var bit 2 0 v_arru_arrp[4] [2:1] $end
$var bit 2 1 v_arru_arrp[3] [2:1] $end
$var bit 2 1 v_arru_arrp[4] [2:1] $end
$var bit 2 2 v_arru_arrp[3] [2:1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_strp $end
$var bit 2 2 v_arru_strp[4] [1:0] $end
$var bit 2 3 v_arru_strp[3] [1:0] $end
$var bit 2 3 v_arru_strp[4] [1:0] $end
$var bit 2 4 v_arru_strp[3] [1:0] $end
$upscope $end
$var real 64 4 v_real $end
$var real 64 5 v_real $end
$attrbegin array unpacked bounds 1 $end
$scope sv_array v_arr_real $end
$var real 64 5 v_arr_real[0] $end
$var real 64 6 v_arr_real[1] $end
$var real 64 6 v_arr_real[0] $end
$var real 64 7 v_arr_real[1] $end
$upscope $end
$var longint 64 7 v_chandle [63:0] $end
$var logic 64 8 v_str32x2 [63:0] $end
$var longint 64 8 v_chandle [63:0] $end
$var logic 64 9 v_str32x2 [63:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 9 v_enumed [31:0] $end
$var int 32 : v_enumed [31:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 : v_enumed2 [31:0] $end
$var int 32 ; v_enumed2 [31:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 ; v_enumb [2:0] $end
$var logic 6 < v_enumb2_str [5:0] $end
$var logic 3 < v_enumb [2:0] $end
$var logic 6 = v_enumb2_str [5:0] $end
$attrbegin array unpacked bounds -8589934592 $end
$scope sv_array unpacked_array $end
$var logic 8 = unpacked_array[-2] [7:0] $end
$var logic 8 > unpacked_array[-1] [7:0] $end
$var logic 8 ? unpacked_array[0] [7:0] $end
$var logic 8 > unpacked_array[-2] [7:0] $end
$var logic 8 ? unpacked_array[-1] [7:0] $end
$var logic 8 @ unpacked_array[0] [7:0] $end
$upscope $end
$var bit 1 @ LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var bit 1 A LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var parameter 32 A PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var parameter 32 B PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var parameter 32 C PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var parameter 32 D PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
b00000000000000000000000000000011 C
b00000000000000000000000000000010 B
b00000000000000000000000000000100 A
0@
b00000000000000000000000000000011 D
b00000000000000000000000000000010 C
b00000000000000000000000000000100 B
0A
b00000000 @
b00000000 ?
b00000000 >
b00000000 =
b000000 <
b000 ;
b000000 =
b000 <
b00000000000000000000000000000000 ;
b00000000000000000000000000000000 :
b00000000000000000000000000000000 9
b0000000000000000000000000000000000000000000000000000000011111111 8
b0000000000000000000000000000000000000000000000000000000000000000 7
b0000000000000000000000000000000000000000000000000000000011111111 9
b0000000000000000000000000000000000000000000000000000000000000000 8
r0 7
r0 6
r0 5
r0 4
b00 4
b00 3
b00 2
b00 1
b00 0
00
0/
0.
0-
0,
0+
0*
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000000 #
0"
@ -127,135 +133,141 @@ $end
1"
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.1 4
r0.2 5
r0.3 6
b0000000000000000000000000000000100000000000000000000000011111110 8
b00000000000000000000000000000001 9
b00000000000000000000000000000010 :
b111 ;
b11 4
r0.1 5
r0.2 6
r0.3 7
b0000000000000000000000000000000100000000000000000000000011111110 9
b00000000000000000000000000000001 :
b00000000000000000000000000000010 ;
b111 <
#15
0"
#20
1"
b110 ;
b00000000000000000000000000000100 :
b00000000000000000000000000000010 9
b0000000000000000000000000000001000000000000000000000000011111101 8
r0.6 6
r0.4 5
r0.2 4
b110 <
b00000000000000000000000000000100 ;
b00000000000000000000000000000010 :
b0000000000000000000000000000001000000000000000000000000011111101 9
r0.6 7
r0.4 6
r0.2 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000010 #
b111111 <
b111111 =
#25
0"
#30
1"
b110110 <
b110110 =
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.3 4
r0.6000000000000001 5
r0.8999999999999999 6
b0000000000000000000000000000001100000000000000000000000011111100 8
b00000000000000000000000000000011 9
b00000000000000000000000000000110 :
b101 ;
b11 4
r0.3 5
r0.6000000000000001 6
r0.8999999999999999 7
b0000000000000000000000000000001100000000000000000000000011111100 9
b00000000000000000000000000000011 :
b00000000000000000000000000000110 ;
b101 <
#35
0"
#40
1"
b100 ;
b00000000000000000000000000001000 :
b00000000000000000000000000000100 9
b0000000000000000000000000000010000000000000000000000000011111011 8
r1.2 6
r0.8 5
r0.4 4
b100 <
b00000000000000000000000000001000 ;
b00000000000000000000000000000100 :
b0000000000000000000000000000010000000000000000000000000011111011 9
r1.2 7
r0.8 6
r0.4 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000100 #
b101101 <
b101101 =
#45
0"
#50
1"
b100100 <
b100100 =
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.5 4
r1 5
r1.5 6
b0000000000000000000000000000010100000000000000000000000011111010 8
b00000000000000000000000000000101 9
b00000000000000000000000000001010 :
b011 ;
b11 4
r0.5 5
r1 6
r1.5 7
b0000000000000000000000000000010100000000000000000000000011111010 9
b00000000000000000000000000000101 :
b00000000000000000000000000001010 ;
b011 <
#55
0"
#60
1"
b010 ;
b00000000000000000000000000001100 :
b00000000000000000000000000000110 9
b0000000000000000000000000000011000000000000000000000000011111001 8
r1.8 6
r1.2 5
r0.6 4
b010 <
b00000000000000000000000000001100 ;
b00000000000000000000000000000110 :
b0000000000000000000000000000011000000000000000000000000011111001 9
r1.8 7
r1.2 6
r0.6 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000110 #
b011011 <
b011011 =
#64

View File

@ -5,46 +5,47 @@ $timescale 1ps $end
$var wire 1 " global_bit $end
$upscope $end
$scope module t $end
$var wire 1 : clk $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[2] $end
$var wire 1 < v_arru[1] $end
$var wire 1 = v_arru_arru[4][2] $end
$var wire 1 > v_arru_arru[4][1] $end
$var wire 1 ? v_arru_arru[3][2] $end
$var wire 1 @ v_arru_arru[3][1] $end
$var wire 2 * v_arru_arrp[4] [2:1] $end
$var wire 2 + v_arru_arrp[3] [2:1] $end
$var wire 2 , v_arru_strp[4] [1:0] $end
$var wire 2 - v_arru_strp[3] [1:0] $end
$var real 64 . v_real $end
$var real 64 0 v_arr_real[0] $end
$var real 64 2 v_arr_real[1] $end
$var wire 64 A v_chandle [63:0] $end
$var wire 64 4 v_str32x2 [63:0] $end
$var wire 32 6 v_enumed [31:0] $end
$var wire 32 7 v_enumed2 [31:0] $end
$var wire 3 8 v_enumb [2:0] $end
$var wire 6 9 v_enumb2_str [5:0] $end
$var wire 8 C unpacked_array[-2] [7:0] $end
$var wire 8 D unpacked_array[-1] [7:0] $end
$var wire 8 E unpacked_array[0] [7:0] $end
$var wire 1 F LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var wire 2 % v_strp2 [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[2] $end
$var wire 1 = v_arru[1] $end
$var wire 1 > v_arru_arru[4][2] $end
$var wire 1 ? v_arru_arru[4][1] $end
$var wire 1 @ v_arru_arru[3][2] $end
$var wire 1 A v_arru_arru[3][1] $end
$var wire 2 + v_arru_arrp[4] [2:1] $end
$var wire 2 , v_arru_arrp[3] [2:1] $end
$var wire 2 - v_arru_strp[4] [1:0] $end
$var wire 2 . v_arru_strp[3] [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 B v_chandle [63: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 D unpacked_array[-2] [7:0] $end
$var wire 8 E unpacked_array[-1] [7:0] $end
$var wire 8 F unpacked_array[0] [7:0] $end
$var wire 1 G LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var wire 32 G PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var wire 32 H PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var wire 32 I PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var wire 32 J PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
@ -54,171 +55,178 @@ $enddefinitions $end
1"
b00000000000000000000000000000000 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0 .
r0 0
r0 2
b0000000000000000000000000000000000000000000000000000000011111111 4
b00000000000000000000000000000000 6
b00 .
r0 /
r0 1
r0 3
b0000000000000000000000000000000000000000000000000000000011111111 5
b00000000000000000000000000000000 7
b000 8
b000000 9
0:
b00000000000000000000000000000000 8
b000 9
b000000 :
0;
0<
0=
0>
0?
0@
b0000000000000000000000000000000000000000000000000000000000000000 A
b00000000 C
0A
b0000000000000000000000000000000000000000000000000000000000000000 B
b00000000 D
b00000000 E
0F
b00000000000000000000000000000100 G
b00000000000000000000000000000010 H
b00000000000000000000000000000011 I
b00000000 F
0G
b00000000000000000000000000000100 H
b00000000000000000000000000000010 I
b00000000000000000000000000000011 J
#10
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.1 .
r0.2 0
r0.3 2
b0000000000000000000000000000000100000000000000000000000011111110 4
b00000000000000000000000000000001 6
b00000000000000000000000000000010 7
b111 8
1:
b11 .
r0.1 /
r0.2 1
r0.3 3
b0000000000000000000000000000000100000000000000000000000011111110 5
b00000000000000000000000000000001 7
b00000000000000000000000000000010 8
b111 9
1;
#15
0:
0;
#20
b00000000000000000000000000000010 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.2 .
r0.4 0
r0.6 2
b0000000000000000000000000000001000000000000000000000000011111101 4
b00000000000000000000000000000010 6
b00000000000000000000000000000100 7
b110 8
b111111 9
1:
b00 .
r0.2 /
r0.4 1
r0.6 3
b0000000000000000000000000000001000000000000000000000000011111101 5
b00000000000000000000000000000010 7
b00000000000000000000000000000100 8
b110 9
b111111 :
1;
#25
0:
0;
#30
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.3 .
r0.6000000000000001 0
r0.8999999999999999 2
b0000000000000000000000000000001100000000000000000000000011111100 4
b00000000000000000000000000000011 6
b00000000000000000000000000000110 7
b101 8
b110110 9
1:
b11 .
r0.3 /
r0.6000000000000001 1
r0.8999999999999999 3
b0000000000000000000000000000001100000000000000000000000011111100 5
b00000000000000000000000000000011 7
b00000000000000000000000000000110 8
b101 9
b110110 :
1;
#35
0:
0;
#40
b00000000000000000000000000000100 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.4 .
r0.8 0
r1.2 2
b0000000000000000000000000000010000000000000000000000000011111011 4
b00000000000000000000000000000100 6
b00000000000000000000000000001000 7
b100 8
b101101 9
1:
b00 .
r0.4 /
r0.8 1
r1.2 3
b0000000000000000000000000000010000000000000000000000000011111011 5
b00000000000000000000000000000100 7
b00000000000000000000000000001000 8
b100 9
b101101 :
1;
#45
0:
0;
#50
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.5 .
r1 0
r1.5 2
b0000000000000000000000000000010100000000000000000000000011111010 4
b00000000000000000000000000000101 6
b00000000000000000000000000001010 7
b011 8
b100100 9
1:
b11 .
r0.5 /
r1 1
r1.5 3
b0000000000000000000000000000010100000000000000000000000011111010 5
b00000000000000000000000000000101 7
b00000000000000000000000000001010 8
b011 9
b100100 :
1;
#55
0:
0;
#60
b00000000000000000000000000000110 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.6 .
r1.2 0
r1.8 2
b0000000000000000000000000000011000000000000000000000000011111001 4
b00000000000000000000000000000110 6
b00000000000000000000000000001100 7
b010 8
b011011 9
1:
b00 .
r0.6 /
r1.2 1
r1.8 3
b0000000000000000000000000000011000000000000000000000000011111001 5
b00000000000000000000000000000110 7
b00000000000000000000000000001100 8
b010 9
b011011 :
1;
#64

View File

@ -1,5 +1,9 @@
$date
Sat Mar 14 09:16:42 2026
<<<<<<< HEAD
Tue Apr 14 15:20:39 2026
=======
Tue Mar 31 17:14:36 2026
>>>>>>> 8895f96e4 (CR)
$end
$version
@ -19,106 +23,108 @@ $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
$var bit 2 & v_unip_strp [1:0] $end
$var bit 2 ' v_arrp [2:1] $end
$var bit 4 ( v_arrp_arrp [3:0] $end
$var bit 4 ) v_arrp_strp [3:0] $end
$var bit 2 % v_strp2 [1:0] $end
$var bit 4 & v_strp_strp [3:0] $end
$var bit 2 ' v_unip_strp [1:0] $end
$var bit 2 ( v_arrp [2:1] $end
$var bit 4 ) v_arrp_arrp [3:0] $end
$var bit 4 * v_arrp_strp [3:0] $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array v_arru $end
$var bit 1 * v_arru[2] $end
$var bit 1 + v_arru[1] $end
$var bit 1 + v_arru[2] $end
$var bit 1 , v_arru[1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arru $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [4] $end
$var bit 1 , v_arru_arru[4][2] $end
$var bit 1 - v_arru_arru[4][1] $end
$var bit 1 - v_arru_arru[4][2] $end
$var bit 1 . v_arru_arru[4][1] $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [3] $end
$var bit 1 . v_arru_arru[3][2] $end
$var bit 1 / v_arru_arru[3][1] $end
$var bit 1 / v_arru_arru[3][2] $end
$var bit 1 0 v_arru_arru[3][1] $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arrp $end
$var bit 2 0 v_arru_arrp[4] [2:1] $end
$var bit 2 1 v_arru_arrp[3] [2:1] $end
$var bit 2 1 v_arru_arrp[4] [2:1] $end
$var bit 2 2 v_arru_arrp[3] [2:1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_strp $end
$var bit 2 2 v_arru_strp[4] [1:0] $end
$var bit 2 3 v_arru_strp[3] [1:0] $end
$var bit 2 3 v_arru_strp[4] [1:0] $end
$var bit 2 4 v_arru_strp[3] [1:0] $end
$upscope $end
$var real 64 4 v_real $end
$var real 64 5 v_real $end
$attrbegin array unpacked bounds 1 $end
$scope sv_array v_arr_real $end
$var real 64 5 v_arr_real[0] $end
$var real 64 6 v_arr_real[1] $end
$var real 64 6 v_arr_real[0] $end
$var real 64 7 v_arr_real[1] $end
$upscope $end
$var longint 64 7 v_chandle [63:0] $end
$var logic 64 8 v_str32x2 [63:0] $end
$var longint 64 8 v_chandle [63:0] $end
$var logic 64 9 v_str32x2 [63:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 9 v_enumed [31:0] $end
$var int 32 : v_enumed [31:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 : v_enumed2 [31:0] $end
$var int 32 ; v_enumed2 [31:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 ; v_enumb [2:0] $end
$var logic 6 < v_enumb2_str [5:0] $end
$var logic 3 < v_enumb [2:0] $end
$var logic 6 = v_enumb2_str [5:0] $end
$attrbegin array unpacked bounds -8589934592 $end
$scope sv_array unpacked_array $end
$var logic 8 = unpacked_array[-2] [7:0] $end
$var logic 8 > unpacked_array[-1] [7:0] $end
$var logic 8 ? unpacked_array[0] [7:0] $end
$var logic 8 > unpacked_array[-2] [7:0] $end
$var logic 8 ? unpacked_array[-1] [7:0] $end
$var logic 8 @ unpacked_array[0] [7:0] $end
$upscope $end
$var bit 1 @ LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var bit 1 A LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var parameter 32 A PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var parameter 32 B PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var parameter 32 C PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var parameter 32 D PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
b00000000000000000000000000000011 C
b00000000000000000000000000000010 B
b00000000000000000000000000000100 A
0@
b00000000000000000000000000000011 D
b00000000000000000000000000000010 C
b00000000000000000000000000000100 B
0A
b00000000 @
b00000000 ?
b00000000 >
b00000000 =
b000000 <
b000 ;
b000000 =
b000 <
b00000000000000000000000000000000 ;
b00000000000000000000000000000000 :
b00000000000000000000000000000000 9
b0000000000000000000000000000000000000000000000000000000011111111 8
b0000000000000000000000000000000000000000000000000000000000000000 7
b0000000000000000000000000000000000000000000000000000000011111111 9
b0000000000000000000000000000000000000000000000000000000000000000 8
r0 7
r0 6
r0 5
r0 4
b00 4
b00 3
b00 2
b00 1
b00 0
00
0/
0.
0-
0,
0+
0*
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000000 #
1"
@ -128,134 +134,140 @@ $end
1!
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.1 4
r0.2 5
r0.3 6
b0000000000000000000000000000000100000000000000000000000011111110 8
b00000000000000000000000000000001 9
b00000000000000000000000000000010 :
b111 ;
b11 4
r0.1 5
r0.2 6
r0.3 7
b0000000000000000000000000000000100000000000000000000000011111110 9
b00000000000000000000000000000001 :
b00000000000000000000000000000010 ;
b111 <
#15
0!
#20
1!
b110 ;
b00000000000000000000000000000100 :
b00000000000000000000000000000010 9
b0000000000000000000000000000001000000000000000000000000011111101 8
r0.6 6
r0.4 5
r0.2 4
b110 <
b00000000000000000000000000000100 ;
b00000000000000000000000000000010 :
b0000000000000000000000000000001000000000000000000000000011111101 9
r0.6 7
r0.4 6
r0.2 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000010 #
b111111 <
b111111 =
#25
0!
#30
1!
b110110 <
b110110 =
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.3 4
r0.6000000000000001 5
r0.8999999999999999 6
b0000000000000000000000000000001100000000000000000000000011111100 8
b00000000000000000000000000000011 9
b00000000000000000000000000000110 :
b101 ;
b11 4
r0.3 5
r0.6000000000000001 6
r0.8999999999999999 7
b0000000000000000000000000000001100000000000000000000000011111100 9
b00000000000000000000000000000011 :
b00000000000000000000000000000110 ;
b101 <
#35
0!
#40
1!
b100 ;
b00000000000000000000000000001000 :
b00000000000000000000000000000100 9
b0000000000000000000000000000010000000000000000000000000011111011 8
r1.2 6
r0.8 5
r0.4 4
b100 <
b00000000000000000000000000001000 ;
b00000000000000000000000000000100 :
b0000000000000000000000000000010000000000000000000000000011111011 9
r1.2 7
r0.8 6
r0.4 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000100 #
b101101 <
b101101 =
#45
0!
#50
1!
b100100 <
b100100 =
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.5 4
r1 5
r1.5 6
b0000000000000000000000000000010100000000000000000000000011111010 8
b00000000000000000000000000000101 9
b00000000000000000000000000001010 :
b011 ;
b11 4
r0.5 5
r1 6
r1.5 7
b0000000000000000000000000000010100000000000000000000000011111010 9
b00000000000000000000000000000101 :
b00000000000000000000000000001010 ;
b011 <
#55
0!
#60
1!
b010 ;
b00000000000000000000000000001100 :
b00000000000000000000000000000110 9
b0000000000000000000000000000011000000000000000000000000011111001 8
r1.8 6
r1.2 5
r0.6 4
b010 <
b00000000000000000000000000001100 ;
b00000000000000000000000000000110 :
b0000000000000000000000000000011000000000000000000000000011111001 9
r1.8 7
r1.2 6
r0.6 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000110 #
b011011 <
b011011 =

View File

@ -52,6 +52,8 @@
(cyc\[31\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_strp\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp2\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp2\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp_strp\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp_strp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_strp_strp\[2\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
@ -68,20 +70,20 @@
(v_arrp_strp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_strp\[2\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_strp\[3\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru[1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru[2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[4][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru[1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[4][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arru[4][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arrp[4]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[4]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[4]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[4]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_strp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_real\[0\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_real\[1\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_real\[2\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))

View File

@ -1,44 +1,45 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 : clk $end
$var wire 1 ; clk $end
$scope module $unit $end
$var wire 1 " global_bit $end
$upscope $end
$scope module t $end
$var wire 1 : clk $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 2 % v_strp2 [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[2] $end
$var wire 1 = v_arru_arru[3][1] $end
$var wire 1 > v_arru_arru[3][2] $end
$var wire 1 = v_arru[1] $end
$var wire 1 > v_arru_arru[4][2] $end
$var wire 1 ? v_arru_arru[4][1] $end
$var wire 1 @ v_arru_arru[4][2] $end
$var wire 2 * v_arru_arrp[3] [2:1] $end
$var wire 1 @ v_arru_arru[3][2] $end
$var wire 1 A v_arru_arru[3][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_arrp[3] [2:1] $end
$var wire 2 - v_arru_strp[4] [1:0] $end
$var real 64 . v_real $end
$var real 64 0 v_arr_real[0] $end
$var real 64 2 v_arr_real[1] $end
$var wire 64 A v_chandle [63:0] $end
$var wire 64 4 v_str32x2 [63:0] $end
$var wire 32 6 v_enumed [31:0] $end
$var wire 32 7 v_enumed2 [31:0] $end
$var wire 3 8 v_enumb [2:0] $end
$var wire 6 9 v_enumb2_str [5:0] $end
$var wire 8 C unpacked_array[-2] [7:0] $end
$var wire 8 D unpacked_array[-1] [7:0] $end
$var wire 8 E unpacked_array[0] [7:0] $end
$var wire 1 F LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var wire 2 . v_arru_strp[3] [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 B v_chandle [63: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 D unpacked_array[-2] [7:0] $end
$var wire 8 E unpacked_array[-1] [7:0] $end
$var wire 8 F unpacked_array[0] [7:0] $end
$var wire 1 G LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var wire 32 G PARAM [31:0] $end
$var wire 32 J PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var wire 32 H PARAM [31:0] $end
@ -55,170 +56,177 @@ $enddefinitions $end
1"
b00000000000000000000000000000000 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0 .
r0 0
r0 2
b0000000000000000000000000000000000000000000000000000000011111111 4
b00000000000000000000000000000000 6
b00 .
r0 /
r0 1
r0 3
b0000000000000000000000000000000000000000000000000000000011111111 5
b00000000000000000000000000000000 7
b000 8
b000000 9
0:
b00000000000000000000000000000000 8
b000 9
b000000 :
0;
0<
0=
0>
0?
0@
b0000000000000000000000000000000000000000000000000000000000000000 A
b00000000 C
0A
b0000000000000000000000000000000000000000000000000000000000000000 B
b00000000 D
b00000000 E
0F
b00000000000000000000000000000100 G
b00000000 F
0G
b00000000000000000000000000000010 H
b00000000000000000000000000000011 I
b00000000000000000000000000000100 J
#10
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.1 .
r0.2 0
r0.3 2
b0000000000000000000000000000000100000000000000000000000011111110 4
b00000000000000000000000000000001 6
b00000000000000000000000000000010 7
b111 8
1:
b11 .
r0.1 /
r0.2 1
r0.3 3
b0000000000000000000000000000000100000000000000000000000011111110 5
b00000000000000000000000000000001 7
b00000000000000000000000000000010 8
b111 9
1;
#15
0:
0;
#20
b00000000000000000000000000000010 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.2 .
r0.4 0
r0.6 2
b0000000000000000000000000000001000000000000000000000000011111101 4
b00000000000000000000000000000010 6
b00000000000000000000000000000100 7
b110 8
b111111 9
1:
b00 .
r0.2 /
r0.4 1
r0.6 3
b0000000000000000000000000000001000000000000000000000000011111101 5
b00000000000000000000000000000010 7
b00000000000000000000000000000100 8
b110 9
b111111 :
1;
#25
0:
0;
#30
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.3 .
r0.6000000000000001 0
r0.8999999999999999 2
b0000000000000000000000000000001100000000000000000000000011111100 4
b00000000000000000000000000000011 6
b00000000000000000000000000000110 7
b101 8
b110110 9
1:
b11 .
r0.3 /
r0.6000000000000001 1
r0.8999999999999999 3
b0000000000000000000000000000001100000000000000000000000011111100 5
b00000000000000000000000000000011 7
b00000000000000000000000000000110 8
b101 9
b110110 :
1;
#35
0:
0;
#40
b00000000000000000000000000000100 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.4 .
r0.8 0
r1.2 2
b0000000000000000000000000000010000000000000000000000000011111011 4
b00000000000000000000000000000100 6
b00000000000000000000000000001000 7
b100 8
b101101 9
1:
b00 .
r0.4 /
r0.8 1
r1.2 3
b0000000000000000000000000000010000000000000000000000000011111011 5
b00000000000000000000000000000100 7
b00000000000000000000000000001000 8
b100 9
b101101 :
1;
#45
0:
0;
#50
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.5 .
r1 0
r1.5 2
b0000000000000000000000000000010100000000000000000000000011111010 4
b00000000000000000000000000000101 6
b00000000000000000000000000001010 7
b011 8
b100100 9
1:
b11 .
r0.5 /
r1 1
r1.5 3
b0000000000000000000000000000010100000000000000000000000011111010 5
b00000000000000000000000000000101 7
b00000000000000000000000000001010 8
b011 9
b100100 :
1;
#55
0:
0;
#60
b00000000000000000000000000000110 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.6 .
r1.2 0
r1.8 2
b0000000000000000000000000000011000000000000000000000000011111001 4
b00000000000000000000000000000110 6
b00000000000000000000000000001100 7
b010 8
b011011 9
1:
b00 .
r0.6 /
r1.2 1
r1.8 3
b0000000000000000000000000000011000000000000000000000000011111001 5
b00000000000000000000000000000110 7
b00000000000000000000000000001100 8
b010 9
b011011 :
1;

View File

@ -1,5 +1,9 @@
$date
Sat Mar 14 09:17:23 2026
<<<<<<< HEAD
Tue Apr 14 15:20:41 2026
=======
Tue Mar 31 17:14:39 2026
>>>>>>> 8895f96e4 (CR)
$end
$version
@ -18,106 +22,108 @@ $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
$var bit 2 & v_unip_strp [1:0] $end
$var bit 2 ' v_arrp [2:1] $end
$var bit 4 ( v_arrp_arrp [3:0] $end
$var bit 4 ) v_arrp_strp [3:0] $end
$var bit 2 % v_strp2 [1:0] $end
$var bit 4 & v_strp_strp [3:0] $end
$var bit 2 ' v_unip_strp [1:0] $end
$var bit 2 ( v_arrp [2:1] $end
$var bit 4 ) v_arrp_arrp [3:0] $end
$var bit 4 * v_arrp_strp [3:0] $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array v_arru $end
$var bit 1 * v_arru[2] $end
$var bit 1 + v_arru[1] $end
$var bit 1 + v_arru[2] $end
$var bit 1 , v_arru[1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arru $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [4] $end
$var bit 1 , v_arru_arru[4][2] $end
$var bit 1 - v_arru_arru[4][1] $end
$var bit 1 - v_arru_arru[4][2] $end
$var bit 1 . v_arru_arru[4][1] $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [3] $end
$var bit 1 . v_arru_arru[3][2] $end
$var bit 1 / v_arru_arru[3][1] $end
$var bit 1 / v_arru_arru[3][2] $end
$var bit 1 0 v_arru_arru[3][1] $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arrp $end
$var bit 2 0 v_arru_arrp[4] [2:1] $end
$var bit 2 1 v_arru_arrp[3] [2:1] $end
$var bit 2 1 v_arru_arrp[4] [2:1] $end
$var bit 2 2 v_arru_arrp[3] [2:1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_strp $end
$var bit 2 2 v_arru_strp[4] [1:0] $end
$var bit 2 3 v_arru_strp[3] [1:0] $end
$var bit 2 3 v_arru_strp[4] [1:0] $end
$var bit 2 4 v_arru_strp[3] [1:0] $end
$upscope $end
$var real 64 4 v_real $end
$var real 64 5 v_real $end
$attrbegin array unpacked bounds 1 $end
$scope sv_array v_arr_real $end
$var real 64 5 v_arr_real[0] $end
$var real 64 6 v_arr_real[1] $end
$var real 64 6 v_arr_real[0] $end
$var real 64 7 v_arr_real[1] $end
$upscope $end
$var longint 64 7 v_chandle [63:0] $end
$var logic 64 8 v_str32x2 [63:0] $end
$var longint 64 8 v_chandle [63:0] $end
$var logic 64 9 v_str32x2 [63:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 9 v_enumed [31:0] $end
$var int 32 : v_enumed [31:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 : v_enumed2 [31:0] $end
$var int 32 ; v_enumed2 [31:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 ; v_enumb [2:0] $end
$var logic 6 < v_enumb2_str [5:0] $end
$var logic 3 < v_enumb [2:0] $end
$var logic 6 = v_enumb2_str [5:0] $end
$attrbegin array unpacked bounds -8589934592 $end
$scope sv_array unpacked_array $end
$var logic 8 = unpacked_array[-2] [7:0] $end
$var logic 8 > unpacked_array[-1] [7:0] $end
$var logic 8 ? unpacked_array[0] [7:0] $end
$var logic 8 > unpacked_array[-2] [7:0] $end
$var logic 8 ? unpacked_array[-1] [7:0] $end
$var logic 8 @ unpacked_array[0] [7:0] $end
$upscope $end
$var bit 1 @ LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var bit 1 A LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var parameter 32 A PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var parameter 32 B PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var parameter 32 C PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var parameter 32 D PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
b00000000000000000000000000000011 C
b00000000000000000000000000000010 B
b00000000000000000000000000000100 A
0@
b00000000000000000000000000000011 D
b00000000000000000000000000000010 C
b00000000000000000000000000000100 B
0A
b00000000 @
b00000000 ?
b00000000 >
b00000000 =
b000000 <
b000 ;
b000000 =
b000 <
b00000000000000000000000000000000 ;
b00000000000000000000000000000000 :
b00000000000000000000000000000000 9
b0000000000000000000000000000000000000000000000000000000011111111 8
b0000000000000000000000000000000000000000000000000000000000000000 7
b0000000000000000000000000000000000000000000000000000000011111111 9
b0000000000000000000000000000000000000000000000000000000000000000 8
r0 7
r0 6
r0 5
r0 4
b00 4
b00 3
b00 2
b00 1
b00 0
00
0/
0.
0-
0,
0+
0*
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000000 #
0"
@ -127,135 +133,141 @@ $end
1"
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.1 4
r0.2 5
r0.3 6
b0000000000000000000000000000000100000000000000000000000011111110 8
b00000000000000000000000000000001 9
b00000000000000000000000000000010 :
b111 ;
b11 4
r0.1 5
r0.2 6
r0.3 7
b0000000000000000000000000000000100000000000000000000000011111110 9
b00000000000000000000000000000001 :
b00000000000000000000000000000010 ;
b111 <
#15
0"
#20
1"
b110 ;
b00000000000000000000000000000100 :
b00000000000000000000000000000010 9
b0000000000000000000000000000001000000000000000000000000011111101 8
r0.6 6
r0.4 5
r0.2 4
b110 <
b00000000000000000000000000000100 ;
b00000000000000000000000000000010 :
b0000000000000000000000000000001000000000000000000000000011111101 9
r0.6 7
r0.4 6
r0.2 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000010 #
b111111 <
b111111 =
#25
0"
#30
1"
b110110 <
b110110 =
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.3 4
r0.6000000000000001 5
r0.8999999999999999 6
b0000000000000000000000000000001100000000000000000000000011111100 8
b00000000000000000000000000000011 9
b00000000000000000000000000000110 :
b101 ;
b11 4
r0.3 5
r0.6000000000000001 6
r0.8999999999999999 7
b0000000000000000000000000000001100000000000000000000000011111100 9
b00000000000000000000000000000011 :
b00000000000000000000000000000110 ;
b101 <
#35
0"
#40
1"
b100 ;
b00000000000000000000000000001000 :
b00000000000000000000000000000100 9
b0000000000000000000000000000010000000000000000000000000011111011 8
r1.2 6
r0.8 5
r0.4 4
b100 <
b00000000000000000000000000001000 ;
b00000000000000000000000000000100 :
b0000000000000000000000000000010000000000000000000000000011111011 9
r1.2 7
r0.8 6
r0.4 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000100 #
b101101 <
b101101 =
#45
0"
#50
1"
b100100 <
b100100 =
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 0
b1111 *
b11 1
b11 2
b11 3
r0.5 4
r1 5
r1.5 6
b0000000000000000000000000000010100000000000000000000000011111010 8
b00000000000000000000000000000101 9
b00000000000000000000000000001010 :
b011 ;
b11 4
r0.5 5
r1 6
r1.5 7
b0000000000000000000000000000010100000000000000000000000011111010 9
b00000000000000000000000000000101 :
b00000000000000000000000000001010 ;
b011 <
#55
0"
#60
1"
b010 ;
b00000000000000000000000000001100 :
b00000000000000000000000000000110 9
b0000000000000000000000000000011000000000000000000000000011111001 8
r1.8 6
r1.2 5
r0.6 4
b010 <
b00000000000000000000000000001100 ;
b00000000000000000000000000000110 :
b0000000000000000000000000000011000000000000000000000000011111001 9
r1.8 7
r1.2 6
r0.6 5
b00 4
b00 3
b00 2
b00 1
b00 0
b0000 *
b0000 )
b0000 (
b00 (
b00 '
b00 &
b0000 %
b0000 &
b00 %
b00 $
b00000000000000000000000000000110 #
b011011 <
b011011 =
#64

View File

@ -5,46 +5,47 @@ $timescale 1ps $end
$var wire 1 " global_bit $end
$upscope $end
$scope module t $end
$var wire 1 : clk $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[2] $end
$var wire 1 < v_arru[1] $end
$var wire 1 = v_arru_arru[4][2] $end
$var wire 1 > v_arru_arru[4][1] $end
$var wire 1 ? v_arru_arru[3][2] $end
$var wire 1 @ v_arru_arru[3][1] $end
$var wire 2 * v_arru_arrp[4] [2:1] $end
$var wire 2 + v_arru_arrp[3] [2:1] $end
$var wire 2 , v_arru_strp[4] [1:0] $end
$var wire 2 - v_arru_strp[3] [1:0] $end
$var real 64 . v_real $end
$var real 64 0 v_arr_real[0] $end
$var real 64 2 v_arr_real[1] $end
$var wire 64 A v_chandle [63:0] $end
$var wire 64 4 v_str32x2 [63:0] $end
$var wire 32 6 v_enumed [31:0] $end
$var wire 32 7 v_enumed2 [31:0] $end
$var wire 3 8 v_enumb [2:0] $end
$var wire 6 9 v_enumb2_str [5:0] $end
$var wire 8 C unpacked_array[-2] [7:0] $end
$var wire 8 D unpacked_array[-1] [7:0] $end
$var wire 8 E unpacked_array[0] [7:0] $end
$var wire 1 F LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var wire 2 % v_strp2 [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[2] $end
$var wire 1 = v_arru[1] $end
$var wire 1 > v_arru_arru[4][2] $end
$var wire 1 ? v_arru_arru[4][1] $end
$var wire 1 @ v_arru_arru[3][2] $end
$var wire 1 A v_arru_arru[3][1] $end
$var wire 2 + v_arru_arrp[4] [2:1] $end
$var wire 2 , v_arru_arrp[3] [2:1] $end
$var wire 2 - v_arru_strp[4] [1:0] $end
$var wire 2 . v_arru_strp[3] [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 B v_chandle [63: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 D unpacked_array[-2] [7:0] $end
$var wire 8 E unpacked_array[-1] [7:0] $end
$var wire 8 F unpacked_array[0] [7:0] $end
$var wire 1 G LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$scope module a_module_instantiation_with_a_very_long_name_that_once_its_signals_get_concatenated_and_inlined_will_almost_certainly_result_in_them_getting_hashed $end
$var wire 32 G PARAM [31:0] $end
$upscope $end
$scope module p2 $end
$var wire 32 H PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$scope module p2 $end
$var wire 32 I PARAM [31:0] $end
$upscope $end
$scope module p3 $end
$var wire 32 J PARAM [31:0] $end
$upscope $end
$upscope $end
$upscope $end
$enddefinitions $end
@ -54,171 +55,178 @@ $enddefinitions $end
1"
b00000000000000000000000000000000 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0 .
r0 0
r0 2
b0000000000000000000000000000000000000000000000000000000011111111 4
b00000000000000000000000000000000 6
b00 .
r0 /
r0 1
r0 3
b0000000000000000000000000000000000000000000000000000000011111111 5
b00000000000000000000000000000000 7
b000 8
b000000 9
0:
b00000000000000000000000000000000 8
b000 9
b000000 :
0;
0<
0=
0>
0?
0@
b0000000000000000000000000000000000000000000000000000000000000000 A
b00000000 C
0A
b0000000000000000000000000000000000000000000000000000000000000000 B
b00000000 D
b00000000 E
0F
b00000000000000000000000000000100 G
b00000000000000000000000000000010 H
b00000000000000000000000000000011 I
b00000000 F
0G
b00000000000000000000000000000100 H
b00000000000000000000000000000010 I
b00000000000000000000000000000011 J
#10
b00000000000000000000000000000001 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.1 .
r0.2 0
r0.3 2
b0000000000000000000000000000000100000000000000000000000011111110 4
b00000000000000000000000000000001 6
b00000000000000000000000000000010 7
b111 8
1:
b11 .
r0.1 /
r0.2 1
r0.3 3
b0000000000000000000000000000000100000000000000000000000011111110 5
b00000000000000000000000000000001 7
b00000000000000000000000000000010 8
b111 9
1;
#15
0:
0;
#20
b00000000000000000000000000000010 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.2 .
r0.4 0
r0.6 2
b0000000000000000000000000000001000000000000000000000000011111101 4
b00000000000000000000000000000010 6
b00000000000000000000000000000100 7
b110 8
b111111 9
1:
b00 .
r0.2 /
r0.4 1
r0.6 3
b0000000000000000000000000000001000000000000000000000000011111101 5
b00000000000000000000000000000010 7
b00000000000000000000000000000100 8
b110 9
b111111 :
1;
#25
0:
0;
#30
b00000000000000000000000000000011 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.3 .
r0.6000000000000001 0
r0.8999999999999999 2
b0000000000000000000000000000001100000000000000000000000011111100 4
b00000000000000000000000000000011 6
b00000000000000000000000000000110 7
b101 8
b110110 9
1:
b11 .
r0.3 /
r0.6000000000000001 1
r0.8999999999999999 3
b0000000000000000000000000000001100000000000000000000000011111100 5
b00000000000000000000000000000011 7
b00000000000000000000000000000110 8
b101 9
b110110 :
1;
#35
0:
0;
#40
b00000000000000000000000000000100 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.4 .
r0.8 0
r1.2 2
b0000000000000000000000000000010000000000000000000000000011111011 4
b00000000000000000000000000000100 6
b00000000000000000000000000001000 7
b100 8
b101101 9
1:
b00 .
r0.4 /
r0.8 1
r1.2 3
b0000000000000000000000000000010000000000000000000000000011111011 5
b00000000000000000000000000000100 7
b00000000000000000000000000001000 8
b100 9
b101101 :
1;
#45
0:
0;
#50
b00000000000000000000000000000101 #
b11 $
b1111 %
b11 &
b11 %
b1111 &
b11 '
b1111 (
b11 (
b1111 )
b11 *
b1111 *
b11 +
b11 ,
b11 -
r0.5 .
r1 0
r1.5 2
b0000000000000000000000000000010100000000000000000000000011111010 4
b00000000000000000000000000000101 6
b00000000000000000000000000001010 7
b011 8
b100100 9
1:
b11 .
r0.5 /
r1 1
r1.5 3
b0000000000000000000000000000010100000000000000000000000011111010 5
b00000000000000000000000000000101 7
b00000000000000000000000000001010 8
b011 9
b100100 :
1;
#55
0:
0;
#60
b00000000000000000000000000000110 #
b00 $
b0000 %
b00 &
b00 %
b0000 &
b00 '
b0000 (
b00 (
b0000 )
b00 *
b0000 *
b00 +
b00 ,
b00 -
r0.6 .
r1.2 0
r1.8 2
b0000000000000000000000000000011000000000000000000000000011111001 4
b00000000000000000000000000000110 6
b00000000000000000000000000001100 7
b010 8
b011011 9
1:
b00 .
r0.6 /
r1.2 1
r1.8 3
b0000000000000000000000000000011000000000000000000000000011111001 5
b00000000000000000000000000000110 7
b00000000000000000000000000001100 8
b010 9
b011011 :
1;
#64

View File

@ -1,5 +1,9 @@
$date
Sat Mar 14 09:17:04 2026
<<<<<<< HEAD
Tue Apr 14 15:20:40 2026
=======
Tue Mar 31 17:14:42 2026
>>>>>>> 8895f96e4 (CR)
$end
$version
@ -24,150 +28,157 @@ $end
$var bit 1 % b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct v_strp2 $end
$var bit 1 & b1 $end
$var bit 1 ' b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct v_strp_strp $end
$attrbegin pack packed members 2 $end
$scope struct x1 $end
$var bit 1 & b1 $end
$var bit 1 ' b0 $end
$var bit 1 ( b1 $end
$var bit 1 ) b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct x0 $end
$var bit 1 ( b1 $end
$var bit 1 ) b0 $end
$var bit 1 * b1 $end
$var bit 1 + b0 $end
$upscope $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope union v_unip_strp $end
$attrbegin pack packed members 2 $end
$scope struct x1 $end
$var bit 1 * b1 $end
$var bit 1 + b0 $end
$var bit 1 , b1 $end
$var bit 1 - b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct x0 $end
$var bit 1 * b1 $end
$var bit 1 + b0 $end
$var bit 1 , b1 $end
$var bit 1 - b0 $end
$upscope $end
$upscope $end
$var bit 2 , v_arrp [2:1] $end
$var bit 2 . v_arrp [2:1] $end
$attrbegin array packed bounds 17179869187 $end
$scope sv_array v_arrp_arrp $end
$var bit 2 - v_arrp_arrp[4] [2:1] $end
$var bit 2 . v_arrp_arrp[3] [2:1] $end
$var bit 2 / v_arrp_arrp[4] [2:1] $end
$var bit 2 0 v_arrp_arrp[3] [2:1] $end
$upscope $end
$attrbegin array packed bounds 17179869187 $end
$scope sv_array v_arrp_strp $end
$attrbegin pack packed members 2 $end
$scope struct [4] $end
$var bit 1 / b1 $end
$var bit 1 0 b0 $end
$var bit 1 1 b1 $end
$var bit 1 2 b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct [3] $end
$var bit 1 1 b1 $end
$var bit 1 2 b0 $end
$var bit 1 3 b1 $end
$var bit 1 4 b0 $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array v_arru $end
$var bit 1 3 v_arru[2] $end
$var bit 1 4 v_arru[1] $end
$var bit 1 5 v_arru[2] $end
$var bit 1 6 v_arru[1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arru $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [4] $end
$var bit 1 5 v_arru_arru[4][2] $end
$var bit 1 6 v_arru_arru[4][1] $end
$var bit 1 7 v_arru_arru[4][2] $end
$var bit 1 8 v_arru_arru[4][1] $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [3] $end
$var bit 1 7 v_arru_arru[3][2] $end
$var bit 1 8 v_arru_arru[3][1] $end
$var bit 1 9 v_arru_arru[3][2] $end
$var bit 1 : v_arru_arru[3][1] $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arrp $end
$var bit 2 9 v_arru_arrp[4] [2:1] $end
$var bit 2 : v_arru_arrp[3] [2:1] $end
$var bit 2 ; v_arru_arrp[4] [2:1] $end
$var bit 2 < v_arru_arrp[3] [2:1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_strp $end
$attrbegin pack packed members 2 $end
$scope struct [4] $end
$var bit 1 ; b1 $end
$var bit 1 < b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct [3] $end
$var bit 1 = b1 $end
$var bit 1 > b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct [3] $end
$var bit 1 ? b1 $end
$var bit 1 @ b0 $end
$upscope $end
$upscope $end
$var real 64 ? v_real $end
$var real 64 A v_real $end
$attrbegin array unpacked bounds 1 $end
$scope sv_array v_arr_real $end
$var real 64 @ v_arr_real[0] $end
$var real 64 A v_arr_real[1] $end
$var real 64 B v_arr_real[0] $end
$var real 64 C v_arr_real[1] $end
$upscope $end
$var longint 64 B v_chandle [63:0] $end
$var longint 64 D v_chandle [63:0] $end
$attrbegin array packed bounds 4294967296 $end
$scope sv_array v_str32x2 $end
$attrbegin pack packed members 1 $end
$scope struct [1] $end
$var logic 32 C data [31:0] $end
$var logic 32 E data [31:0] $end
$upscope $end
$attrbegin pack packed members 1 $end
$scope struct [0] $end
$var logic 32 D data [31:0] $end
$var logic 32 F data [31:0] $end
$upscope $end
$upscope $end
$attrbegin misc 07 "" 1 $end
$var int 32 E v_enumed [31:0] $end
$var int 32 G v_enumed [31:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 F v_enumed2 [31:0] $end
$var int 32 H v_enumed2 [31:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 G v_enumb [2:0] $end
$var logic 3 I v_enumb [2:0] $end
$attrbegin pack packed members 2 $end
$scope struct v_enumb2_str $end
$attrbegin misc 07 "" 2 $end
$var logic 3 H a [2:0] $end
$var logic 3 J a [2:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 I b [2:0] $end
$var logic 3 K b [2:0] $end
$upscope $end
$attrbegin array unpacked bounds -8589934592 $end
$scope sv_array unpacked_array $end
$var logic 8 J unpacked_array[-2] [7:0] $end
$var logic 8 K unpacked_array[-1] [7:0] $end
$var logic 8 L unpacked_array[0] [7:0] $end
$var logic 8 L unpacked_array[-2] [7:0] $end
$var logic 8 M unpacked_array[-1] [7:0] $end
$var logic 8 N unpacked_array[0] [7:0] $end
$upscope $end
$var bit 1 M LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var bit 1 O LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
0M
0O
b00000000 N
b00000000 M
b00000000 L
b00000000 K
b00000000 J
b000 K
b000 J
b000 I
b000 H
b000 G
b00000000000000000000000000000000 F
b00000000000000000000000000000000 H
b00000000000000000000000000000000 G
b00000000000000000000000011111111 F
b00000000000000000000000000000000 E
b00000000000000000000000011111111 D
b00000000000000000000000000000000 C
b0000000000000000000000000000000000000000000000000000000000000000 B
b0000000000000000000000000000000000000000000000000000000000000000 D
r0 C
r0 B
r0 A
r0 @
r0 ?
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
0:
09
08
07
06
@ -176,11 +187,11 @@ b00 9
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -204,52 +215,56 @@ b00000000000000000000000000000001 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 9
b11 :
1;
1<
13
14
b11 ;
b11 <
1=
1>
r0.1 ?
r0.2 @
r0.3 A
b00000000000000000000000000000001 C
b00000000000000000000000011111110 D
1?
1@
r0.1 A
r0.2 B
r0.3 C
b00000000000000000000000000000001 E
b00000000000000000000000000000010 F
b111 G
b00000000000000000000000011111110 F
b00000000000000000000000000000001 G
b00000000000000000000000000000010 H
b111 I
#15
0!
#20
1!
b110 G
b00000000000000000000000000000100 F
b110 I
b00000000000000000000000000000100 H
b00000000000000000000000000000010 G
b00000000000000000000000011111101 F
b00000000000000000000000000000010 E
b00000000000000000000000011111101 D
b00000000000000000000000000000010 C
r0.6 A
r0.4 @
r0.2 ?
r0.6 C
r0.4 B
r0.2 A
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
04
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -259,14 +274,14 @@ b00 ,
0%
0$
b00000000000000000000000000000010 #
b111 H
b111 I
b111 J
b111 K
#25
0!
#30
1!
b110 I
b110 H
b110 K
b110 J
b00000000000000000000000000000011 #
1$
1%
@ -276,52 +291,56 @@ b00000000000000000000000000000011 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 9
b11 :
1;
1<
13
14
b11 ;
b11 <
1=
1>
r0.3 ?
r0.6000000000000001 @
r0.8999999999999999 A
b00000000000000000000000000000011 C
b00000000000000000000000011111100 D
1?
1@
r0.3 A
r0.6000000000000001 B
r0.8999999999999999 C
b00000000000000000000000000000011 E
b00000000000000000000000000000110 F
b101 G
b00000000000000000000000011111100 F
b00000000000000000000000000000011 G
b00000000000000000000000000000110 H
b101 I
#35
0!
#40
1!
b100 G
b00000000000000000000000000001000 F
b100 I
b00000000000000000000000000001000 H
b00000000000000000000000000000100 G
b00000000000000000000000011111011 F
b00000000000000000000000000000100 E
b00000000000000000000000011111011 D
b00000000000000000000000000000100 C
r1.2 A
r0.8 @
r0.4 ?
r1.2 C
r0.8 B
r0.4 A
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
04
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -331,14 +350,14 @@ b00 ,
0%
0$
b00000000000000000000000000000100 #
b101 H
b101 I
b101 J
b101 K
#45
0!
#50
1!
b100 I
b100 H
b100 K
b100 J
b00000000000000000000000000000101 #
1$
1%
@ -348,52 +367,56 @@ b00000000000000000000000000000101 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 9
b11 :
1;
1<
13
14
b11 ;
b11 <
1=
1>
r0.5 ?
r1 @
r1.5 A
b00000000000000000000000000000101 C
b00000000000000000000000011111010 D
1?
1@
r0.5 A
r1 B
r1.5 C
b00000000000000000000000000000101 E
b00000000000000000000000000001010 F
b011 G
b00000000000000000000000011111010 F
b00000000000000000000000000000101 G
b00000000000000000000000000001010 H
b011 I
#55
0!
#60
1!
b010 G
b00000000000000000000000000001100 F
b010 I
b00000000000000000000000000001100 H
b00000000000000000000000000000110 G
b00000000000000000000000011111001 F
b00000000000000000000000000000110 E
b00000000000000000000000011111001 D
b00000000000000000000000000000110 C
r1.8 A
r1.2 @
r0.6 ?
r1.8 C
r1.2 B
r0.6 A
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
04
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -403,5 +426,5 @@ b00 ,
0%
0$
b00000000000000000000000000000110 #
b011 H
b011 I
b011 J
b011 K

View File

@ -52,20 +52,20 @@
(cyc\[31\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arrp\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_arrp[4]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_arrp[4]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru[1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arrp_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arrp_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru[2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[4][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru[1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[4][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arru[4][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][2] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arru[3][1] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_arru_arrp[4]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[4]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_arru_arrp[3]\[1\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(v_real\[0\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_real\[1\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(v_real\[2\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
@ -421,6 +421,12 @@
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
)
)
(INSTANCE v_strp2
(NET
(b1 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
)
)
(INSTANCE v_strp_strp
(INSTANCE x1
(NET
@ -449,19 +455,13 @@
)
)
)
(INSTANCE v_arrp_strp[3]
(NET
(b1 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
)
)
(INSTANCE v_arrp_strp[4]
(NET
(b1 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
)
)
(INSTANCE v_arru_strp[3]
(INSTANCE v_arrp_strp[3]
(NET
(b1 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
@ -473,16 +473,22 @@
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
)
)
(INSTANCE v_str32x2[0]
(INSTANCE v_arru_strp[3]
(NET
(data\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 7))
(data\[1\] (T0 20) (T1 40) (TZ 0) (TX 0) (TB 0) (TC 4))
(data\[2\] (T0 20) (T1 40) (TZ 0) (TX 0) (TB 0) (TC 2))
(data\[3\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[4\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[5\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[6\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[7\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(b1 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(b0 (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
)
)
(INSTANCE v_str32x2[1]
(NET
(data\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(data\[1\] (T0 40) (T1 20) (TZ 0) (TX 0) (TB 0) (TC 3))
(data\[2\] (T0 40) (T1 20) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[3\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[4\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[5\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[6\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[7\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[8\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[9\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[10\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
@ -509,16 +515,16 @@
(data\[31\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
)
)
(INSTANCE v_str32x2[1]
(INSTANCE v_str32x2[0]
(NET
(data\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 6))
(data\[1\] (T0 40) (T1 20) (TZ 0) (TX 0) (TB 0) (TC 3))
(data\[2\] (T0 40) (T1 20) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[3\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[4\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[5\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[6\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[7\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[0\] (T0 30) (T1 30) (TZ 0) (TX 0) (TB 0) (TC 7))
(data\[1\] (T0 20) (T1 40) (TZ 0) (TX 0) (TB 0) (TC 4))
(data\[2\] (T0 20) (T1 40) (TZ 0) (TX 0) (TB 0) (TC 2))
(data\[3\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[4\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[5\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[6\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[7\] (T0 0) (T1 60) (TZ 0) (TX 0) (TB 0) (TC 1))
(data\[8\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[9\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(data\[10\] (T0 60) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))

View File

@ -1,85 +1,89 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 F clk $end
$var wire 1 H clk $end
$scope module $unit $end
$var wire 1 " global_bit $end
$upscope $end
$scope module t $end
$var wire 1 F clk $end
$var wire 1 H clk $end
$var wire 32 # cyc [31:0] $end
$scope module v_strp $end
$var wire 1 $ b1 $end
$var wire 1 % b0 $end
$upscope $end
$scope module v_strp2 $end
$var wire 1 & b1 $end
$var wire 1 ' b0 $end
$upscope $end
$scope module v_strp_strp $end
$scope module x1 $end
$var wire 1 & b1 $end
$var wire 1 ' b0 $end
$upscope $end
$scope module x0 $end
$var wire 1 ( b1 $end
$var wire 1 ) b0 $end
$upscope $end
$scope module x0 $end
$var wire 1 * b1 $end
$var wire 1 + b0 $end
$upscope $end
$upscope $end
$scope module v_unip_strp $end
$scope module x1 $end
$var wire 1 * b1 $end
$var wire 1 + b0 $end
$var wire 1 , b1 $end
$var wire 1 - b0 $end
$upscope $end
$scope module x0 $end
$var wire 1 * b1 $end
$var wire 1 + b0 $end
$var wire 1 , b1 $end
$var wire 1 - b0 $end
$upscope $end
$upscope $end
$var wire 2 , v_arrp [2:1] $end
$var wire 2 - v_arrp_arrp[3] [2:1] $end
$var wire 2 . v_arrp_arrp[4] [2:1] $end
$scope module v_arrp_strp[3] $end
$var wire 1 / b1 $end
$var wire 1 0 b0 $end
$upscope $end
$var wire 2 . v_arrp [2:1] $end
$var wire 2 / v_arrp_arrp[4] [2:1] $end
$var wire 2 0 v_arrp_arrp[3] [2:1] $end
$scope module v_arrp_strp[4] $end
$var wire 1 1 b1 $end
$var wire 1 2 b0 $end
$upscope $end
$var wire 1 G v_arru[1] $end
$var wire 1 H v_arru[2] $end
$var wire 1 I v_arru_arru[3][1] $end
$var wire 1 J v_arru_arru[3][2] $end
$var wire 1 K v_arru_arru[4][1] $end
$var wire 1 L v_arru_arru[4][2] $end
$var wire 2 3 v_arru_arrp[3] [2:1] $end
$var wire 2 4 v_arru_arrp[4] [2:1] $end
$scope module v_arru_strp[3] $end
$var wire 1 5 b1 $end
$var wire 1 6 b0 $end
$scope module v_arrp_strp[3] $end
$var wire 1 3 b1 $end
$var wire 1 4 b0 $end
$upscope $end
$var wire 1 I v_arru[2] $end
$var wire 1 J v_arru[1] $end
$var wire 1 K v_arru_arru[4][2] $end
$var wire 1 L v_arru_arru[4][1] $end
$var wire 1 M v_arru_arru[3][2] $end
$var wire 1 N v_arru_arru[3][1] $end
$var wire 2 5 v_arru_arrp[4] [2:1] $end
$var wire 2 6 v_arru_arrp[3] [2:1] $end
$scope module v_arru_strp[4] $end
$var wire 1 7 b1 $end
$var wire 1 8 b0 $end
$upscope $end
$var real 64 9 v_real $end
$var real 64 ; v_arr_real[0] $end
$var real 64 = v_arr_real[1] $end
$var wire 64 M v_chandle [63:0] $end
$scope module v_str32x2[0] $end
$var wire 32 ? data [31:0] $end
$scope module v_arru_strp[3] $end
$var wire 1 9 b1 $end
$var wire 1 : b0 $end
$upscope $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 64 O v_chandle [63:0] $end
$scope module v_str32x2[1] $end
$var wire 32 @ data [31:0] $end
$var wire 32 A data [31:0] $end
$upscope $end
$var wire 32 A v_enumed [31:0] $end
$var wire 32 B v_enumed2 [31:0] $end
$var wire 3 C v_enumb [2:0] $end
$scope module v_str32x2[0] $end
$var wire 32 B data [31:0] $end
$upscope $end
$var wire 32 C v_enumed [31:0] $end
$var wire 32 D v_enumed2 [31:0] $end
$var wire 3 E v_enumb [2:0] $end
$scope module v_enumb2_str $end
$var wire 3 D a [2:0] $end
$var wire 3 E b [2:0] $end
$var wire 3 F a [2:0] $end
$var wire 3 G b [2:0] $end
$upscope $end
$var wire 8 O unpacked_array[-2] [7:0] $end
$var wire 8 P unpacked_array[-1] [7:0] $end
$var wire 8 Q unpacked_array[0] [7:0] $end
$var wire 1 R LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var wire 8 Q unpacked_array[-2] [7:0] $end
$var wire 8 R unpacked_array[-1] [7:0] $end
$var wire 8 S unpacked_array[0] [7:0] $end
$var wire 1 T LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$upscope $end
$upscope $end
$enddefinitions $end
@ -96,41 +100,43 @@ b00000000000000000000000000000000 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0 9
09
0:
r0 ;
r0 =
b00000000000000000000000011111111 ?
b00000000000000000000000000000000 @
r0 ?
b00000000000000000000000000000000 A
b00000000000000000000000000000000 B
b000 C
b000 D
b00000000000000000000000011111111 B
b00000000000000000000000000000000 C
b00000000000000000000000000000000 D
b000 E
0F
0G
b000 F
b000 G
0H
0I
0J
0K
0L
b0000000000000000000000000000000000000000000000000000000000000000 M
b00000000 O
b00000000 P
0M
0N
b0000000000000000000000000000000000000000000000000000000000000000 O
b00000000 Q
0R
b00000000 R
b00000000 S
0T
#10
b00000000000000000000000000000001 #
1$
@ -141,30 +147,32 @@ b00000000000000000000000000000001 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 3
b11 4
15
16
13
14
b11 5
b11 6
17
18
r0.1 9
r0.2 ;
r0.3 =
b00000000000000000000000011111110 ?
b00000000000000000000000000000001 @
19
1:
r0.1 ;
r0.2 =
r0.3 ?
b00000000000000000000000000000001 A
b00000000000000000000000000000010 B
b111 C
1F
b00000000000000000000000011111110 B
b00000000000000000000000000000001 C
b00000000000000000000000000000010 D
b111 E
1H
#15
0F
0H
#20
b00000000000000000000000000000010 #
0$
@ -175,32 +183,34 @@ b00000000000000000000000000000010 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0.2 9
r0.4 ;
r0.6 =
b00000000000000000000000011111101 ?
b00000000000000000000000000000010 @
09
0:
r0.2 ;
r0.4 =
r0.6 ?
b00000000000000000000000000000010 A
b00000000000000000000000000000100 B
b110 C
b111 D
b111 E
1F
b00000000000000000000000011111101 B
b00000000000000000000000000000010 C
b00000000000000000000000000000100 D
b110 E
b111 F
b111 G
1H
#25
0F
0H
#30
b00000000000000000000000000000011 #
1$
@ -211,32 +221,34 @@ b00000000000000000000000000000011 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 3
b11 4
15
16
13
14
b11 5
b11 6
17
18
r0.3 9
r0.6000000000000001 ;
r0.8999999999999999 =
b00000000000000000000000011111100 ?
b00000000000000000000000000000011 @
19
1:
r0.3 ;
r0.6000000000000001 =
r0.8999999999999999 ?
b00000000000000000000000000000011 A
b00000000000000000000000000000110 B
b101 C
b110 D
b110 E
1F
b00000000000000000000000011111100 B
b00000000000000000000000000000011 C
b00000000000000000000000000000110 D
b101 E
b110 F
b110 G
1H
#35
0F
0H
#40
b00000000000000000000000000000100 #
0$
@ -247,32 +259,34 @@ b00000000000000000000000000000100 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0.4 9
r0.8 ;
r1.2 =
b00000000000000000000000011111011 ?
b00000000000000000000000000000100 @
09
0:
r0.4 ;
r0.8 =
r1.2 ?
b00000000000000000000000000000100 A
b00000000000000000000000000001000 B
b100 C
b101 D
b101 E
1F
b00000000000000000000000011111011 B
b00000000000000000000000000000100 C
b00000000000000000000000000001000 D
b100 E
b101 F
b101 G
1H
#45
0F
0H
#50
b00000000000000000000000000000101 #
1$
@ -283,32 +297,34 @@ b00000000000000000000000000000101 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 3
b11 4
15
16
13
14
b11 5
b11 6
17
18
r0.5 9
r1 ;
r1.5 =
b00000000000000000000000011111010 ?
b00000000000000000000000000000101 @
19
1:
r0.5 ;
r1 =
r1.5 ?
b00000000000000000000000000000101 A
b00000000000000000000000000001010 B
b011 C
b100 D
b100 E
1F
b00000000000000000000000011111010 B
b00000000000000000000000000000101 C
b00000000000000000000000000001010 D
b011 E
b100 F
b100 G
1H
#55
0F
0H
#60
b00000000000000000000000000000110 #
0$
@ -319,27 +335,29 @@ b00000000000000000000000000000110 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0.6 9
r1.2 ;
r1.8 =
b00000000000000000000000011111001 ?
b00000000000000000000000000000110 @
09
0:
r0.6 ;
r1.2 =
r1.8 ?
b00000000000000000000000000000110 A
b00000000000000000000000000001100 B
b010 C
b011 D
b011 E
1F
b00000000000000000000000011111001 B
b00000000000000000000000000000110 C
b00000000000000000000000000001100 D
b010 E
b011 F
b011 G
1H

View File

@ -1,5 +1,9 @@
$date
Sat Mar 14 09:16:58 2026
<<<<<<< HEAD
Tue Apr 14 15:20:41 2026
=======
Tue Mar 31 17:14:45 2026
>>>>>>> 8895f96e4 (CR)
$end
$version
@ -23,150 +27,157 @@ $end
$var bit 1 % b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct v_strp2 $end
$var bit 1 & b1 $end
$var bit 1 ' b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct v_strp_strp $end
$attrbegin pack packed members 2 $end
$scope struct x1 $end
$var bit 1 & b1 $end
$var bit 1 ' b0 $end
$var bit 1 ( b1 $end
$var bit 1 ) b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct x0 $end
$var bit 1 ( b1 $end
$var bit 1 ) b0 $end
$var bit 1 * b1 $end
$var bit 1 + b0 $end
$upscope $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope union v_unip_strp $end
$attrbegin pack packed members 2 $end
$scope struct x1 $end
$var bit 1 * b1 $end
$var bit 1 + b0 $end
$var bit 1 , b1 $end
$var bit 1 - b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct x0 $end
$var bit 1 * b1 $end
$var bit 1 + b0 $end
$var bit 1 , b1 $end
$var bit 1 - b0 $end
$upscope $end
$upscope $end
$var bit 2 , v_arrp [2:1] $end
$var bit 2 . v_arrp [2:1] $end
$attrbegin array packed bounds 17179869187 $end
$scope sv_array v_arrp_arrp $end
$var bit 2 - v_arrp_arrp[4] [2:1] $end
$var bit 2 . v_arrp_arrp[3] [2:1] $end
$var bit 2 / v_arrp_arrp[4] [2:1] $end
$var bit 2 0 v_arrp_arrp[3] [2:1] $end
$upscope $end
$attrbegin array packed bounds 17179869187 $end
$scope sv_array v_arrp_strp $end
$attrbegin pack packed members 2 $end
$scope struct [4] $end
$var bit 1 / b1 $end
$var bit 1 0 b0 $end
$var bit 1 1 b1 $end
$var bit 1 2 b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct [3] $end
$var bit 1 1 b1 $end
$var bit 1 2 b0 $end
$var bit 1 3 b1 $end
$var bit 1 4 b0 $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array v_arru $end
$var bit 1 3 v_arru[2] $end
$var bit 1 4 v_arru[1] $end
$var bit 1 5 v_arru[2] $end
$var bit 1 6 v_arru[1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arru $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [4] $end
$var bit 1 5 v_arru_arru[4][2] $end
$var bit 1 6 v_arru_arru[4][1] $end
$var bit 1 7 v_arru_arru[4][2] $end
$var bit 1 8 v_arru_arru[4][1] $end
$upscope $end
$attrbegin array unpacked bounds 8589934593 $end
$scope sv_array [3] $end
$var bit 1 7 v_arru_arru[3][2] $end
$var bit 1 8 v_arru_arru[3][1] $end
$var bit 1 9 v_arru_arru[3][2] $end
$var bit 1 : v_arru_arru[3][1] $end
$upscope $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_arrp $end
$var bit 2 9 v_arru_arrp[4] [2:1] $end
$var bit 2 : v_arru_arrp[3] [2:1] $end
$var bit 2 ; v_arru_arrp[4] [2:1] $end
$var bit 2 < v_arru_arrp[3] [2:1] $end
$upscope $end
$attrbegin array unpacked bounds 17179869187 $end
$scope sv_array v_arru_strp $end
$attrbegin pack packed members 2 $end
$scope struct [4] $end
$var bit 1 ; b1 $end
$var bit 1 < b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct [3] $end
$var bit 1 = b1 $end
$var bit 1 > b0 $end
$upscope $end
$attrbegin pack packed members 2 $end
$scope struct [3] $end
$var bit 1 ? b1 $end
$var bit 1 @ b0 $end
$upscope $end
$upscope $end
$var real 64 ? v_real $end
$var real 64 A v_real $end
$attrbegin array unpacked bounds 1 $end
$scope sv_array v_arr_real $end
$var real 64 @ v_arr_real[0] $end
$var real 64 A v_arr_real[1] $end
$var real 64 B v_arr_real[0] $end
$var real 64 C v_arr_real[1] $end
$upscope $end
$var longint 64 B v_chandle [63:0] $end
$var longint 64 D v_chandle [63:0] $end
$attrbegin array packed bounds 4294967296 $end
$scope sv_array v_str32x2 $end
$attrbegin pack packed members 1 $end
$scope struct [1] $end
$var logic 32 C data [31:0] $end
$var logic 32 E data [31:0] $end
$upscope $end
$attrbegin pack packed members 1 $end
$scope struct [0] $end
$var logic 32 D data [31:0] $end
$var logic 32 F data [31:0] $end
$upscope $end
$upscope $end
$attrbegin misc 07 "" 1 $end
$var int 32 E v_enumed [31:0] $end
$var int 32 G v_enumed [31:0] $end
$attrbegin misc 07 "" 1 $end
$var int 32 F v_enumed2 [31:0] $end
$var int 32 H v_enumed2 [31:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 G v_enumb [2:0] $end
$var logic 3 I v_enumb [2:0] $end
$attrbegin pack packed members 2 $end
$scope struct v_enumb2_str $end
$attrbegin misc 07 "" 2 $end
$var logic 3 H a [2:0] $end
$var logic 3 J a [2:0] $end
$attrbegin misc 07 "" 2 $end
$var logic 3 I b [2:0] $end
$var logic 3 K b [2:0] $end
$upscope $end
$attrbegin array unpacked bounds -8589934592 $end
$scope sv_array unpacked_array $end
$var logic 8 J unpacked_array[-2] [7:0] $end
$var logic 8 K unpacked_array[-1] [7:0] $end
$var logic 8 L unpacked_array[0] [7:0] $end
$var logic 8 L unpacked_array[-2] [7:0] $end
$var logic 8 M unpacked_array[-1] [7:0] $end
$var logic 8 N unpacked_array[0] [7:0] $end
$upscope $end
$var bit 1 M LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var bit 1 O LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
$dumpvars
0M
0O
b00000000 N
b00000000 M
b00000000 L
b00000000 K
b00000000 J
b000 K
b000 J
b000 I
b000 H
b000 G
b00000000000000000000000000000000 F
b00000000000000000000000000000000 H
b00000000000000000000000000000000 G
b00000000000000000000000011111111 F
b00000000000000000000000000000000 E
b00000000000000000000000011111111 D
b00000000000000000000000000000000 C
b0000000000000000000000000000000000000000000000000000000000000000 B
b0000000000000000000000000000000000000000000000000000000000000000 D
r0 C
r0 B
r0 A
r0 @
r0 ?
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
0:
09
08
07
06
@ -175,11 +186,11 @@ b00 9
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -203,52 +214,56 @@ b00000000000000000000000000000001 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 9
b11 :
1;
1<
13
14
b11 ;
b11 <
1=
1>
r0.1 ?
r0.2 @
r0.3 A
b00000000000000000000000000000001 C
b00000000000000000000000011111110 D
1?
1@
r0.1 A
r0.2 B
r0.3 C
b00000000000000000000000000000001 E
b00000000000000000000000000000010 F
b111 G
b00000000000000000000000011111110 F
b00000000000000000000000000000001 G
b00000000000000000000000000000010 H
b111 I
#15
0"
#20
1"
b110 G
b00000000000000000000000000000100 F
b110 I
b00000000000000000000000000000100 H
b00000000000000000000000000000010 G
b00000000000000000000000011111101 F
b00000000000000000000000000000010 E
b00000000000000000000000011111101 D
b00000000000000000000000000000010 C
r0.6 A
r0.4 @
r0.2 ?
r0.6 C
r0.4 B
r0.2 A
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
04
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -258,14 +273,14 @@ b00 ,
0%
0$
b00000000000000000000000000000010 #
b111 H
b111 I
b111 J
b111 K
#25
0"
#30
1"
b110 I
b110 H
b110 K
b110 J
b00000000000000000000000000000011 #
1$
1%
@ -275,52 +290,56 @@ b00000000000000000000000000000011 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 9
b11 :
1;
1<
13
14
b11 ;
b11 <
1=
1>
r0.3 ?
r0.6000000000000001 @
r0.8999999999999999 A
b00000000000000000000000000000011 C
b00000000000000000000000011111100 D
1?
1@
r0.3 A
r0.6000000000000001 B
r0.8999999999999999 C
b00000000000000000000000000000011 E
b00000000000000000000000000000110 F
b101 G
b00000000000000000000000011111100 F
b00000000000000000000000000000011 G
b00000000000000000000000000000110 H
b101 I
#35
0"
#40
1"
b100 G
b00000000000000000000000000001000 F
b100 I
b00000000000000000000000000001000 H
b00000000000000000000000000000100 G
b00000000000000000000000011111011 F
b00000000000000000000000000000100 E
b00000000000000000000000011111011 D
b00000000000000000000000000000100 C
r1.2 A
r0.8 @
r0.4 ?
r1.2 C
r0.8 B
r0.4 A
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
04
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -330,14 +349,14 @@ b00 ,
0%
0$
b00000000000000000000000000000100 #
b101 H
b101 I
b101 J
b101 K
#45
0"
#50
1"
b100 I
b100 H
b100 K
b100 J
b00000000000000000000000000000101 #
1$
1%
@ -347,52 +366,56 @@ b00000000000000000000000000000101 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 9
b11 :
1;
1<
13
14
b11 ;
b11 <
1=
1>
r0.5 ?
r1 @
r1.5 A
b00000000000000000000000000000101 C
b00000000000000000000000011111010 D
1?
1@
r0.5 A
r1 B
r1.5 C
b00000000000000000000000000000101 E
b00000000000000000000000000001010 F
b011 G
b00000000000000000000000011111010 F
b00000000000000000000000000000101 G
b00000000000000000000000000001010 H
b011 I
#55
0"
#60
1"
b010 G
b00000000000000000000000000001100 F
b010 I
b00000000000000000000000000001100 H
b00000000000000000000000000000110 G
b00000000000000000000000011111001 F
b00000000000000000000000000000110 E
b00000000000000000000000011111001 D
b00000000000000000000000000000110 C
r1.8 A
r1.2 @
r0.6 ?
r1.8 C
r1.2 B
r0.6 A
0@
0?
0>
0=
0<
0;
b00 :
b00 9
b00 <
b00 ;
04
03
02
01
00
0/
b00 0
b00 /
b00 .
b00 -
b00 ,
0-
0,
0+
0*
0)
@ -402,6 +425,6 @@ b00 ,
0%
0$
b00000000000000000000000000000110 #
b011 H
b011 I
b011 J
b011 K
#64

View File

@ -5,80 +5,84 @@ $timescale 1ps $end
$var wire 1 " global_bit $end
$upscope $end
$scope module t $end
$var wire 1 F clk $end
$var wire 1 H clk $end
$var wire 32 # cyc [31:0] $end
$scope module v_strp $end
$var wire 1 $ b1 $end
$var wire 1 % b0 $end
$upscope $end
$scope module v_strp2 $end
$var wire 1 & b1 $end
$var wire 1 ' b0 $end
$upscope $end
$scope module v_strp_strp $end
$scope module x1 $end
$var wire 1 & b1 $end
$var wire 1 ' b0 $end
$upscope $end
$scope module x0 $end
$var wire 1 ( b1 $end
$var wire 1 ) b0 $end
$upscope $end
$scope module x0 $end
$var wire 1 * b1 $end
$var wire 1 + b0 $end
$upscope $end
$upscope $end
$scope module v_unip_strp $end
$scope module x1 $end
$var wire 1 * b1 $end
$var wire 1 + b0 $end
$var wire 1 , b1 $end
$var wire 1 - b0 $end
$upscope $end
$scope module x0 $end
$var wire 1 * b1 $end
$var wire 1 + b0 $end
$var wire 1 , b1 $end
$var wire 1 - b0 $end
$upscope $end
$upscope $end
$var wire 2 , v_arrp [2:1] $end
$var wire 2 - v_arrp_arrp[4] [2:1] $end
$var wire 2 . v_arrp_arrp[3] [2:1] $end
$var wire 2 . v_arrp [2:1] $end
$var wire 2 / v_arrp_arrp[4] [2:1] $end
$var wire 2 0 v_arrp_arrp[3] [2:1] $end
$scope module v_arrp_strp[4] $end
$var wire 1 / b1 $end
$var wire 1 0 b0 $end
$upscope $end
$scope module v_arrp_strp[3] $end
$var wire 1 1 b1 $end
$var wire 1 2 b0 $end
$upscope $end
$var wire 1 G v_arru[2] $end
$var wire 1 H v_arru[1] $end
$var wire 1 I v_arru_arru[4][2] $end
$var wire 1 J v_arru_arru[4][1] $end
$var wire 1 K v_arru_arru[3][2] $end
$var wire 1 L v_arru_arru[3][1] $end
$var wire 2 3 v_arru_arrp[4] [2:1] $end
$var wire 2 4 v_arru_arrp[3] [2:1] $end
$scope module v_arru_strp[4] $end
$var wire 1 5 b1 $end
$var wire 1 6 b0 $end
$scope module v_arrp_strp[3] $end
$var wire 1 3 b1 $end
$var wire 1 4 b0 $end
$upscope $end
$scope module v_arru_strp[3] $end
$var wire 1 I v_arru[2] $end
$var wire 1 J v_arru[1] $end
$var wire 1 K v_arru_arru[4][2] $end
$var wire 1 L v_arru_arru[4][1] $end
$var wire 1 M v_arru_arru[3][2] $end
$var wire 1 N v_arru_arru[3][1] $end
$var wire 2 5 v_arru_arrp[4] [2:1] $end
$var wire 2 6 v_arru_arrp[3] [2:1] $end
$scope module v_arru_strp[4] $end
$var wire 1 7 b1 $end
$var wire 1 8 b0 $end
$upscope $end
$var real 64 9 v_real $end
$var real 64 ; v_arr_real[0] $end
$var real 64 = v_arr_real[1] $end
$var wire 64 M v_chandle [63:0] $end
$scope module v_arru_strp[3] $end
$var wire 1 9 b1 $end
$var wire 1 : b0 $end
$upscope $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 64 O v_chandle [63:0] $end
$scope module v_str32x2[1] $end
$var wire 32 ? data [31:0] $end
$var wire 32 A data [31:0] $end
$upscope $end
$scope module v_str32x2[0] $end
$var wire 32 @ data [31:0] $end
$var wire 32 B data [31:0] $end
$upscope $end
$var wire 32 A v_enumed [31:0] $end
$var wire 32 B v_enumed2 [31:0] $end
$var wire 3 C v_enumb [2:0] $end
$var wire 32 C v_enumed [31:0] $end
$var wire 32 D v_enumed2 [31:0] $end
$var wire 3 E v_enumb [2:0] $end
$scope module v_enumb2_str $end
$var wire 3 D a [2:0] $end
$var wire 3 E b [2:0] $end
$var wire 3 F a [2:0] $end
$var wire 3 G b [2:0] $end
$upscope $end
$var wire 8 O unpacked_array[-2] [7:0] $end
$var wire 8 P unpacked_array[-1] [7:0] $end
$var wire 8 Q unpacked_array[0] [7:0] $end
$var wire 1 R LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$var wire 8 Q unpacked_array[-2] [7:0] $end
$var wire 8 R unpacked_array[-1] [7:0] $end
$var wire 8 S unpacked_array[0] [7:0] $end
$var wire 1 T LONGSTART_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_a_very_long_name_which_will_get_hashed_LONGEND $end
$upscope $end
$upscope $end
$enddefinitions $end
@ -95,41 +99,43 @@ b00000000000000000000000000000000 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0 9
09
0:
r0 ;
r0 =
b00000000000000000000000000000000 ?
b00000000000000000000000011111111 @
r0 ?
b00000000000000000000000000000000 A
b00000000000000000000000000000000 B
b000 C
b000 D
b00000000000000000000000011111111 B
b00000000000000000000000000000000 C
b00000000000000000000000000000000 D
b000 E
0F
0G
b000 F
b000 G
0H
0I
0J
0K
0L
b0000000000000000000000000000000000000000000000000000000000000000 M
b00000000 O
b00000000 P
0M
0N
b0000000000000000000000000000000000000000000000000000000000000000 O
b00000000 Q
0R
b00000000 R
b00000000 S
0T
#10
b00000000000000000000000000000001 #
1$
@ -140,30 +146,32 @@ b00000000000000000000000000000001 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 3
b11 4
15
16
13
14
b11 5
b11 6
17
18
r0.1 9
r0.2 ;
r0.3 =
b00000000000000000000000000000001 ?
b00000000000000000000000011111110 @
19
1:
r0.1 ;
r0.2 =
r0.3 ?
b00000000000000000000000000000001 A
b00000000000000000000000000000010 B
b111 C
1F
b00000000000000000000000011111110 B
b00000000000000000000000000000001 C
b00000000000000000000000000000010 D
b111 E
1H
#15
0F
0H
#20
b00000000000000000000000000000010 #
0$
@ -174,32 +182,34 @@ b00000000000000000000000000000010 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0.2 9
r0.4 ;
r0.6 =
b00000000000000000000000000000010 ?
b00000000000000000000000011111101 @
09
0:
r0.2 ;
r0.4 =
r0.6 ?
b00000000000000000000000000000010 A
b00000000000000000000000000000100 B
b110 C
b111 D
b111 E
1F
b00000000000000000000000011111101 B
b00000000000000000000000000000010 C
b00000000000000000000000000000100 D
b110 E
b111 F
b111 G
1H
#25
0F
0H
#30
b00000000000000000000000000000011 #
1$
@ -210,32 +220,34 @@ b00000000000000000000000000000011 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 3
b11 4
15
16
13
14
b11 5
b11 6
17
18
r0.3 9
r0.6000000000000001 ;
r0.8999999999999999 =
b00000000000000000000000000000011 ?
b00000000000000000000000011111100 @
19
1:
r0.3 ;
r0.6000000000000001 =
r0.8999999999999999 ?
b00000000000000000000000000000011 A
b00000000000000000000000000000110 B
b101 C
b110 D
b110 E
1F
b00000000000000000000000011111100 B
b00000000000000000000000000000011 C
b00000000000000000000000000000110 D
b101 E
b110 F
b110 G
1H
#35
0F
0H
#40
b00000000000000000000000000000100 #
0$
@ -246,32 +258,34 @@ b00000000000000000000000000000100 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0.4 9
r0.8 ;
r1.2 =
b00000000000000000000000000000100 ?
b00000000000000000000000011111011 @
09
0:
r0.4 ;
r0.8 =
r1.2 ?
b00000000000000000000000000000100 A
b00000000000000000000000000001000 B
b100 C
b101 D
b101 E
1F
b00000000000000000000000011111011 B
b00000000000000000000000000000100 C
b00000000000000000000000000001000 D
b100 E
b101 F
b101 G
1H
#45
0F
0H
#50
b00000000000000000000000000000101 #
1$
@ -282,32 +296,34 @@ b00000000000000000000000000000101 #
1)
1*
1+
b11 ,
b11 -
1,
1-
b11 .
1/
10
b11 /
b11 0
11
12
b11 3
b11 4
15
16
13
14
b11 5
b11 6
17
18
r0.5 9
r1 ;
r1.5 =
b00000000000000000000000000000101 ?
b00000000000000000000000011111010 @
19
1:
r0.5 ;
r1 =
r1.5 ?
b00000000000000000000000000000101 A
b00000000000000000000000000001010 B
b011 C
b100 D
b100 E
1F
b00000000000000000000000011111010 B
b00000000000000000000000000000101 C
b00000000000000000000000000001010 D
b011 E
b100 F
b100 G
1H
#55
0F
0H
#60
b00000000000000000000000000000110 #
0$
@ -318,28 +334,30 @@ b00000000000000000000000000000110 #
0)
0*
0+
b00 ,
b00 -
0,
0-
b00 .
0/
00
b00 /
b00 0
01
02
b00 3
b00 4
05
06
03
04
b00 5
b00 6
07
08
r0.6 9
r1.2 ;
r1.8 =
b00000000000000000000000000000110 ?
b00000000000000000000000011111001 @
09
0:
r0.6 ;
r1.2 =
r1.8 ?
b00000000000000000000000000000110 A
b00000000000000000000000000001100 B
b010 C
b011 D
b011 E
1F
b00000000000000000000000011111001 B
b00000000000000000000000000000110 C
b00000000000000000000000000001100 D
b010 E
b011 F
b011 G
1H
#64

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:08 2026
Tue Apr 14 15:20:41 2026
$end
$version

View File

@ -1,49 +1,48 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 , clk $end
$var wire 1 + clk $end
$scope module t $end
$var wire 1 , clk $end
$var wire 32 # cyc [31:0] $end
$var wire 1 + clk $end
$var wire 32 " cyc [31:0] $end
$scope module sub1a $end
$var wire 32 - ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 $ value [31:0] $end
$var wire 32 , ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 # value [31:0] $end
$scope module sub2a $end
$var wire 32 . ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 % value [31:0] $end
$var wire 32 - ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 $ value [31:0] $end
$upscope $end
$scope module sub2b $end
$var wire 32 / ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 & value [31:0] $end
$var wire 32 . ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 % value [31:0] $end
$upscope $end
$scope module sub2c $end
$var wire 32 0 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 ' value [31:0] $end
$var wire 32 / ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 & value [31:0] $end
$upscope $end
$upscope $end
$scope module sub1b $end
$var wire 32 1 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 ( value [31:0] $end
$var wire 32 0 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 ' value [31:0] $end
$scope module sub2a $end
$var wire 32 2 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 ) value [31:0] $end
$var wire 32 1 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 ( value [31:0] $end
$upscope $end
$scope module sub2b $end
$var wire 32 3 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 * value [31:0] $end
$var wire 32 2 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 ) value [31:0] $end
$upscope $end
$scope module sub2c $end
$var wire 32 4 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 + value [31:0] $end
$var wire 32 3 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 * value [31:0] $end
$upscope $end
$upscope $end
$upscope $end
@ -52,151 +51,151 @@ $enddefinitions $end
#0
b00000000000000000000000000000000 #
b00000000000000000000000000001010 $
b00000000000000000000000000001011 %
b00000000000000000000000000001100 &
b00000000000000000000000000001101 '
b00000000000000000000000000010100 (
b00000000000000000000000000010101 )
b00000000000000000000000000010110 *
b00000000000000000000000000010111 +
0,
b00000000000000000000000000001010 -
b00000000000000000000000000001011 .
b00000000000000000000000000001100 /
b00000000000000000000000000001101 0
b00000000000000000000000000010100 1
b00000000000000000000000000010101 2
b00000000000000000000000000010110 3
b00000000000000000000000000010111 4
#1
b00000000000000000000000000000001 #
b00000000000000000000000000000000 "
b00000000000000000000000000001010 #
b00000000000000000000000000001011 $
b00000000000000000000000000001100 %
b00000000000000000000000000001101 &
b00000000000000000000000000001110 '
b00000000000000000000000000010100 '
b00000000000000000000000000010101 (
b00000000000000000000000000010110 )
b00000000000000000000000000010111 *
b00000000000000000000000000011000 +
1,
#2
0,
#3
b00000000000000000000000000000010 #
0+
b00000000000000000000000000001010 ,
b00000000000000000000000000001011 -
b00000000000000000000000000001100 .
b00000000000000000000000000001101 /
b00000000000000000000000000010100 0
b00000000000000000000000000010101 1
b00000000000000000000000000010110 2
b00000000000000000000000000010111 3
#1
b00000000000000000000000000000001 "
b00000000000000000000000000001011 #
b00000000000000000000000000001100 $
b00000000000000000000000000001101 %
b00000000000000000000000000001110 &
b00000000000000000000000000001111 '
b00000000000000000000000000010101 '
b00000000000000000000000000010110 (
b00000000000000000000000000010111 )
b00000000000000000000000000011000 *
b00000000000000000000000000011001 +
1,
#4
0,
#5
b00000000000000000000000000000011 #
1+
#2
0+
#3
b00000000000000000000000000000010 "
b00000000000000000000000000001100 #
b00000000000000000000000000001101 $
b00000000000000000000000000001110 %
b00000000000000000000000000001111 &
b00000000000000000000000000010000 '
b00000000000000000000000000010110 '
b00000000000000000000000000010111 (
b00000000000000000000000000011000 )
b00000000000000000000000000011001 *
b00000000000000000000000000011010 +
1,
#6
0,
#7
b00000000000000000000000000000100 #
1+
#4
0+
#5
b00000000000000000000000000000011 "
b00000000000000000000000000001101 #
b00000000000000000000000000001110 $
b00000000000000000000000000001111 %
b00000000000000000000000000010000 &
b00000000000000000000000000010001 '
b00000000000000000000000000010111 '
b00000000000000000000000000011000 (
b00000000000000000000000000011001 )
b00000000000000000000000000011010 *
b00000000000000000000000000011011 +
1,
#8
0,
#9
b00000000000000000000000000000101 #
1+
#6
0+
#7
b00000000000000000000000000000100 "
b00000000000000000000000000001110 #
b00000000000000000000000000001111 $
b00000000000000000000000000010000 %
b00000000000000000000000000010001 &
b00000000000000000000000000010010 '
b00000000000000000000000000011000 '
b00000000000000000000000000011001 (
b00000000000000000000000000011010 )
b00000000000000000000000000011011 *
b00000000000000000000000000011100 +
1,
#10
0,
#11
b00000000000000000000000000000110 #
1+
#8
0+
#9
b00000000000000000000000000000101 "
b00000000000000000000000000001111 #
b00000000000000000000000000010000 $
b00000000000000000000000000010001 %
b00000000000000000000000000010010 &
b00000000000000000000000000010011 '
b00000000000000000000000000011001 '
b00000000000000000000000000011010 (
b00000000000000000000000000011011 )
b00000000000000000000000000011100 *
b00000000000000000000000000011101 +
1,
#12
0,
#13
b00000000000000000000000000000111 #
1+
#10
0+
#11
b00000000000000000000000000000110 "
b00000000000000000000000000010000 #
b00000000000000000000000000010001 $
b00000000000000000000000000010010 %
b00000000000000000000000000010011 &
b00000000000000000000000000010100 '
b00000000000000000000000000011010 '
b00000000000000000000000000011011 (
b00000000000000000000000000011100 )
b00000000000000000000000000011101 *
b00000000000000000000000000011110 +
1,
#14
0,
#15
b00000000000000000000000000001000 #
1+
#12
0+
#13
b00000000000000000000000000000111 "
b00000000000000000000000000010001 #
b00000000000000000000000000010010 $
b00000000000000000000000000010011 %
b00000000000000000000000000010100 &
b00000000000000000000000000010101 '
b00000000000000000000000000011011 '
b00000000000000000000000000011100 (
b00000000000000000000000000011101 )
b00000000000000000000000000011110 *
b00000000000000000000000000011111 +
1,
#16
0,
#17
b00000000000000000000000000001001 #
1+
#14
0+
#15
b00000000000000000000000000001000 "
b00000000000000000000000000010010 #
b00000000000000000000000000010011 $
b00000000000000000000000000010100 %
b00000000000000000000000000010101 &
b00000000000000000000000000010110 '
b00000000000000000000000000011100 '
b00000000000000000000000000011101 (
b00000000000000000000000000011110 )
b00000000000000000000000000011111 *
b00000000000000000000000000100000 +
1,
#18
0,
#19
b00000000000000000000000000001010 #
1+
#16
0+
#17
b00000000000000000000000000001001 "
b00000000000000000000000000010011 #
b00000000000000000000000000010100 $
b00000000000000000000000000010101 %
b00000000000000000000000000010110 &
b00000000000000000000000000010111 '
b00000000000000000000000000011101 '
b00000000000000000000000000011110 (
b00000000000000000000000000011111 )
b00000000000000000000000000100000 *
b00000000000000000000000000100001 +
1,
1+
#18
0+
#19
b00000000000000000000000000001010 "
b00000000000000000000000000010100 #
b00000000000000000000000000010101 $
b00000000000000000000000000010110 %
b00000000000000000000000000010111 &
b00000000000000000000000000011110 '
b00000000000000000000000000011111 (
b00000000000000000000000000100000 )
b00000000000000000000000000100001 *
1+
#20
0,
0+

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:06 2026
Tue Apr 14 15:20:41 2026
$end
$version

View File

@ -2,11 +2,11 @@ $version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$scope module t $end
$var wire 32 # cyc [31:0] $end
$var wire 32 " cyc [31:0] $end
$scope module sub1a $end
$var wire 32 - ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 $ value [31:0] $end
$var wire 32 , ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 # value [31:0] $end
$scope module sub2a $end
$upscope $end
$scope module sub2b $end
@ -15,23 +15,23 @@ $timescale 1ps $end
$upscope $end
$upscope $end
$scope module sub1b $end
$var wire 32 1 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 ( value [31:0] $end
$var wire 32 0 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 ' value [31:0] $end
$scope module sub2a $end
$var wire 32 2 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 ) value [31:0] $end
$var wire 32 1 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 ( value [31:0] $end
$upscope $end
$scope module sub2b $end
$var wire 32 3 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 * value [31:0] $end
$var wire 32 2 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 ) value [31:0] $end
$upscope $end
$scope module sub2c $end
$var wire 32 4 ADD [31:0] $end
$var wire 32 # cyc [31:0] $end
$var wire 32 + value [31:0] $end
$var wire 32 3 ADD [31:0] $end
$var wire 32 " cyc [31:0] $end
$var wire 32 * value [31:0] $end
$upscope $end
$upscope $end
$upscope $end
@ -40,85 +40,85 @@ $enddefinitions $end
#0
b00000000000000000000000000000000 #
b00000000000000000000000000001010 $
b00000000000000000000000000010100 (
b00000000000000000000000000010101 )
b00000000000000000000000000010110 *
b00000000000000000000000000010111 +
b00000000000000000000000000001010 -
b00000000000000000000000000010100 1
b00000000000000000000000000010101 2
b00000000000000000000000000010110 3
b00000000000000000000000000010111 4
#1
b00000000000000000000000000000001 #
b00000000000000000000000000001011 $
b00000000000000000000000000000000 "
b00000000000000000000000000001010 #
b00000000000000000000000000010100 '
b00000000000000000000000000010101 (
b00000000000000000000000000010110 )
b00000000000000000000000000010111 *
b00000000000000000000000000011000 +
#3
b00000000000000000000000000000010 #
b00000000000000000000000000001100 $
b00000000000000000000000000001010 ,
b00000000000000000000000000010100 0
b00000000000000000000000000010101 1
b00000000000000000000000000010110 2
b00000000000000000000000000010111 3
#1
b00000000000000000000000000000001 "
b00000000000000000000000000001011 #
b00000000000000000000000000010101 '
b00000000000000000000000000010110 (
b00000000000000000000000000010111 )
b00000000000000000000000000011000 *
b00000000000000000000000000011001 +
#5
b00000000000000000000000000000011 #
b00000000000000000000000000001101 $
#3
b00000000000000000000000000000010 "
b00000000000000000000000000001100 #
b00000000000000000000000000010110 '
b00000000000000000000000000010111 (
b00000000000000000000000000011000 )
b00000000000000000000000000011001 *
b00000000000000000000000000011010 +
#7
b00000000000000000000000000000100 #
b00000000000000000000000000001110 $
#5
b00000000000000000000000000000011 "
b00000000000000000000000000001101 #
b00000000000000000000000000010111 '
b00000000000000000000000000011000 (
b00000000000000000000000000011001 )
b00000000000000000000000000011010 *
b00000000000000000000000000011011 +
#9
b00000000000000000000000000000101 #
b00000000000000000000000000001111 $
#7
b00000000000000000000000000000100 "
b00000000000000000000000000001110 #
b00000000000000000000000000011000 '
b00000000000000000000000000011001 (
b00000000000000000000000000011010 )
b00000000000000000000000000011011 *
b00000000000000000000000000011100 +
#11
b00000000000000000000000000000110 #
b00000000000000000000000000010000 $
#9
b00000000000000000000000000000101 "
b00000000000000000000000000001111 #
b00000000000000000000000000011001 '
b00000000000000000000000000011010 (
b00000000000000000000000000011011 )
b00000000000000000000000000011100 *
b00000000000000000000000000011101 +
#13
b00000000000000000000000000000111 #
b00000000000000000000000000010001 $
#11
b00000000000000000000000000000110 "
b00000000000000000000000000010000 #
b00000000000000000000000000011010 '
b00000000000000000000000000011011 (
b00000000000000000000000000011100 )
b00000000000000000000000000011101 *
b00000000000000000000000000011110 +
#15
b00000000000000000000000000001000 #
b00000000000000000000000000010010 $
#13
b00000000000000000000000000000111 "
b00000000000000000000000000010001 #
b00000000000000000000000000011011 '
b00000000000000000000000000011100 (
b00000000000000000000000000011101 )
b00000000000000000000000000011110 *
b00000000000000000000000000011111 +
#17
b00000000000000000000000000001001 #
b00000000000000000000000000010011 $
#15
b00000000000000000000000000001000 "
b00000000000000000000000000010010 #
b00000000000000000000000000011100 '
b00000000000000000000000000011101 (
b00000000000000000000000000011110 )
b00000000000000000000000000011111 *
b00000000000000000000000000100000 +
#19
b00000000000000000000000000001010 #
b00000000000000000000000000010100 $
#17
b00000000000000000000000000001001 "
b00000000000000000000000000010011 #
b00000000000000000000000000011101 '
b00000000000000000000000000011110 (
b00000000000000000000000000011111 )
b00000000000000000000000000100000 *
b00000000000000000000000000100001 +
#19
b00000000000000000000000000001010 "
b00000000000000000000000000010100 #
b00000000000000000000000000011110 '
b00000000000000000000000000011111 (
b00000000000000000000000000100000 )
b00000000000000000000000000100001 *
#20

View File

@ -1,86 +1,86 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 # clk $end
$var wire 1 & clk $end
$scope module t $end
$var wire 1 # clk $end
$var wire 32 $ cyc [31:0] $end
$var wire 32 % c_trace_on [31:0] $end
$var real 64 & r $end
$var wire 1 & clk $end
$var wire 32 " cyc [31:0] $end
$var wire 32 # c_trace_on [31:0] $end
$var real 64 $ r $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
0#
b00000000000000000000000000000001 $
b00000000000000000000000000000000 %
r0 &
b00000000000000000000000000000001 "
b00000000000000000000000000000000 #
r0 $
0&
#10
1#
b00000000000000000000000000000010 $
r0.1 &
b00000000000000000000000000000010 "
r0.1 $
1&
#15
0#
0&
#20
1#
b00000000000000000000000000000011 $
b00000000000000000000000000000001 %
r0.2 &
b00000000000000000000000000000011 "
b00000000000000000000000000000001 #
r0.2 $
1&
#25
0#
0&
#30
1#
b00000000000000000000000000000100 $
b00000000000000000000000000000010 %
r0.3 &
b00000000000000000000000000000100 "
b00000000000000000000000000000010 #
r0.3 $
1&
#35
0#
0&
#40
1#
b00000000000000000000000000000101 $
b00000000000000000000000000000011 %
r0.4 &
b00000000000000000000000000000101 "
b00000000000000000000000000000011 #
r0.4 $
1&
#45
0#
0&
#50
1#
b00000000000000000000000000000110 $
b00000000000000000000000000000100 %
r0.5 &
b00000000000000000000000000000110 "
b00000000000000000000000000000100 #
r0.5 $
1&
#55
0#
0&
#60
1#
b00000000000000000000000000000111 $
b00000000000000000000000000000101 %
r0.6 &
b00000000000000000000000000000111 "
b00000000000000000000000000000101 #
r0.6 $
1&
#65
0#
0&
#70
1#
b00000000000000000000000000001000 $
b00000000000000000000000000000110 %
r0.7 &
b00000000000000000000000000001000 "
b00000000000000000000000000000110 #
r0.7 $
1&
#75
0#
0&
#80
1#
b00000000000000000000000000001001 $
b00000000000000000000000000000111 %
r0.7999999999999999 &
b00000000000000000000000000001001 "
b00000000000000000000000000000111 #
r0.7999999999999999 $
1&
#85
0#
0&
#90
1#
b00000000000000000000000000001010 $
b00000000000000000000000000001000 %
r0.8999999999999999 &
b00000000000000000000000000001010 "
b00000000000000000000000000001000 #
r0.8999999999999999 $
1&
#95
0#
0&
#100
1#
b00000000000000000000000000001011 $
b00000000000000000000000000001001 %
r0.9999999999999999 &
b00000000000000000000000000001011 "
b00000000000000000000000000001001 #
r0.9999999999999999 $
1&

View File

@ -2,85 +2,85 @@ $version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$scope module t $end
$var wire 1 # clk $end
$var wire 32 $ cyc [31:0] $end
$var wire 32 % c_trace_on [31:0] $end
$var real 64 & r $end
$var wire 1 & clk $end
$var wire 32 " cyc [31:0] $end
$var wire 32 # c_trace_on [31:0] $end
$var real 64 $ r $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
0#
b00000000000000000000000000000001 $
b00000000000000000000000000000000 %
r0 &
b00000000000000000000000000000001 "
b00000000000000000000000000000000 #
r0 $
0&
#10
1#
b00000000000000000000000000000010 $
r0.1 &
b00000000000000000000000000000010 "
r0.1 $
1&
#15
0#
0&
#20
1#
b00000000000000000000000000000011 $
b00000000000000000000000000000001 %
r0.2 &
b00000000000000000000000000000011 "
b00000000000000000000000000000001 #
r0.2 $
1&
#25
0#
0&
#30
1#
b00000000000000000000000000000100 $
b00000000000000000000000000000010 %
r0.3 &
b00000000000000000000000000000100 "
b00000000000000000000000000000010 #
r0.3 $
1&
#35
0#
0&
#40
1#
b00000000000000000000000000000101 $
b00000000000000000000000000000011 %
r0.4 &
b00000000000000000000000000000101 "
b00000000000000000000000000000011 #
r0.4 $
1&
#45
0#
0&
#50
1#
b00000000000000000000000000000110 $
b00000000000000000000000000000100 %
r0.5 &
b00000000000000000000000000000110 "
b00000000000000000000000000000100 #
r0.5 $
1&
#55
0#
0&
#60
1#
b00000000000000000000000000000111 $
b00000000000000000000000000000101 %
r0.6 &
b00000000000000000000000000000111 "
b00000000000000000000000000000101 #
r0.6 $
1&
#65
0#
0&
#70
1#
b00000000000000000000000000001000 $
b00000000000000000000000000000110 %
r0.7 &
b00000000000000000000000000001000 "
b00000000000000000000000000000110 #
r0.7 $
1&
#75
0#
0&
#80
1#
b00000000000000000000000000001001 $
b00000000000000000000000000000111 %
r0.7999999999999999 &
b00000000000000000000000000001001 "
b00000000000000000000000000000111 #
r0.7999999999999999 $
1&
#85
0#
0&
#90
1#
b00000000000000000000000000001010 $
b00000000000000000000000000001000 %
r0.8999999999999999 &
b00000000000000000000000000001010 "
b00000000000000000000000000001000 #
r0.8999999999999999 $
1&
#95
0#
0&
#100
1#
b00000000000000000000000000001011 $
b00000000000000000000000000001001 %
r0.9999999999999999 &
b00000000000000000000000000001011 "
b00000000000000000000000000001001 #
r0.9999999999999999 $
1&
#104

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:43 2026
Tue Apr 14 15:20:42 2026
$end
$version
@ -12,8 +12,6 @@ $end
$attrbegin misc 07 $unit::state_t 4 VAL_A VAL_B VAL_C VAL_D 00 01 10 11 1 $end
$attrbegin misc 07 t.other_state_t 3 VAL_X VAL_Y VAL_Z 00 01 10 2 $end
$var wire 1 ! clk $end
$scope module $unit $end
$upscope $end
$scope module t $end
$var wire 1 ! clk $end
$attrbegin misc 07 "" 1 $end

View File

@ -10,8 +10,6 @@
(NET
(clk (T0 10) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 1))
)
(INSTANCE $unit
)
(INSTANCE t
(NET
(clk (T0 10) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 1))

View File

@ -2,8 +2,6 @@ $version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 " clk $end
$scope module $unit $end
$upscope $end
$scope module t $end
$var wire 1 " clk $end
$var wire 2 # v_enumed [1:0] $end

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:50 2026
Tue Apr 14 15:20:42 2026
$end
$version

View File

@ -1,69 +1,69 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module t $end
$var event 1 # ev_test $end
$var wire 32 $ i [31:0] $end
$var wire 1 % toggle $end
$var wire 1 & clk $end
$var event 1 " ev_test $end
$var wire 32 # i [31:0] $end
$var wire 1 $ toggle $end
$var wire 1 % clk $end
$upscope $end
$enddefinitions $end
#0
b00000000000000000000000000000000 $
b00000000000000000000000000000000 #
0$
0%
0&
#10
b00000000000000000000000000000001 $
1&
#20
0&
#30
b00000000000000000000000000000010 $
1&
#40
0&
#50
b00000000000000000000000000000011 $
1&
#60
0&
#70
b00000000000000000000000000000100 $
1&
#80
0&
#90
b00000000000000000000000000000101 $
1&
#100
0&
#110
1#
b00000000000000000000000000000110 $
b00000000000000000000000000000001 #
1%
#20
0%
#30
b00000000000000000000000000000010 #
1%
#40
0%
#50
b00000000000000000000000000000011 #
1%
#60
0%
#70
b00000000000000000000000000000100 #
1%
#80
0%
#90
b00000000000000000000000000000101 #
1%
#100
0%
#110
1"
b00000000000000000000000000000110 #
1$
1%
1&
#120
0&
0%
#130
b00000000000000000000000000000111 $
1&
b00000000000000000000000000000111 #
1%
#140
0&
0%
#150
b00000000000000000000000000001000 $
1&
b00000000000000000000000000001000 #
1%
#160
0&
0%
#170
b00000000000000000000000000001001 $
1&
b00000000000000000000000000001001 #
1%
#180
0&
0%
#190
b00000000000000000000000000001010 $
1&
b00000000000000000000000000001010 #
1%
#200
0&
0%
#210
1&
1%

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:58 2026
Tue Apr 14 17:15:24 2026
$end
$version

View File

@ -0,0 +1,23 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# 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-FileCopyrightText: 2024 Wilson Snyder
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios("vlt_all")
test.compile(v_flags2=[
"--trace-vcd --trace-max-width 0 --trace-max-array 0 --output-split-ctrace 10 --trace-structs"
])
trace_files = glob.glob(test.obj_dir + "/*Trace*.cpp")
if len(trace_files) < 10:
test.error("Too few trace files")
test.execute()
test.passes()

View File

@ -0,0 +1,29 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0
module t ( /*AUTOARG*/
// Inputs
clk
);
input clk;
int cyc = 0;
localparam max = 1000;
logic [31:0] foo[max:0];
logic [max:0][15:0][31:0] bar;
always_ff @(posedge clk) begin
cyc <= cyc + 1;
foo[0] <= cyc;
for (int i = 1; i <= max; i++) foo[i] <= foo[i-1];
bar <= (bar << 32) | type (bar)'(cyc);
if (cyc == 10) begin
$write("*-* All Finished *-*\n");
$finish;
end
end
endmodule

View File

@ -1,19 +1,19 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 ( clk $end
$var wire 1 ' clk $end
$scope module t $end
$var wire 1 ( clk $end
$var wire 32 # cyc [31:0] $end
$var wire 1 ' clk $end
$var wire 32 " cyc [31:0] $end
$scope module c5_data $end
$var wire 1 $ valid $end
$var wire 4 % value [3:0] $end
$var wire 1 ) reset $end
$var wire 1 # valid $end
$var wire 4 $ value [3:0] $end
$var wire 1 ( reset $end
$upscope $end
$scope module c6_data $end
$var wire 1 & valid $end
$var wire 4 ' value [3:0] $end
$var wire 1 * reset $end
$var wire 1 % valid $end
$var wire 4 & value [3:0] $end
$var wire 1 ) reset $end
$upscope $end
$scope module cif2 $end
$upscope $end
@ -25,112 +25,112 @@ $enddefinitions $end
#0
b00000000000000000000000000000001 #
0$
b0000 %
0&
b0000 '
b00000000000000000000000000000001 "
0#
b0000 $
0%
b0000 &
0'
0(
0)
0*
#10
b00000000000000000000000000000010 #
1(
b00000000000000000000000000000010 "
1'
#15
0(
0'
#20
b00000000000000000000000000000011 #
b1111 %
1&
b1010 '
1(
b00000000000000000000000000000011 "
b1111 $
1%
b1010 &
1'
#25
0(
0'
#30
b00000000000000000000000000000100 #
1(
b00000000000000000000000000000100 "
1'
#35
0(
0'
#40
b00000000000000000000000000000101 #
1(
b00000000000000000000000000000101 "
1'
#45
0(
0'
#50
b00000000000000000000000000000110 #
1(
b00000000000000000000000000000110 "
1'
#55
0(
0'
#60
b00000000000000000000000000000111 #
1(
b00000000000000000000000000000111 "
1'
#65
0(
0'
#70
b00000000000000000000000000001000 #
1(
b00000000000000000000000000001000 "
1'
#75
0(
0'
#80
b00000000000000000000000000001001 #
1(
b00000000000000000000000000001001 "
1'
#85
0(
0'
#90
b00000000000000000000000000001010 #
1(
b00000000000000000000000000001010 "
1'
#95
0(
0'
#100
b00000000000000000000000000001011 #
1(
b00000000000000000000000000001011 "
1'
#105
0(
0'
#110
b00000000000000000000000000001100 #
1(
b00000000000000000000000000001100 "
1'
#115
0(
0'
#120
b00000000000000000000000000001101 #
1(
b00000000000000000000000000001101 "
1'
#125
0(
0'
#130
b00000000000000000000000000001110 #
1(
b00000000000000000000000000001110 "
1'
#135
0(
0'
#140
b00000000000000000000000000001111 #
1(
b00000000000000000000000000001111 "
1'
#145
0(
0'
#150
b00000000000000000000000000010000 #
1(
b00000000000000000000000000010000 "
1'
#155
0(
0'
#160
b00000000000000000000000000010001 #
1(
b00000000000000000000000000010001 "
1'
#165
0(
0'
#170
b00000000000000000000000000010010 #
1(
b00000000000000000000000000010010 "
1'
#175
0(
0'
#180
b00000000000000000000000000010011 #
1(
b00000000000000000000000000010011 "
1'
#185
0(
0'
#190
b00000000000000000000000000010100 #
1(
b00000000000000000000000000010100 "
1'
#195
0(
0'
#200
b00000000000000000000000000010101 #
1(
b00000000000000000000000000010101 "
1'

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:16:41 2026
Tue Apr 14 15:20:43 2026
$end
$version

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:10 2026
Tue Apr 14 15:20:43 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 21 21:35:43 2026
Tue Apr 14 15:20:29 2026
$end
$version

View File

@ -1,5 +1,5 @@
$date
Sat Mar 21 21:35:35 2026
Tue Apr 14 15:20:30 2026
$end
$version

View File

@ -1,43 +1,43 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 # clk $end
$var wire 1 " clk $end
$scope module t $end
$var wire 1 # clk $end
$var wire 32 $ cyc [31:0] $end
$var wire 1 " clk $end
$var wire 32 # cyc [31:0] $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
0#
b00000000000000000000000000000000 $
0"
b00000000000000000000000000000000 #
#10
1#
b00000000000000000000000000000001 $
1"
b00000000000000000000000000000001 #
#15
0#
0"
#20
1#
b00000000000000000000000000000010 $
1"
b00000000000000000000000000000010 #
#25
0#
0"
#30
1#
b00000000000000000000000000000011 $
1"
b00000000000000000000000000000011 #
#35
0#
0"
#40
1#
b00000000000000000000000000000100 $
1"
b00000000000000000000000000000100 #
#45
0#
0"
#50
1#
b00000000000000000000000000000101 $
1"
b00000000000000000000000000000101 #
#55
0#
0"
#60
1#
b00000000000000000000000000000110 $
1"
b00000000000000000000000000000110 #

View File

@ -1,59 +1,60 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module top $end
$var wire 1 O clk $end
$var wire 1 N clk $end
$scope module t $end
$var wire 1 O clk $end
$var wire 32 # cyc [31:0] $end
$var wire 96 $ wide1 [95:0] $end
$var wire 16 ' wide2[0] [15:0] $end
$var wire 16 ( wide2[1] [15:0] $end
$var wire 16 ) wide2[2] [15:0] $end
$var wire 16 * wide2[3] [15:0] $end
$var wire 16 + wide2[4] [15:0] $end
$var wire 16 , wide2[5] [15:0] $end
$var wire 16 - wide2[6] [15:0] $end
$var wire 16 . wide2[7] [15:0] $end
$var wire 16 / wide2[8] [15:0] $end
$var wire 16 0 wide2[9] [15:0] $end
$var wire 16 1 wide2[10] [15:0] $end
$var wire 16 2 wide2[11] [15:0] $end
$var wire 16 3 wide2[12] [15:0] $end
$var wire 16 4 wide2[13] [15:0] $end
$var wire 16 5 wide2[14] [15:0] $end
$var wire 16 6 wide2[15] [15:0] $end
$var wire 1 7 deep1[0] $end
$var wire 1 8 deep1[1] $end
$var wire 1 9 deep1[2] $end
$var wire 1 : deep1[3] $end
$var wire 1 ; deep1[4] $end
$var wire 1 < deep1[5] $end
$var wire 1 = deep1[6] $end
$var wire 1 > deep1[7] $end
$var wire 1 ? deep1[8] $end
$var wire 1 @ deep1[9] $end
$var wire 1 A deep1[10] $end
$var wire 1 B deep1[11] $end
$var wire 1 C deep1[12] $end
$var wire 1 D deep1[13] $end
$var wire 1 E deep1[14] $end
$var wire 1 F deep1[15] $end
$var wire 1 G deep1[16] $end
$var wire 1 H deep1[17] $end
$var wire 1 I deep1[18] $end
$var wire 1 J deep1[19] $end
$var wire 1 K deep1[20] $end
$var wire 1 L deep1[21] $end
$var wire 1 M deep1[22] $end
$var wire 1 N deep1[23] $end
$var wire 1 N clk $end
$var wire 32 " cyc [31:0] $end
$var wire 96 # wide1 [95:0] $end
$var wire 16 & wide2[0] [15:0] $end
$var wire 16 ' wide2[1] [15:0] $end
$var wire 16 ( wide2[2] [15:0] $end
$var wire 16 ) wide2[3] [15:0] $end
$var wire 16 * wide2[4] [15:0] $end
$var wire 16 + wide2[5] [15:0] $end
$var wire 16 , wide2[6] [15:0] $end
$var wire 16 - wide2[7] [15:0] $end
$var wire 16 . wide2[8] [15:0] $end
$var wire 16 / wide2[9] [15:0] $end
$var wire 16 0 wide2[10] [15:0] $end
$var wire 16 1 wide2[11] [15:0] $end
$var wire 16 2 wide2[12] [15:0] $end
$var wire 16 3 wide2[13] [15:0] $end
$var wire 16 4 wide2[14] [15:0] $end
$var wire 16 5 wide2[15] [15:0] $end
$var wire 1 6 deep1[0] $end
$var wire 1 7 deep1[1] $end
$var wire 1 8 deep1[2] $end
$var wire 1 9 deep1[3] $end
$var wire 1 : deep1[4] $end
$var wire 1 ; deep1[5] $end
$var wire 1 < deep1[6] $end
$var wire 1 = deep1[7] $end
$var wire 1 > deep1[8] $end
$var wire 1 ? deep1[9] $end
$var wire 1 @ deep1[10] $end
$var wire 1 A deep1[11] $end
$var wire 1 B deep1[12] $end
$var wire 1 C deep1[13] $end
$var wire 1 D deep1[14] $end
$var wire 1 E deep1[15] $end
$var wire 1 F deep1[16] $end
$var wire 1 G deep1[17] $end
$var wire 1 H deep1[18] $end
$var wire 1 I deep1[19] $end
$var wire 1 J deep1[20] $end
$var wire 1 K deep1[21] $end
$var wire 1 L deep1[22] $end
$var wire 1 M deep1[23] $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
b00000000000000000000000000000000 #
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 $
b00000000000000000000000000000000 "
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #
b0000000000000000 &
b0000000000000000 '
b0000000000000000 (
b0000000000000000 )
@ -69,7 +70,7 @@ b0000000000000000 2
b0000000000000000 3
b0000000000000000 4
b0000000000000000 5
b0000000000000000 6
06
07
08
09
@ -94,47 +95,46 @@ b0000000000000000 6
0L
0M
0N
0O
#10
b00000000000000000000000000000001 #
1O
b00000000000000000000000000000001 "
1N
#15
0O
0N
#20
b00000000000000000000000000000010 #
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 $
b0000000000000001 )
1:
1O
b00000000000000000000000000000010 "
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 #
b0000000000000001 (
19
1N
#25
0O
0N
#30
b00000000000000000000000000000011 #
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 $
b0000000000000010 )
0:
1O
b00000000000000000000000000000011 "
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 #
b0000000000000010 (
09
1N
#35
0O
0N
#40
b00000000000000000000000000000100 #
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 $
b0000000000000011 )
1:
1O
b00000000000000000000000000000100 "
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 #
b0000000000000011 (
19
1N
#45
0O
0N
#50
b00000000000000000000000000000101 #
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 $
b0000000000000100 )
0:
1O
b00000000000000000000000000000101 "
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 #
b0000000000000100 (
09
1N
#55
0O
0N
#60
b00000000000000000000000000000110 #
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 $
b0000000000000101 )
1:
1O
b00000000000000000000000000000110 "
b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 #
b0000000000000101 (
19
1N

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:09 2026
Tue Apr 14 15:20:43 2026
$end
$version

View File

@ -1,73 +1,73 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module $rootio $end
$var wire 1 # clk $end
$var wire 1 " clk $end
$upscope $end
$scope module foo_pkg $end
$var wire 32 & foo_func__Vstatic__b_current [31:0] $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
$var wire 1 " clk $end
$var wire 32 # cyc [31:0] $end
$scope module sub $end
$var wire 32 % a [31:0] $end
$var wire 32 $ a [31:0] $end
$upscope $end
$upscope $end
$enddefinitions $end
#0
0#
b00000000000000000000000000000000 $
b00000000000000000000010010111100 %
b00000000000000000000000000000000 &
0"
b00000000000000000000000000000000 #
b00000000000000000000010010111100 $
b00000000000000000000000000000000 %
#1
1#
b00000000000000000000000000000001 $
1"
b00000000000000000000000000000001 #
#2
0#
0"
#3
1#
b00000000000000000000000000000010 $
1"
b00000000000000000000000000000010 #
#4
0#
0"
#5
1#
b00000000000000000000000000000011 $
1"
b00000000000000000000000000000011 #
#6
0#
0"
#7
1#
b00000000000000000000000000000100 $
1"
b00000000000000000000000000000100 #
#8
0#
0"
#9
1#
b00000000000000000000000000000101 $
1"
b00000000000000000000000000000101 #
#10
0#
0"
#11
1#
b00000000000000000000000000000110 $
1"
b00000000000000000000000000000110 #
#12
0#
0"
#13
1#
b00000000000000000000000000000111 $
1"
b00000000000000000000000000000111 #
#14
0#
0"
#15
1#
b00000000000000000000000000001000 $
1"
b00000000000000000000000000001000 #
#16
0#
0"
#17
1#
b00000000000000000000000000001001 $
1"
b00000000000000000000000000001001 #
#18
0#
0"
#19
1#
b00000000000000000000000000001010 $
1"
b00000000000000000000000000001010 #
#20
0#
0"

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:18 2026
Tue Apr 14 15:20:43 2026
$end
$version

View File

@ -1,13 +1,13 @@
$version Generated by VerilatedVcd $end
$timescale 1ps $end
$scope module another_top $end
$var wire 1 # b $end
$var wire 1 " b $end
$upscope $end
$scope module t $end
$var wire 1 # a $end
$var wire 1 " a $end
$upscope $end
$enddefinitions $end
#0
0#
0"

View File

@ -1,5 +1,5 @@
$date
Sat Mar 14 09:17:23 2026
Tue Apr 14 15:20:44 2026
$end
$version

Some files were not shown because too many files have changed in this diff Show More