Fix delayed initial assignment (#6929)
This commit is contained in:
parent
a7db9ee32f
commit
bc3c5b32dd
|
|
@ -1247,6 +1247,7 @@ class AstNetlist final : public AstNode {
|
|||
// @astgen ptr := m_nbaEventp : Optional[AstVarScope] // NBA event variable
|
||||
// @astgen ptr := m_nbaEventTriggerp : Optional[AstVarScope] // NBA event trigger
|
||||
// @astgen ptr := m_topScopep : Optional[AstTopScope] // Singleton AstTopScope
|
||||
// @astgen ptr := m_stlFirstIterationp: Optional[AstVarScope] // Settle first iteration flag
|
||||
VTimescale m_timeunit; // Global time unit
|
||||
VTimescale m_timeprecision; // Global time precision
|
||||
bool m_timescaleSpecified = false; // Input HDL specified timescale
|
||||
|
|
@ -1291,6 +1292,8 @@ public:
|
|||
void timeprecisionMerge(FileLine*, const VTimescale& value);
|
||||
void timescaleSpecified(bool specified) { m_timescaleSpecified = specified; }
|
||||
bool timescaleSpecified() const { return m_timescaleSpecified; }
|
||||
AstVarScope* stlFirstIterationp();
|
||||
void clearStlFirstIterationp() { m_stlFirstIterationp = nullptr; }
|
||||
};
|
||||
class AstPackageExport final : public AstNode {
|
||||
// A package export declaration
|
||||
|
|
|
|||
|
|
@ -2547,6 +2547,13 @@ void AstNetlist::createTopScope(AstScope* scopep) {
|
|||
m_topScopep = new AstTopScope{scopep->modp()->fileline(), scopep};
|
||||
scopep->modp()->addStmtsp(v3Global.rootp()->topScopep());
|
||||
}
|
||||
AstVarScope* AstNetlist::stlFirstIterationp() {
|
||||
if (!m_stlFirstIterationp) {
|
||||
m_stlFirstIterationp = topScopep()->scopep()->createTemp("__VstlFirstIteration", 1);
|
||||
}
|
||||
AstVarScope* const vscp = m_stlFirstIterationp;
|
||||
return vscp;
|
||||
}
|
||||
void AstNodeModule::dump(std::ostream& str) const {
|
||||
this->AstNode::dump(str);
|
||||
str << " L" << level();
|
||||
|
|
|
|||
|
|
@ -414,11 +414,11 @@ class EmitCModel final : public EmitCFunc {
|
|||
if (v3Global.hasClasses()) puts("vlSymsp->__Vm_deleter.deleteAll();\n");
|
||||
|
||||
puts("if (VL_UNLIKELY(!vlSymsp->__Vm_didInit)) {\n");
|
||||
puts("vlSymsp->__Vm_didInit = true;\n");
|
||||
puts("VL_DEBUG_IF(VL_DBG_MSGF(\"+ Initial\\n\"););\n");
|
||||
puts(topModNameProtected + "__" + protect("_eval_static") + "(&(vlSymsp->TOP));\n");
|
||||
puts(topModNameProtected + "__" + protect("_eval_initial") + "(&(vlSymsp->TOP));\n");
|
||||
puts(topModNameProtected + "__" + protect("_eval_settle") + "(&(vlSymsp->TOP));\n");
|
||||
puts("vlSymsp->__Vm_didInit = true;\n");
|
||||
puts("}\n");
|
||||
|
||||
if (v3Global.opt.profExec() && !v3Global.opt.hierChild()
|
||||
|
|
|
|||
|
|
@ -179,18 +179,23 @@ EvalLoop createEvalLoop(
|
|||
stmtps = AstCStmt::profExecSectionPush(flp, "loop " + tag);
|
||||
}
|
||||
|
||||
const auto addVar = [&](const std::string& name, int width, uint32_t initVal) {
|
||||
AstVarScope* const vscp = scopeTopp->createTemp("__V" + tag + name, width);
|
||||
const auto addVar = [&](const std::string& name, int width, uint32_t initVal, bool init) {
|
||||
const string tempName{"__V" + tag + name};
|
||||
AstVarScope* const vscp = tempName == "__VstlFirstIteration"
|
||||
? netlistp->stlFirstIterationp()
|
||||
: scopeTopp->createTemp(tempName, width);
|
||||
vscp->varp()->noReset(true);
|
||||
vscp->varp()->isInternal(true);
|
||||
stmtps = AstNode::addNext(stmtps, util::setVar(vscp, initVal));
|
||||
if (init) stmtps = AstNode::addNext(stmtps, util::setVar(vscp, initVal));
|
||||
return vscp;
|
||||
};
|
||||
|
||||
// The iteration counter
|
||||
AstVarScope* const counterp = addVar("IterCount", 32, 0);
|
||||
AstVarScope* const counterp = addVar("IterCount", 32, 0, true);
|
||||
// The first iteration flag - cleared in 'phasePrepp' if used
|
||||
AstVarScope* const firstIterFlagp = addVar("FirstIteration", 1, 1);
|
||||
AstVarScope* const firstIterFlagp = addVar("FirstIteration", 1, 1, true);
|
||||
// Phase function result
|
||||
AstVarScope* const phaseResultp = addVar("PhaseResult", 1, 0, false);
|
||||
|
||||
// The loop
|
||||
{
|
||||
|
|
@ -212,8 +217,17 @@ EvalLoop createEvalLoop(
|
|||
// need to reset it
|
||||
AstCCall* const callp = new AstCCall{flp, phaseFuncp};
|
||||
callp->dtypeSetBit();
|
||||
AstAssign* const resultAssignp
|
||||
= new AstAssign{flp, new AstVarRef{flp, phaseResultp, VAccess::WRITE}, callp};
|
||||
loopp->addStmtsp(resultAssignp);
|
||||
// Clear FirstIteration flag
|
||||
AstAssign* const firstClearp
|
||||
= new AstAssign{flp, new AstVarRef{flp, firstIterFlagp, VAccess::WRITE},
|
||||
new AstConst{flp, AstConst::BitFalse()}};
|
||||
loopp->addStmtsp(firstClearp);
|
||||
// Continues until the continuation flag is clear
|
||||
loopp->addStmtsp(new AstLoopTest{flp, loopp, callp});
|
||||
loopp->addStmtsp(
|
||||
new AstLoopTest{flp, loopp, new AstVarRef{flp, phaseResultp, VAccess::READ}});
|
||||
}
|
||||
|
||||
// Prof-exec section pop
|
||||
|
|
@ -427,7 +441,7 @@ void createSettle(AstNetlist* netlistp, AstCFunc* const initFuncp, SenExprBuilde
|
|||
util::callVoidFunc(stlFuncp));
|
||||
|
||||
// Add the first iteration trigger to the trigger computation function
|
||||
trigKit.addExtraTriggerAssignment(stlLoop.firstIterp, firstIterationTrigger);
|
||||
trigKit.addExtraTriggerAssignment(stlLoop.firstIterp, firstIterationTrigger, false);
|
||||
|
||||
// Add the eval loop to the top function
|
||||
funcp->addStmtsp(stlLoop.stmtsp);
|
||||
|
|
@ -535,7 +549,7 @@ AstNode* createInputCombLoop(AstNetlist* netlistp, AstCFunc* const initFuncp,
|
|||
util::callVoidFunc(icoFuncp));
|
||||
|
||||
// Add the first iteration trigger to the trigger computation function
|
||||
trigKit.addExtraTriggerAssignment(icoLoop.firstIterp, firstIterationTrigger);
|
||||
trigKit.addExtraTriggerAssignment(icoLoop.firstIterp, firstIterationTrigger, false);
|
||||
|
||||
return icoLoop.stmtsp;
|
||||
}
|
||||
|
|
@ -993,6 +1007,9 @@ void schedule(AstNetlist* netlistp) {
|
|||
createEval(netlistp, icoLoopp, trigKit, actKit, nbaKit, obsKit, reactKit, postponedFuncp,
|
||||
timingKit);
|
||||
|
||||
// Step 15: Clean up
|
||||
netlistp->clearStlFirstIterationp();
|
||||
|
||||
// Haven't split static initializer yet
|
||||
util::splitCheck(staticp);
|
||||
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@ public:
|
|||
AstSenTree* newExtraTriggerSenTree(AstVarScope* vscp, uint32_t index) const;
|
||||
|
||||
// Set then extra trigger bit at 'index' to the value of 'vscp', then set 'vscp' to 0
|
||||
void addExtraTriggerAssignment(AstVarScope* vscp, uint32_t index) const;
|
||||
void addExtraTriggerAssignment(AstVarScope* vscp, uint32_t index, bool clear = true) const;
|
||||
};
|
||||
|
||||
// Everything needed for combining timing with static scheduling.
|
||||
|
|
|
|||
|
|
@ -392,7 +392,7 @@ AstSenTree* TriggerKit::newExtraTriggerSenTree(AstVarScope* vscp, uint32_t index
|
|||
return newTriggerSenTree(vscp, {index + m_nSenseWords * WORD_SIZE});
|
||||
}
|
||||
|
||||
void TriggerKit::addExtraTriggerAssignment(AstVarScope* vscp, uint32_t index) const {
|
||||
void TriggerKit::addExtraTriggerAssignment(AstVarScope* vscp, uint32_t index, bool clear) const {
|
||||
index += m_nSenseWords * WORD_SIZE;
|
||||
const uint32_t wordIndex = index / WORD_SIZE;
|
||||
const uint32_t bitIndex = index % WORD_SIZE;
|
||||
|
|
@ -403,12 +403,13 @@ void TriggerKit::addExtraTriggerAssignment(AstVarScope* vscp, uint32_t index) co
|
|||
AstNodeExpr* const trigLhsp = new AstSel{flp, wordp, static_cast<int>(bitIndex), 1};
|
||||
AstNodeExpr* const trigRhsp = new AstVarRef{flp, vscp, VAccess::READ};
|
||||
AstNodeStmt* const setp = new AstAssign{flp, trigLhsp, trigRhsp};
|
||||
// Clear the input variable
|
||||
AstNodeExpr* const vscpLhsp = new AstVarRef{flp, vscp, VAccess::WRITE};
|
||||
AstNodeExpr* const vscpRhsp = new AstConst{flp, AstConst::BitFalse{}};
|
||||
AstNodeStmt* const clrp = new AstAssign{flp, vscpLhsp, vscpRhsp};
|
||||
// Note these are added in reverse order, so 'setp' executes before 'clrp'
|
||||
m_compp->stmtsp()->addHereThisAsNext(clrp);
|
||||
if (clear) {
|
||||
// Clear the input variable
|
||||
AstNodeStmt* const clrp = new AstAssign{flp, new AstVarRef{flp, vscp, VAccess::WRITE},
|
||||
new AstConst{flp, AstConst::BitFalse{}}};
|
||||
// Note these are added in reverse order, so 'setp' executes before 'clrp'
|
||||
m_compp->stmtsp()->addHereThisAsNext(clrp);
|
||||
}
|
||||
m_compp->stmtsp()->addHereThisAsNext(setp);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1202,10 +1202,16 @@ class TimingControlVisitor final : public VNVisitor {
|
|||
new AstAssign{flp, new AstVarRef{flp, tmpVarp, VAccess::WRITE}, tmpAssignRhsp});
|
||||
// If the RHS is different from the currently scheduled value, schedule the new assignment
|
||||
// The generation will increase, effectively 'descheduling' the previous assignment.
|
||||
alwaysp->addStmtsp(new AstIf{flp,
|
||||
new AstNeq{flp, preAssignp->rhsp()->cloneTree(false),
|
||||
new AstVarRef{flp, tmpVarp, VAccess::READ}},
|
||||
forkp->unlinkFrBack()});
|
||||
AstNodeExpr* const didNotInitp
|
||||
= new AstLogNot{flp, new AstCExpr{flp, "vlSymsp->__Vm_didInit", 1}};
|
||||
AstVarRef* const firstIterp
|
||||
= new AstVarRef{flp, m_netlistp->stlFirstIterationp(), VAccess::READ};
|
||||
AstNodeExpr* const schedCondp
|
||||
= new AstLogOr{flp,
|
||||
new AstNeq{flp, preAssignp->rhsp()->cloneTree(false),
|
||||
new AstVarRef{flp, tmpVarp, VAccess::READ}},
|
||||
new AstLogAnd{flp, didNotInitp, firstIterp}};
|
||||
alwaysp->addStmtsp(new AstIf{flp, schedCondp, forkp->unlinkFrBack()});
|
||||
}
|
||||
void visit(AstDisableFork* nodep) override {
|
||||
if (m_hasProcess) return;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"(E)","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"(E)","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"t","addr":"(F)","loc":"d,67:8,67:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"t","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"(E)","stdPackagep":"(F)","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"(E)","stdPackagep":"(F)","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"t","addr":"(G)","loc":"e,7:8,7:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"t","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env python3
|
||||
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||
#
|
||||
# Copyright 2025 by Wilson Snyder. This program is free software; you
|
||||
# can redistribute it and/or modify it under the terms of either the GNU
|
||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||
# Version 2.0.
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
import vltest_bootstrap
|
||||
|
||||
test.scenarios("simulator_st")
|
||||
|
||||
test.compile(timing_loop=True, verilator_flags2=["--timing"])
|
||||
|
||||
test.execute(all_run_flags=["+verilator+rand+reset+0"])
|
||||
test.execute(all_run_flags=["+verilator+rand+reset+1"])
|
||||
for seed in range(1, 5):
|
||||
test.execute(all_run_flags=["+verilator+rand+reset+2", f"+verilator+seed+{seed}"])
|
||||
|
||||
test.passes()
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
// DESCRIPTION: Verilator: Verilog Test module
|
||||
//
|
||||
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||
// any use, without warranty, 2026 by Wilson Snyder.
|
||||
// SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
`define DELAY_INIT_CHECK(foo, bar) \
|
||||
assign #1 bar = foo; \
|
||||
\
|
||||
always @(foo, bar) begin \
|
||||
$display("%d foo %x, bar %x", $time, foo, bar); \
|
||||
end \
|
||||
\
|
||||
initial begin \
|
||||
#5; \
|
||||
if (bar != foo) $stop; \
|
||||
#5 foo = ~foo; \
|
||||
#5; \
|
||||
if (bar != foo) $stop; \
|
||||
#5 foo = ~foo; \
|
||||
#5; \
|
||||
if (bar != foo) $stop; \
|
||||
end \
|
||||
|
||||
|
||||
module t ();
|
||||
reg foo1;
|
||||
wire bar1;
|
||||
initial foo1 = '0;
|
||||
`DELAY_INIT_CHECK(foo1, bar1)
|
||||
|
||||
reg foo2 = '0;
|
||||
wire bar2;
|
||||
`DELAY_INIT_CHECK(foo2, bar2)
|
||||
|
||||
reg foo3 = '0;
|
||||
reg bar3 = '1;
|
||||
`DELAY_INIT_CHECK(foo3, bar3)
|
||||
|
||||
initial begin
|
||||
#30;
|
||||
$write("*-* All Finished *-*\n");
|
||||
$finish;
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"test","addr":"(E)","loc":"d,22:8,22:12","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"test","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"t","addr":"(E)","loc":"d,7:8,7:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"t","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"$root","addr":"(F)","loc":"d,7:8,7:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"$root","level":1,"modPublic":true,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"$root","addr":"(F)","loc":"d,11:8,11:11","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"$root","level":1,"modPublic":true,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"$root","addr":"(F)","loc":"d,11:8,11:11","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"$root","level":1,"modPublic":true,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"(E)","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"$root","addr":"(F)","loc":"d,7:8,7:21","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"$root","level":1,"modPublic":true,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"m","addr":"(E)","loc":"d,7:8,7:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"m","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"top","addr":"(E)","loc":"d,7:8,7:11","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"top","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"m","addr":"(E)","loc":"d,12:8,12:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"m","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
||||
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"UNLINKED","stdPackagep":"UNLINKED","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED","stlFirstIterationp":"UNLINKED",
|
||||
"modulesp": [
|
||||
{"type":"MODULE","name":"mh2","addr":"(E)","loc":"d,18:8,18:11","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"mh2","level":1,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
||||
"stmtsp": [
|
||||
|
|
|
|||
Loading…
Reference in New Issue