From 74edc5cff4724f3f73246801a89243691aa71a48 Mon Sep 17 00:00:00 2001 From: Yutetsu TAKATSUKASA Date: Sat, 18 Jan 2020 11:37:22 +0900 Subject: [PATCH] When split unpacked arrays, use SplitUnpackedVarVisitor just once --- src/V3SplitVar.cpp | 236 ++- test_regress/t/t_split_var_0.pl | 4 +- test_regress/t/t_split_var_0.v | 13 +- test_regress/t/t_split_var_2_trace.out | 2009 +++++++++++------------- test_regress/t/t_split_var_2_trace.pl | 4 +- 5 files changed, 1082 insertions(+), 1184 deletions(-) diff --git a/src/V3SplitVar.cpp b/src/V3SplitVar.cpp index 88496284a..acabf1384 100644 --- a/src/V3SplitVar.cpp +++ b/src/V3SplitVar.cpp @@ -128,10 +128,17 @@ public: class SplitUnpackedVarVisitor : public AstNVisitor { AstNodeModule* m_modp; // current module - int m_numSplit; // total number of split variable - bool m_firstRun; // true for the first pass + int m_numSplit; // total number of split variable // key:variable to be split. value:location where the variable is referenced. vl_unordered_map > m_refs; + typedef vl_unordered_set AssignSet; + AssignSet m_assigns; // at least LHS or RHS will be split + + // used when traversing LHS and RHS of assignment. true if func/task is included + bool m_taskFuncFound; + // used when traversing LHS and RHS of assignment. added to this set. + typedef vl_unordered_set TargetVarSet; + TargetVarSet m_foundTargetVar; // This visitor is used before V3Const::constifyAllLint(), // some parameters need to be resolved here, but don't abuse this function. @@ -152,8 +159,15 @@ class SplitUnpackedVarVisitor : public AstNVisitor { } virtual void visit(AstNode* nodep) VL_OVERRIDE { iterateChildren(nodep); } + + virtual void visit(AstNodeFTaskRef* nodep) VL_OVERRIDE { + m_taskFuncFound = true; + iterateChildren(nodep); + } + virtual void visit(AstNodeModule* nodep) VL_OVERRIDE { UASSERT_OBJ(m_modp == NULL, m_modp, "Nested module declration"); + UASSERT_OBJ(m_refs.empty(), nodep, "The last module didn't finish split()"); m_modp = nodep; std::vector > vars = ScanPragmaVisitor::scan(nodep); for (size_t i = 0; i < vars.size(); ++i) { @@ -173,35 +187,17 @@ class SplitUnpackedVarVisitor : public AstNVisitor { VL_DO_DANGLING(vars[i].first->unlinkFrBack()->deleteTree(), vars[i].first); } } - if (!vars.empty()) { // need to check this module only when split_var pragma exists in this module. + if (!m_refs.empty()) { // need to check this module only when split_var pragma exists in this module. iterateChildren(nodep); split(); } m_modp = NULL; } + virtual void visit(AstVarRef* nodep) VL_OVERRIDE { AstVar* varp = nodep->varp(); if (m_refs.find(varp) == m_refs.end()) return; // variable without split_var pragma - - if (m_firstRun) - nodep->v3warn( - SPLITVAR, - "Variable " << varp->prettyNameQ() - << " will not be split because the entire unpacked array is referred." - " Such access is not supported yet.\n"); - m_refs.erase(varp); - } - - static void splitSimpleAssign(AstNodeAssign* asnp, AstVarRef* lhsp, AstVarRef* rhsp, - int lstart, int rstart, int num) { - for (int i = 0; i < num; ++i) { - AstVarRef* lrefp = new AstVarRef(lhsp->fileline(), lhsp->varp(), true); - AstVarRef* rrefp = new AstVarRef(rhsp->fileline(), rhsp->varp(), false); - AstArraySel* lselp = new AstArraySel(lhsp->fileline(), lrefp, lstart + i); - AstArraySel* rselp = new AstArraySel(rhsp->fileline(), rrefp, rstart + i); - // the added new assignment statement will be visited later. - asnp->addNext(asnp->cloneType(lselp, rselp)); - } + m_foundTargetVar.insert(varp); } // Unroll assignments of SliceSel or entire unpacked array to multiple assignment @@ -210,34 +206,34 @@ class SplitUnpackedVarVisitor : public AstNVisitor { AstSliceSel* rsel = VN_CAST(nodep->rhsp(), SliceSel); AstVarRef* lhsp = VN_CAST(lsel ? lsel->fromp() : nodep->lhsp(), VarRef); AstVarRef* rhsp = VN_CAST(rsel ? rsel->fromp() : nodep->rhsp(), VarRef); - // unless simple assignment, nothing to do in this function - if (!lhsp || !rhsp) { + // at least either LHS or RHS must be VarRef or SliceSel to unroll this assignment + if (!lhsp && !rhsp) { iterateChildren(nodep); return; } + m_taskFuncFound = false; + m_foundTargetVar.clear(); + iterateChildren(nodep); - // if nodep is a simple assignment of variables without split_var pragma, quick exit - if (m_refs.find(lhsp->varp()) == m_refs.end() && m_refs.find(rhsp->varp()) == m_refs.end()) + // If LHS or RHS includes function, this assign statement can not be split/unrolled + // because the function may have side effect. + // e.g. unpacked_array[some_func()] = rhs; or unpacked_array = some_func(); + if (m_taskFuncFound) { + for (TargetVarSet::iterator it = m_foundTargetVar.begin(), + it_end = m_foundTargetVar.end(); + it != it_end; ++it) { + (*it)->v3warn( + SPLITVAR, + "Variable " << (*it)->prettyNameQ() + << " will not be split because it is used with function or task."); + m_refs.erase(*it); + } + m_foundTargetVar.clear(); return; + } - int lstart, lnum, rstart, rnum; - if (lsel) { - lstart = lsel->declRange().lo(); - lnum = lsel->declRange().elements(); - } else { // LHS is entire array - lstart = 0; - lnum = outerMostSizeOfUnpackedArray(lhsp->varp()); - } - if (rsel) { - rstart = rsel->declRange().lo(); - rnum = rsel->declRange().elements(); - } else { // RHS is entire array - rstart = 0; - rnum = outerMostSizeOfUnpackedArray(rhsp->varp()); - } - if (lnum != rnum) return; // strange. V3Slice will show proper diagnosis - splitSimpleAssign(nodep, lhsp, rhsp, lstart, rstart, lnum); - VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep); + // If an unpacked array with split_var pragma is found, this assignment needs to be split. + if (!m_foundTargetVar.empty()) m_assigns.insert(nodep); } virtual void visit(AstArraySel* nodep) VL_OVERRIDE { @@ -250,24 +246,87 @@ class SplitUnpackedVarVisitor : public AstNVisitor { AstVar* varp = vrefp->varp(); if (m_refs.find(varp) == m_refs.end()) return; // variable without split_var pragma + // nodep->bitp() is sometimes AstSel consists of AstAdd/Sub and parameters. + // constify can solve it. AstConst* indexp = constifyIfNot(nodep->bitp()); if (indexp) { // OK m_refs[varp].push_back(nodep); } else { - if (m_firstRun) - nodep->bitp()->v3warn( - SPLITVAR, - "Variable " - << vrefp->prettyNameQ() - << " will not be split because index cannot be determined statically."); + nodep->bitp()->v3warn( + SPLITVAR, + "Variable " + << vrefp->prettyNameQ() + << " will not be split because index cannot be determined statically."); m_refs.erase(varp); } } - // The actual splitting operation is done in this function. - void split() { - for (vl_unordered_map >::iterator it = m_refs.begin(), - it_end = m_refs.end(); + + static AstArraySel* createArraySel(AstNode* fromp, int idx) { + if (AstSliceSel* selp = VN_CAST(fromp, SliceSel)) { // fuse + // if fromp is AstSliceSel, fuse ArraySel and AstSliceSel. + return new AstArraySel(selp->fileline(), selp->fromp()->cloneTree(false), + idx + selp->declRange().lo()); + } + return new AstArraySel(fromp->fileline(), fromp->cloneTree(false), idx); + } + + void splitSimpleAssign(AstNodeAssign* asnp, int lstart, int rstart, int num) { + AstNode* lhsp = asnp->lhsp(); + AstNode* rhsp = asnp->rhsp(); + for (int i = 0; i < num; ++i) { + AstArraySel* lselp = createArraySel(lhsp, lstart + i); + AstArraySel* rselp = createArraySel(rhsp, rstart + i); + AstNodeAssign* newAssignp = VN_CAST(asnp->cloneType(lselp, rselp), NodeAssign); + asnp->addNext(newAssignp); + // Add new ArraySels which may be made inside cloneTree() + iterateChildren(newAssignp); + } + } + + void splitAssign(const AssignSet& assigns) { + for (AssignSet::const_iterator it = assigns.begin(), it_end = assigns.end(); it != it_end; + ++it) { + AstNodeAssign* nodep = *it; + AstSliceSel* lsel = VN_CAST(nodep->lhsp(), SliceSel); + AstSliceSel* rsel = VN_CAST(nodep->rhsp(), SliceSel); + AstVarRef* lhsp = VN_CAST(lsel ? lsel->fromp() : nodep->lhsp(), VarRef); + AstVarRef* rhsp = VN_CAST(rsel ? rsel->fromp() : nodep->rhsp(), VarRef); + + int lstart = 0, lnum = -1, rstart = 0, rnum = -1; + if (lsel) { + lstart = lsel->declRange().lo(); + lnum = lsel->declRange().elements(); + } else if (lhsp) { // LHS is entire array + lstart = 0; + lnum = outerMostSizeOfUnpackedArray(lhsp->varp()); + } + if (rsel) { + rstart = rsel->declRange().lo(); + rnum = rsel->declRange().elements(); + } else if (rhsp) { // RHS is entire array + rstart = 0; + rnum = outerMostSizeOfUnpackedArray(rhsp->varp()); + } + UASSERT_OBJ(lnum >= 0 || rnum >= 0, nodep, + "At least either side must be VarRef or SliceSel"); + splitSimpleAssign(nodep, lstart, rstart, std::max(lnum, rnum)); + // don't delete here because ArraySel linked form nodep may be in m_refs + // delete everything after replacement has done + nodep->unlinkFrBack(); + } + } + + int collapseUnpackedArray() { + AssignSet toBeDeleted; + m_assigns.swap(toBeDeleted); // now m_assigns is empty + splitAssign(toBeDeleted); + vl_unordered_map > curRefs; + m_refs.swap(curRefs); + // now m_refs is empty. split var will be added to m_refs for the next iteration. + int numSplit = 0; + for (vl_unordered_map >::iterator it = curRefs.begin(), + it_end = curRefs.end(); it != it_end; ++it) { UINFO(3, "In module " << m_modp->name() << " var " << it->first->prettyNameQ() << " which has " << it->second.size() @@ -275,20 +334,27 @@ class SplitUnpackedVarVisitor : public AstNVisitor { AstVar* varp = it->first; AstNode* insertp = varp; AstUnpackArrayDType* dtypep = VN_CAST(varp->dtypep(), UnpackArrayDType); + AstNodeDType* subTypep = dtypep->subDTypep(); + const bool needNext = VN_IS(subTypep, UnpackArrayDType); // still unpacked array. std::vector vars; + std::vector newSels; // Add the split variables for (vlsint32_t i = 0; i <= dtypep->msb() - dtypep->lsb(); ++i) { // const std::string name = varp->name() + "__BRA__" + AstNode::encodeNumber(i + dtypep->lsb()) + "__KET__"; // unpacked array is traced as var(idx). const std::string name = varp->name() + AstNode::encodeName('(' + cvtToStr(i + dtypep->lsb()) + ')'); - AstVar* newp = new AstVar(varp->fileline(), varp->varType(), name, dtypep->subDTypep()); + AstVar* newp = new AstVar(varp->fileline(), varp->varType(), name, subTypep); newp->trace(varp->isTrace()); insertp->addNextHere(newp); if (newp->width() == 1) { // no need to try splitting insertp = newp; - } else { + } else if (!needNext) { newp->addNextHere(insertp = new AstPragma(varp->fileline(), AstPragmaType::SPLIT_VAR)); } + if (needNext) { + m_refs.insert(std::make_pair(newp, std::vector())); // split in the next round + UINFO(5, "In module " << m_modp->name() << " var " << newp->prettyNameQ() << " is added\n"); + } vars.push_back(newp); } @@ -303,25 +369,49 @@ class SplitUnpackedVarVisitor : public AstNVisitor { AstVarRef* new_vref = new AstVarRef(selp->fileline(), vars.at(idx), vrefp->lvalue()); selp->replaceWith(new_vref); VL_DO_DANGLING(selp->deleteTree(), selp); + // it's safe to visit again because m_refs and m_assigns are already cleared. + if (needNext) { + UINFO(5, "In module " << m_modp->name() << " var " << new_vref->backp() << " is tracing\n"); + iterate(new_vref->backp()); + } } VL_DO_DANGLING(varp->unlinkFrBack()->deleteTree(), varp); - ++m_numSplit; + ++numSplit; } - m_refs.clear(); // done + // it's time to delete all assigns + for (AssignSet::iterator it = toBeDeleted.begin(), it_end = toBeDeleted.end(); + it != it_end; ++it) { + (*it)->deleteTree(); + } + toBeDeleted.clear(); // instead of VL_DANGLING + return numSplit; + } + + // The actual splitting operation is done in this function. + void split() { + int numSplit = -1; + do { + const int n = collapseUnpackedArray(); + if (numSplit < 0) // update m_numSplit in the first iteration of this module + m_numSplit += n; + numSplit = n; + } while (numSplit > 0); } public: - SplitUnpackedVarVisitor(AstNetlist* nodep, bool firstRun) + explicit SplitUnpackedVarVisitor(AstNetlist* nodep) : m_modp(NULL) , m_numSplit(0) - , m_firstRun(firstRun) { + , m_refs() + , m_assigns() + , m_taskFuncFound(false) + , m_foundTargetVar() { iterate(nodep); } ~SplitUnpackedVarVisitor() { UASSERT(m_refs.empty(), "Don't forget to call split()"); - if (m_firstRun) V3Stats::addStat("SplitVar, Split unpacked arrays", m_numSplit); + V3Stats::addStat("SplitVar, Split unpacked arrays", m_numSplit); } - int numSplit() const { return m_numSplit; } VL_DEBUG_FUNC; // Declare debug() // Check if the passed variable can be split. @@ -474,6 +564,7 @@ class SplitPackedVarVisitor : public AstNVisitor { } virtual void visit(AstNodeModule* nodep) VL_OVERRIDE { UASSERT_OBJ(m_modp == NULL, m_modp, "Nested module declration"); + UASSERT_OBJ(m_refs.empty(), nodep, "The last module didn't finish split()"); m_modp = nodep; UINFO(3, "Start analyzing module " << nodep->prettyName() << '\n'); std::vector > vars = ScanPragmaVisitor::scan(nodep); @@ -495,7 +586,7 @@ class SplitPackedVarVisitor : public AstNVisitor { // consume the pragma here anyway. VL_DO_DANGLING(pragmap->unlinkFrBack()->deleteTree(), vars[i].first); } - if (!vars.empty()) { // need to check this module only when split_var pragma exists in this module. + if (!m_refs.empty()) { // need to check this module only when split_var pragma exists in this module. iterateChildren(nodep); split(); } @@ -529,8 +620,10 @@ class SplitPackedVarVisitor : public AstNVisitor { << vrefp->prettyNameQ() << " will not be split" " because bit range cannot be determined statically."); - if(!consts[0]) UINFO(4, "LSB " << nodep->lsbp() << " is expected to be constant, but not\n"); - if(!consts[1]) UINFO(4, "WIDTH " << nodep->widthp() << " is expected to be constant, but not\n"); + if (!consts[0]) + UINFO(4, "LSB " << nodep->lsbp() << " is expected to be constant, but not\n"); + if (!consts[1]) + UINFO(4, "WIDTH " << nodep->widthp() << " is expected to be constant, but not\n"); m_refs.erase(varp); } } @@ -671,15 +764,10 @@ public: // Split class functions void V3SplitVar::splitUnpackedVariable(AstNetlist* nodep) { UINFO(2, __FUNCTION__ << ": " << endl); - // SplitUnpackedVarVisitor collapses one-dimension per one scan. so repeat until nothing to do. - for (int trial = 0, done = 0; done == 0; ++trial) { - { - SplitUnpackedVarVisitor visitor(nodep, trial == 0); - UINFO(3, visitor.numSplit() << " variables are split in trial " << trial << '\n'); - if (visitor.numSplit() == 0) done = 1; // nothing to do anymore - } // Destruct before checking - V3Global::dumpCheckGlobalTree("split_var", 0, v3Global.opt.dumpTreeLevel(__FILE__) >= 9); + { + SplitUnpackedVarVisitor visitor(nodep); } + V3Global::dumpCheckGlobalTree("split_var", 0, v3Global.opt.dumpTreeLevel(__FILE__) >= 9); } void V3SplitVar::splitPackedVariable(AstNetlist* nodep) { diff --git a/test_regress/t/t_split_var_0.pl b/test_regress/t/t_split_var_0.pl index 6fe4e27b6..afe833e2e 100755 --- a/test_regress/t/t_split_var_0.pl +++ b/test_regress/t/t_split_var_0.pl @@ -20,7 +20,7 @@ execute( check_finished => 1, ); -file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 84); -file_grep($Self->{stats}, qr/SplitVar,\s+Split unpacked arrays\s+(\d+)/i, 13); +file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 156); +file_grep($Self->{stats}, qr/SplitVar,\s+Split unpacked arrays\s+(\d+)/i, 15); ok(1); 1; diff --git a/test_regress/t/t_split_var_0.v b/test_regress/t/t_split_var_0.v index 6599bb663..5a9fc1346 100644 --- a/test_regress/t/t_split_var_0.v +++ b/test_regress/t/t_split_var_0.v @@ -85,6 +85,13 @@ module barshift_2d_unpacked #(parameter depth = 2, localparam width = 2**depth) reg [width-1:0]tmp8[depth+offset+3:offset-1][offset:offset+n-1]; /*verilator split_var*/ reg [width-1:0]tmp9[depth+offset+3:offset+3][offset:offset+n-1]; /*verilator split_var*/ reg [width-1:0]tmp10[depth+offset:offset][offset:offset+n-1]; /*verilator split_var*/ + // because tmp11 is not split for testing mixture usage of split_var and no-spliv_ar, + // UNOPTFLAT appears, but it's fine. + /*verilator lint_off UNOPTFLAT*/ + reg [width-1:0]tmp11[-1:1][depth+offset:offset][offset:offset+n-1]; + /*verilator lint_on UNOPTFLAT*/ + reg [width-1:0]tmp12[-1:0][depth+offset:offset][offset:offset+n-1]; /*verilator split_var*/ + reg [width-1:0]tmp13[depth+offset:offset][offset:offset+n-1]; /*verilator split_var*/ generate for(genvar i = 0; i < depth; ++i) begin @@ -112,7 +119,11 @@ module barshift_2d_unpacked #(parameter depth = 2, localparam width = 2**depth) assign tmp8[depth+offset+1:offset+1] = tmp7; assign tmp9 = tmp8[depth+offset+1:offset+1]; assign tmp10[depth+offset:offset] = tmp9[depth+offset+3:offset+3]; - assign out = tmp10[depth+offset][offset]; + assign tmp11[1] = tmp10; + assign tmp11[-1] = tmp11[1]; + assign tmp11[0] = tmp11[-1]; + assign tmp12 = tmp11[0:1]; + assign out = tmp12[1][depth+offset][offset]; endmodule diff --git a/test_regress/t/t_split_var_2_trace.out b/test_regress/t/t_split_var_2_trace.out index 499f122fd..2ef18c824 100644 --- a/test_regress/t/t_split_var_2_trace.out +++ b/test_regress/t/t_split_var_2_trace.out @@ -1,274 +1,310 @@ $version Generated by VerilatedVcd $end -$date Fri Jan 17 06:25:15 2020 +$date Sat Jan 18 18:46:00 2020 $end $timescale 1ns $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 1+ depth [31:0] $end - $var wire 64 Q+ exp [63:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 A+ numsub [31:0] $end - $var wire 8 [ out(0) [7:0] $end - $var wire 8 \ out(1) [7:0] $end - $var wire 8 ] out(2) [7:0] $end - $var wire 8 ^ out(3) [7:0] $end - $var wire 8 _ out(4) [7:0] $end - $var wire 8 ` out(5) [7:0] $end - $var wire 8 a out(6) [7:0] $end - $var wire 8 b out(7) [7:0] $end - $var wire 8 c out(8) [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 1 #( clk $end + $var wire 32 +( depth [31:0] $end + $var wire 64 K( exp [63:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 ;( numsub [31:0] $end + $var wire 8 %% out(0) [7:0] $end + $var wire 8 &% out(1) [7:0] $end + $var wire 8 '% out(2) [7:0] $end + $var wire 8 (% out(3) [7:0] $end + $var wire 8 )% out(4) [7:0] $end + $var wire 8 *% out(5) [7:0] $end + $var wire 8 +% out(6) [7:0] $end + $var wire 8 ,% out(7) [7:0] $end + $var wire 8 -% out(8) [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 32 3( width [31:0] $end $scope module always_block $end - $var wire 1 w* failed $end + $var wire 1 q' failed $end $scope module unnamedblk1 $end - $var wire 32 !+ i [31:0] $end + $var wire 32 y' i [31:0] $end $upscope $end $upscope $end $scope module i_var_decl_with_init $end - $var wire 32 ; var0 [-1:30] $end - $var wire 32 K var1 [30:-1] $end - $var wire 32 C var2 [-1:30] $end - $var wire 32 S var3 [30:-1] $end + $var wire 32 # var0 [-1:30] $end + $var wire 32 3 var1 [30:-1] $end + $var wire 32 + var2 [-1:30] $end + $var wire 32 ; var3 [30:-1] $end $upscope $end $scope module shifter0 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 a+ offset [31:0] $end - $var wire 8 M! out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 8 ]! tmp(-1)[7:0] [7:0] $end - $var wire 8 U! tmp(-2)[7:0] [7:0] $end - $var wire 8 I+ tmp(-3)[7:0] [7:0] $end - $var wire 8 M! tmp(0)[7:0] [7:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 [( offset [31:0] $end + $var wire 8 K out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 8 [ tmp(-1)[7:0] [7:0] $end + $var wire 8 S tmp(-2)[7:0] [7:0] $end + $var wire 8 C( tmp(-3)[7:0] [7:0] $end + $var wire 8 K tmp(0)[7:0] [7:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter1 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 a+ offset [31:0] $end - $var wire 8 e! out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 8 u! tmp(-1)[7:0] [7:0] $end - $var wire 8 m! tmp(-2)[7:0] [7:0] $end - $var wire 8 I+ tmp(-3)[7:0] [7:0] $end - $var wire 8 e! tmp(0)[7:0] [7:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 [( offset [31:0] $end + $var wire 8 c out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 8 s tmp(-1)[7:0] [7:0] $end + $var wire 8 k tmp(-2)[7:0] [7:0] $end + $var wire 8 C( tmp(-3)[7:0] [7:0] $end + $var wire 8 c tmp(0)[7:0] [7:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter2 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 i+ offset [31:0] $end - $var wire 8 }! out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 8 I+ tmp(1)[7:0] [7:0] $end - $var wire 8 '" tmp(2)[7:0] [7:0] $end - $var wire 8 /" tmp(3)[7:0] [7:0] $end - $var wire 8 }! tmp(4)[7:0] [7:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 c( offset [31:0] $end + $var wire 8 { out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 8 C( tmp(1)[7:0] [7:0] $end + $var wire 8 %! tmp(2)[7:0] [7:0] $end + $var wire 8 -! tmp(3)[7:0] [7:0] $end + $var wire 8 { tmp(4)[7:0] [7:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter3 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 1+ n [31:0] $end - $var wire 32 i+ offset [31:0] $end - $var wire 8 7" out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 8 I+ tmp0(1)(1)[7:0] [7:0] $end - $var wire 8 I+ tmp0(1)(2)[7:0] [7:0] $end - $var wire 8 I+ tmp0(1)(3)[7:0] [7:0] $end - $var wire 8 ?" tmp0(2)(1)[7:0] [7:0] $end - $var wire 8 G" tmp0(2)(2)[7:0] [7:0] $end - $var wire 8 O" tmp0(2)(3)[7:0] [7:0] $end - $var wire 8 W" tmp0(3)(1)[7:0] [7:0] $end - $var wire 8 _" tmp0(3)(2)[7:0] [7:0] $end - $var wire 8 g" tmp0(3)(3)[7:0] [7:0] $end - $var wire 8 o" tmp0(4)(1)[7:0] [7:0] $end - $var wire 8 w" tmp0(4)(2)[7:0] [7:0] $end - $var wire 8 !# tmp0(4)(3)[7:0] [7:0] $end - $var wire 8 # tmp1(1)(1) [7:0] $end - $var wire 8 $ tmp1(1)(2) [7:0] $end - $var wire 8 % tmp1(1)(3) [7:0] $end - $var wire 8 )# tmp1(2)(1) [7:0] $end - $var wire 8 *# tmp1(2)(2) [7:0] $end - $var wire 8 +# tmp1(2)(3) [7:0] $end - $var wire 8 A# tmp1(3)(1) [7:0] $end - $var wire 8 B# tmp1(3)(2) [7:0] $end - $var wire 8 C# tmp1(3)(3) [7:0] $end - $var wire 8 Y# tmp1(4)(1) [7:0] $end - $var wire 8 Z# tmp1(4)(2) [7:0] $end - $var wire 8 [# tmp1(4)(3) [7:0] $end - $var wire 8 {( tmp10(1)(1)[7:0] [7:0] $end - $var wire 8 %) tmp10(1)(2)[7:0] [7:0] $end - $var wire 8 -) tmp10(1)(3)[7:0] [7:0] $end - $var wire 8 5) tmp10(2)(1)[7:0] [7:0] $end - $var wire 8 =) tmp10(2)(2)[7:0] [7:0] $end - $var wire 8 E) tmp10(2)(3)[7:0] [7:0] $end - $var wire 8 M) tmp10(3)(1)[7:0] [7:0] $end - $var wire 8 U) tmp10(3)(2)[7:0] [7:0] $end - $var wire 8 ]) tmp10(3)(3)[7:0] [7:0] $end - $var wire 8 7" tmp10(4)(1)[7:0] [7:0] $end - $var wire 8 e) tmp10(4)(2)[7:0] [7:0] $end - $var wire 8 m) tmp10(4)(3)[7:0] [7:0] $end - $var wire 8 q# tmp2(1)(1) [7:0] $end - $var wire 8 y# tmp2(1)(2) [7:0] $end - $var wire 8 #$ tmp2(1)(3) [7:0] $end - $var wire 8 +$ tmp2(2)(1) [7:0] $end - $var wire 8 3$ tmp2(2)(2) [7:0] $end - $var wire 8 ;$ tmp2(2)(3) [7:0] $end - $var wire 8 C$ tmp2(3)(1) [7:0] $end - $var wire 8 K$ tmp2(3)(2) [7:0] $end - $var wire 8 S$ tmp2(3)(3) [7:0] $end - $var wire 8 [$ tmp2(4)(1) [7:0] $end - $var wire 8 c$ tmp2(4)(2) [7:0] $end - $var wire 8 k$ tmp2(4)(3) [7:0] $end - $var wire 8 s$ tmp3(1)(1) [7:0] $end - $var wire 8 t$ tmp3(1)(2) [7:0] $end - $var wire 8 u$ tmp3(1)(3) [7:0] $end - $var wire 8 -% tmp3(2)(1) [7:0] $end - $var wire 8 .% tmp3(2)(2) [7:0] $end - $var wire 8 /% tmp3(2)(3) [7:0] $end - $var wire 8 E% tmp3(3)(1) [7:0] $end - $var wire 8 F% tmp3(3)(2) [7:0] $end - $var wire 8 G% tmp3(3)(3) [7:0] $end - $var wire 8 ]% tmp3(4)(1) [7:0] $end - $var wire 8 ^% tmp3(4)(2) [7:0] $end - $var wire 8 _% tmp3(4)(3) [7:0] $end - $var wire 8 u% tmp4(1)(1) [7:0] $end - $var wire 8 v% tmp4(1)(2) [7:0] $end - $var wire 8 w% tmp4(1)(3) [7:0] $end - $var wire 8 /& tmp4(2)(1) [7:0] $end - $var wire 8 0& tmp4(2)(2) [7:0] $end - $var wire 8 1& tmp4(2)(3) [7:0] $end - $var wire 8 G& tmp4(3)(1) [7:0] $end - $var wire 8 H& tmp4(3)(2) [7:0] $end - $var wire 8 I& tmp4(3)(3) [7:0] $end - $var wire 8 _& tmp4(4)(1) [7:0] $end - $var wire 8 `& tmp4(4)(2) [7:0] $end - $var wire 8 a& tmp4(4)(3) [7:0] $end - $var wire 8 w& tmp5(1)(1) [7:0] $end - $var wire 8 !' tmp5(1)(2) [7:0] $end - $var wire 8 )' tmp5(1)(3) [7:0] $end - $var wire 8 1' tmp5(2)(1) [7:0] $end - $var wire 8 9' tmp5(2)(2) [7:0] $end - $var wire 8 A' tmp5(2)(3) [7:0] $end - $var wire 8 I' tmp5(3)(1) [7:0] $end - $var wire 8 Q' tmp5(3)(2) [7:0] $end - $var wire 8 Y' tmp5(3)(3) [7:0] $end - $var wire 8 a' tmp5(4)(1) [7:0] $end - $var wire 8 i' tmp5(4)(2) [7:0] $end - $var wire 8 q' tmp5(4)(3) [7:0] $end - $var wire 8 y' tmp6(1)(1) [7:0] $end - $var wire 8 z' tmp6(1)(2) [7:0] $end - $var wire 8 {' tmp6(1)(3) [7:0] $end - $var wire 8 3( tmp6(2)(1) [7:0] $end - $var wire 8 4( tmp6(2)(2) [7:0] $end - $var wire 8 5( tmp6(2)(3) [7:0] $end - $var wire 8 K( tmp6(3)(1) [7:0] $end - $var wire 8 L( tmp6(3)(2) [7:0] $end - $var wire 8 M( tmp6(3)(3) [7:0] $end - $var wire 8 c( tmp6(4)(1) [7:0] $end - $var wire 8 d( tmp6(4)(2) [7:0] $end - $var wire 8 e( tmp6(4)(3) [7:0] $end - $var wire 8 {( tmp7(2)(1)[7:0] [7:0] $end - $var wire 8 %) tmp7(2)(2)[7:0] [7:0] $end - $var wire 8 -) tmp7(2)(3)[7:0] [7:0] $end - $var wire 8 5) tmp7(3)(1)[7:0] [7:0] $end - $var wire 8 =) tmp7(3)(2)[7:0] [7:0] $end - $var wire 8 E) tmp7(3)(3)[7:0] [7:0] $end - $var wire 8 M) tmp7(4)(1)[7:0] [7:0] $end - $var wire 8 U) tmp7(4)(2)[7:0] [7:0] $end - $var wire 8 ]) tmp7(4)(3)[7:0] [7:0] $end - $var wire 8 7" tmp7(5)(1)[7:0] [7:0] $end - $var wire 8 e) tmp7(5)(2)[7:0] [7:0] $end - $var wire 8 m) tmp7(5)(3)[7:0] [7:0] $end - $var wire 8 q+ tmp8(0)(1)[7:0] [7:0] $end - $var wire 8 y+ tmp8(0)(2)[7:0] [7:0] $end - $var wire 8 #, tmp8(0)(3)[7:0] [7:0] $end - $var wire 8 +, tmp8(1)(1)[7:0] [7:0] $end - $var wire 8 3, tmp8(1)(2)[7:0] [7:0] $end - $var wire 8 ;, tmp8(1)(3)[7:0] [7:0] $end - $var wire 8 {( tmp8(2)(1)[7:0] [7:0] $end - $var wire 8 %) tmp8(2)(2)[7:0] [7:0] $end - $var wire 8 -) tmp8(2)(3)[7:0] [7:0] $end - $var wire 8 5) tmp8(3)(1)[7:0] [7:0] $end - $var wire 8 =) tmp8(3)(2)[7:0] [7:0] $end - $var wire 8 E) tmp8(3)(3)[7:0] [7:0] $end - $var wire 8 M) tmp8(4)(1)[7:0] [7:0] $end - $var wire 8 U) tmp8(4)(2)[7:0] [7:0] $end - $var wire 8 ]) tmp8(4)(3)[7:0] [7:0] $end - $var wire 8 7" tmp8(5)(1)[7:0] [7:0] $end - $var wire 8 e) tmp8(5)(2)[7:0] [7:0] $end - $var wire 8 m) tmp8(5)(3)[7:0] [7:0] $end - $var wire 8 C, tmp8(6)(1)[7:0] [7:0] $end - $var wire 8 K, tmp8(6)(2)[7:0] [7:0] $end - $var wire 8 S, tmp8(6)(3)[7:0] [7:0] $end - $var wire 8 [, tmp8(7)(1)[7:0] [7:0] $end - $var wire 8 c, tmp8(7)(2)[7:0] [7:0] $end - $var wire 8 k, tmp8(7)(3)[7:0] [7:0] $end - $var wire 8 {( tmp9(4)(1)[7:0] [7:0] $end - $var wire 8 %) tmp9(4)(2)[7:0] [7:0] $end - $var wire 8 -) tmp9(4)(3)[7:0] [7:0] $end - $var wire 8 5) tmp9(5)(1)[7:0] [7:0] $end - $var wire 8 =) tmp9(5)(2)[7:0] [7:0] $end - $var wire 8 E) tmp9(5)(3)[7:0] [7:0] $end - $var wire 8 M) tmp9(6)(1)[7:0] [7:0] $end - $var wire 8 U) tmp9(6)(2)[7:0] [7:0] $end - $var wire 8 ]) tmp9(6)(3)[7:0] [7:0] $end - $var wire 8 7" tmp9(7)(1)[7:0] [7:0] $end - $var wire 8 e) tmp9(7)(2)[7:0] [7:0] $end - $var wire 8 m) tmp9(7)(3)[7:0] [7:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 +( n [31:0] $end + $var wire 32 c( offset [31:0] $end + $var wire 8 m% out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 8 C( tmp0(1)(1)[7:0] [7:0] $end + $var wire 8 C( tmp0(1)(2)[7:0] [7:0] $end + $var wire 8 C( tmp0(1)(3)[7:0] [7:0] $end + $var wire 8 e! tmp0(2)(1)[7:0] [7:0] $end + $var wire 8 m! tmp0(2)(2)[7:0] [7:0] $end + $var wire 8 u! tmp0(2)(3)[7:0] [7:0] $end + $var wire 8 M! tmp0(3)(1)[7:0] [7:0] $end + $var wire 8 U! tmp0(3)(2)[7:0] [7:0] $end + $var wire 8 ]! tmp0(3)(3)[7:0] [7:0] $end + $var wire 8 5! tmp0(4)(1)[7:0] [7:0] $end + $var wire 8 =! tmp0(4)(2)[7:0] [7:0] $end + $var wire 8 E! tmp0(4)(3)[7:0] [7:0] $end + $var wire 8 k( tmp1(1)(1)[7:0] [7:0] $end + $var wire 8 s( tmp1(1)(2)[7:0] [7:0] $end + $var wire 8 {( tmp1(1)(3)[7:0] [7:0] $end + $var wire 8 e! tmp1(2)(1)[7:0] [7:0] $end + $var wire 8 m! tmp1(2)(2)[7:0] [7:0] $end + $var wire 8 u! tmp1(2)(3)[7:0] [7:0] $end + $var wire 8 M! tmp1(3)(1)[7:0] [7:0] $end + $var wire 8 U! tmp1(3)(2)[7:0] [7:0] $end + $var wire 8 ]! tmp1(3)(3)[7:0] [7:0] $end + $var wire 8 5! tmp1(4)(1)[7:0] [7:0] $end + $var wire 8 =! tmp1(4)(2)[7:0] [7:0] $end + $var wire 8 E! tmp1(4)(3)[7:0] [7:0] $end + $var wire 8 !# tmp10(1)(1)[7:0] [7:0] $end + $var wire 8 )# tmp10(1)(2)[7:0] [7:0] $end + $var wire 8 1# tmp10(1)(3)[7:0] [7:0] $end + $var wire 8 9# tmp10(2)(1)[7:0] [7:0] $end + $var wire 8 A# tmp10(2)(2)[7:0] [7:0] $end + $var wire 8 I# tmp10(2)(3)[7:0] [7:0] $end + $var wire 8 Q# tmp10(3)(1)[7:0] [7:0] $end + $var wire 8 Y# tmp10(3)(2)[7:0] [7:0] $end + $var wire 8 a# tmp10(3)(3)[7:0] [7:0] $end + $var wire 8 i# tmp10(4)(1)[7:0] [7:0] $end + $var wire 8 q# tmp10(4)(2)[7:0] [7:0] $end + $var wire 8 y# tmp10(4)(3)[7:0] [7:0] $end + $var wire 8 Y' tmp12(-1)(1)(1)[7:0] [7:0] $end + $var wire 8 a' tmp12(-1)(1)(2)[7:0] [7:0] $end + $var wire 8 i' tmp12(-1)(1)(3)[7:0] [7:0] $end + $var wire 8 A' tmp12(-1)(2)(1)[7:0] [7:0] $end + $var wire 8 I' tmp12(-1)(2)(2)[7:0] [7:0] $end + $var wire 8 Q' tmp12(-1)(2)(3)[7:0] [7:0] $end + $var wire 8 )' tmp12(-1)(3)(1)[7:0] [7:0] $end + $var wire 8 1' tmp12(-1)(3)(2)[7:0] [7:0] $end + $var wire 8 9' tmp12(-1)(3)(3)[7:0] [7:0] $end + $var wire 8 m% tmp12(-1)(4)(1)[7:0] [7:0] $end + $var wire 8 w& tmp12(-1)(4)(2)[7:0] [7:0] $end + $var wire 8 !' tmp12(-1)(4)(3)[7:0] [7:0] $end + $var wire 8 _& tmp12(0)(1)(1)[7:0] [7:0] $end + $var wire 8 g& tmp12(0)(1)(2)[7:0] [7:0] $end + $var wire 8 o& tmp12(0)(1)(3)[7:0] [7:0] $end + $var wire 8 G& tmp12(0)(2)(1)[7:0] [7:0] $end + $var wire 8 O& tmp12(0)(2)(2)[7:0] [7:0] $end + $var wire 8 W& tmp12(0)(2)(3)[7:0] [7:0] $end + $var wire 8 /& tmp12(0)(3)(1)[7:0] [7:0] $end + $var wire 8 7& tmp12(0)(3)(2)[7:0] [7:0] $end + $var wire 8 ?& tmp12(0)(3)(3)[7:0] [7:0] $end + $var wire 8 u% tmp12(0)(4)(1)[7:0] [7:0] $end + $var wire 8 }% tmp12(0)(4)(2)[7:0] [7:0] $end + $var wire 8 '& tmp12(0)(4)(3)[7:0] [7:0] $end + $var wire 8 o* tmp13(1)(1)[7:0] [7:0] $end + $var wire 8 w* tmp13(1)(2)[7:0] [7:0] $end + $var wire 8 !+ tmp13(1)(3)[7:0] [7:0] $end + $var wire 8 W* tmp13(2)(1)[7:0] [7:0] $end + $var wire 8 _* tmp13(2)(2)[7:0] [7:0] $end + $var wire 8 g* tmp13(2)(3)[7:0] [7:0] $end + $var wire 8 ?* tmp13(3)(1)[7:0] [7:0] $end + $var wire 8 G* tmp13(3)(2)[7:0] [7:0] $end + $var wire 8 O* tmp13(3)(3)[7:0] [7:0] $end + $var wire 8 '* tmp13(4)(1)[7:0] [7:0] $end + $var wire 8 /* tmp13(4)(2)[7:0] [7:0] $end + $var wire 8 7* tmp13(4)(3)[7:0] [7:0] $end + $var wire 8 }! tmp2(1)(1) [7:0] $end + $var wire 8 '" tmp2(1)(2) [7:0] $end + $var wire 8 /" tmp2(1)(3) [7:0] $end + $var wire 8 7" tmp2(2)(1) [7:0] $end + $var wire 8 ?" tmp2(2)(2) [7:0] $end + $var wire 8 G" tmp2(2)(3) [7:0] $end + $var wire 8 O" tmp2(3)(1) [7:0] $end + $var wire 8 W" tmp2(3)(2) [7:0] $end + $var wire 8 _" tmp2(3)(3) [7:0] $end + $var wire 8 g" tmp2(4)(1) [7:0] $end + $var wire 8 o" tmp2(4)(2) [7:0] $end + $var wire 8 w" tmp2(4)(3) [7:0] $end + $var wire 8 }! tmp3(1)(1)[7:0] [7:0] $end + $var wire 8 '" tmp3(1)(2)[7:0] [7:0] $end + $var wire 8 /" tmp3(1)(3)[7:0] [7:0] $end + $var wire 8 7" tmp3(2)(1)[7:0] [7:0] $end + $var wire 8 ?" tmp3(2)(2)[7:0] [7:0] $end + $var wire 8 G" tmp3(2)(3)[7:0] [7:0] $end + $var wire 8 O" tmp3(3)(1)[7:0] [7:0] $end + $var wire 8 W" tmp3(3)(2)[7:0] [7:0] $end + $var wire 8 _" tmp3(3)(3)[7:0] [7:0] $end + $var wire 8 g" tmp3(4)(1)[7:0] [7:0] $end + $var wire 8 o" tmp3(4)(2)[7:0] [7:0] $end + $var wire 8 w" tmp3(4)(3)[7:0] [7:0] $end + $var wire 8 }! tmp4(1)(1)[7:0] [7:0] $end + $var wire 8 '" tmp4(1)(2)[7:0] [7:0] $end + $var wire 8 /" tmp4(1)(3)[7:0] [7:0] $end + $var wire 8 7" tmp4(2)(1)[7:0] [7:0] $end + $var wire 8 ?" tmp4(2)(2)[7:0] [7:0] $end + $var wire 8 G" tmp4(2)(3)[7:0] [7:0] $end + $var wire 8 O" tmp4(3)(1)[7:0] [7:0] $end + $var wire 8 W" tmp4(3)(2)[7:0] [7:0] $end + $var wire 8 _" tmp4(3)(3)[7:0] [7:0] $end + $var wire 8 g" tmp4(4)(1)[7:0] [7:0] $end + $var wire 8 o" tmp4(4)(2)[7:0] [7:0] $end + $var wire 8 w" tmp4(4)(3)[7:0] [7:0] $end + $var wire 8 !# tmp5(1)(1) [7:0] $end + $var wire 8 )# tmp5(1)(2) [7:0] $end + $var wire 8 1# tmp5(1)(3) [7:0] $end + $var wire 8 9# tmp5(2)(1) [7:0] $end + $var wire 8 A# tmp5(2)(2) [7:0] $end + $var wire 8 I# tmp5(2)(3) [7:0] $end + $var wire 8 Q# tmp5(3)(1) [7:0] $end + $var wire 8 Y# tmp5(3)(2) [7:0] $end + $var wire 8 a# tmp5(3)(3) [7:0] $end + $var wire 8 i# tmp5(4)(1) [7:0] $end + $var wire 8 q# tmp5(4)(2) [7:0] $end + $var wire 8 y# tmp5(4)(3) [7:0] $end + $var wire 8 !# tmp6(1)(1)[7:0] [7:0] $end + $var wire 8 )# tmp6(1)(2)[7:0] [7:0] $end + $var wire 8 1# tmp6(1)(3)[7:0] [7:0] $end + $var wire 8 9# tmp6(2)(1)[7:0] [7:0] $end + $var wire 8 A# tmp6(2)(2)[7:0] [7:0] $end + $var wire 8 I# tmp6(2)(3)[7:0] [7:0] $end + $var wire 8 Q# tmp6(3)(1)[7:0] [7:0] $end + $var wire 8 Y# tmp6(3)(2)[7:0] [7:0] $end + $var wire 8 a# tmp6(3)(3)[7:0] [7:0] $end + $var wire 8 i# tmp6(4)(1)[7:0] [7:0] $end + $var wire 8 q# tmp6(4)(2)[7:0] [7:0] $end + $var wire 8 y# tmp6(4)(3)[7:0] [7:0] $end + $var wire 8 !# tmp7(2)(1)[7:0] [7:0] $end + $var wire 8 )# tmp7(2)(2)[7:0] [7:0] $end + $var wire 8 1# tmp7(2)(3)[7:0] [7:0] $end + $var wire 8 9# tmp7(3)(1)[7:0] [7:0] $end + $var wire 8 A# tmp7(3)(2)[7:0] [7:0] $end + $var wire 8 I# tmp7(3)(3)[7:0] [7:0] $end + $var wire 8 Q# tmp7(4)(1)[7:0] [7:0] $end + $var wire 8 Y# tmp7(4)(2)[7:0] [7:0] $end + $var wire 8 a# tmp7(4)(3)[7:0] [7:0] $end + $var wire 8 i# tmp7(5)(1)[7:0] [7:0] $end + $var wire 8 q# tmp7(5)(2)[7:0] [7:0] $end + $var wire 8 y# tmp7(5)(3)[7:0] [7:0] $end + $var wire 8 m) tmp8(0)(1)[7:0] [7:0] $end + $var wire 8 u) tmp8(0)(2)[7:0] [7:0] $end + $var wire 8 }) tmp8(0)(3)[7:0] [7:0] $end + $var wire 8 U) tmp8(1)(1)[7:0] [7:0] $end + $var wire 8 ]) tmp8(1)(2)[7:0] [7:0] $end + $var wire 8 e) tmp8(1)(3)[7:0] [7:0] $end + $var wire 8 =) tmp8(2)(1)[7:0] [7:0] $end + $var wire 8 E) tmp8(2)(2)[7:0] [7:0] $end + $var wire 8 M) tmp8(2)(3)[7:0] [7:0] $end + $var wire 8 %) tmp8(3)(1)[7:0] [7:0] $end + $var wire 8 -) tmp8(3)(2)[7:0] [7:0] $end + $var wire 8 5) tmp8(3)(3)[7:0] [7:0] $end + $var wire 8 !# tmp8(4)(1)[7:0] [7:0] $end + $var wire 8 )# tmp8(4)(2)[7:0] [7:0] $end + $var wire 8 1# tmp8(4)(3)[7:0] [7:0] $end + $var wire 8 9# tmp8(5)(1)[7:0] [7:0] $end + $var wire 8 A# tmp8(5)(2)[7:0] [7:0] $end + $var wire 8 I# tmp8(5)(3)[7:0] [7:0] $end + $var wire 8 Q# tmp8(6)(1)[7:0] [7:0] $end + $var wire 8 Y# tmp8(6)(2)[7:0] [7:0] $end + $var wire 8 a# tmp8(6)(3)[7:0] [7:0] $end + $var wire 8 i# tmp8(7)(1)[7:0] [7:0] $end + $var wire 8 q# tmp8(7)(2)[7:0] [7:0] $end + $var wire 8 y# tmp8(7)(3)[7:0] [7:0] $end + $var wire 8 !# tmp9(4)(1)[7:0] [7:0] $end + $var wire 8 )# tmp9(4)(2)[7:0] [7:0] $end + $var wire 8 1# tmp9(4)(3)[7:0] [7:0] $end + $var wire 8 9# tmp9(5)(1)[7:0] [7:0] $end + $var wire 8 A# tmp9(5)(2)[7:0] [7:0] $end + $var wire 8 I# tmp9(5)(3)[7:0] [7:0] $end + $var wire 8 Q# tmp9(6)(1)[7:0] [7:0] $end + $var wire 8 Y# tmp9(6)(2)[7:0] [7:0] $end + $var wire 8 a# tmp9(6)(3)[7:0] [7:0] $end + $var wire 8 i# tmp9(7)(1)[7:0] [7:0] $end + $var wire 8 q# tmp9(7)(2)[7:0] [7:0] $end + $var wire 8 y# tmp9(7)(3)[7:0] [7:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter4 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 s, offset [31:0] $end - $var wire 8 u) out [7:0] $end - $var wire 24 %- pad [23:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 32 {, tmp(2)[31:0] [31:0] $end - $var wire 32 }) tmp(3)[31:0] [31:0] $end - $var wire 32 '* tmp(4)[31:0] [31:0] $end - $var wire 32 /* tmp(5)[31:0] [31:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 )+ offset [31:0] $end + $var wire 8 #$ out [7:0] $end + $var wire 24 9+ pad [23:0] $end + $var wire 3 C shift [2:0] $end + $var wire 32 1+ tmp(2)[31:0] [31:0] $end + $var wire 32 +$ tmp(3)[31:0] [31:0] $end + $var wire 32 3$ tmp(4)[31:0] [31:0] $end + $var wire 32 ;$ tmp(5)[31:0] [31:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter5 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 -- offset [31:0] $end - $var wire 8 7* out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 32 ?* tmp [31:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 A+ offset [31:0] $end + $var wire 8 C$ out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 32 K$ tmp [31:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter6 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 32 -- offset [31:0] $end - $var wire 8 G* out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 32 O* tmp [31:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 32 A+ offset [31:0] $end + $var wire 8 S$ out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 32 [$ tmp [31:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter7 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 8 W* out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 32 _* tmp [31:0] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 8 c$ out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 32 k$ tmp [31:0] $end + $var wire 32 3( width [31:0] $end $upscope $end $scope module shifter8 $end - $var wire 32 1+ depth [31:0] $end - $var wire 8 I+ in [7:0] $end - $var wire 8 g* out [7:0] $end - $var wire 3 E! shift [2:0] $end - $var wire 32 o* tmp [0:31] $end - $var wire 32 9+ width [31:0] $end + $var wire 32 +( depth [31:0] $end + $var wire 8 C( in [7:0] $end + $var wire 8 s$ out [7:0] $end + $var wire 3 C shift [2:0] $end + $var wire 32 {$ tmp [0:31] $end + $var wire 32 3( width [31:0] $end $upscope $end $upscope $end $upscope $end @@ -276,23 +312,23 @@ $enddefinitions $end #0 -b10001110 # -b10001110 $ -b10001110 % -b00000001001000110100010101100111 ; -b00100000000000000000000000000000 C -b00000001001000110100000000100111 K -b00000000000000000000000000000011 S +b00000001001000110100010101100111 # +b00100000000000000000000000000000 + +b00000001001000110100000000100111 3 +b00000000000000000000000000000011 ; +b000 C +b10001110 K +b10001110 S b10001110 [ -b10001110 \ -b10001110 ] -b10001110 ^ -b10001110 _ -b10001110 ` -b10001110 a -b10001110 b b10001110 c -b000 E! +b10001110 k +b10001110 s +b10001110 { +b10001110 %! +b10001110 -! +b10001110 5! +b10001110 =! +b10001110 E! b10001110 M! b10001110 U! b10001110 ]! @@ -313,50 +349,50 @@ b10001110 o" b10001110 w" b10001110 !# b10001110 )# -b10001110 *# -b10001110 +# +b10001110 1# +b10001110 9# b10001110 A# -b10001110 B# -b10001110 C# +b10001110 I# +b10001110 Q# b10001110 Y# -b10001110 Z# -b10001110 [# +b10001110 a# +b10001110 i# b10001110 q# b10001110 y# b10001110 #$ -b10001110 +$ -b10001110 3$ -b10001110 ;$ +b00000000000000000000000010001110 +$ +b00000000000000000000000010001110 3$ +b00000000000000000000000010001110 ;$ b10001110 C$ -b10001110 K$ +b10001110100011101000111010001110 K$ b10001110 S$ -b10001110 [$ +b10001110100011101000111010001110 [$ b10001110 c$ -b10001110 k$ +b10001110100011101000111010001110 k$ b10001110 s$ -b10001110 t$ -b10001110 u$ +b10001110100011101000111010001110 {$ +b10001110 %% +b10001110 &% +b10001110 '% +b10001110 (% +b10001110 )% +b10001110 *% +b10001110 +% +b10001110 ,% b10001110 -% -b10001110 .% -b10001110 /% -b10001110 E% -b10001110 F% -b10001110 G% -b10001110 ]% -b10001110 ^% -b10001110 _% +b10001110 m% b10001110 u% -b10001110 v% -b10001110 w% +b10001110 }% +b10001110 '& b10001110 /& -b10001110 0& -b10001110 1& +b10001110 7& +b10001110 ?& b10001110 G& -b10001110 H& -b10001110 I& +b10001110 O& +b10001110 W& b10001110 _& -b10001110 `& -b10001110 a& +b10001110 g& +b10001110 o& b10001110 w& b10001110 !' b10001110 )' @@ -368,88 +404,67 @@ b10001110 Q' b10001110 Y' b10001110 a' b10001110 i' -b10001110 q' -b10001110 y' -b10001110 z' -b10001110 {' -b10001110 3( -b10001110 4( -b10001110 5( -b10001110 K( -b10001110 L( -b10001110 M( -b10001110 c( -b10001110 d( -b10001110 e( +0q' +b00000000000000000000000000000000 y' +0#( +b00000000000000000000000000000011 +( +b00000000000000000000000000001000 3( +b00000000000000000000000000001001 ;( +b10001110 C( +b1000111001000111101000111101000111101000011101000011101000011101 K( +b11111111111111111111111111111101 [( +b00000000000000000000000000000001 c( +b10001110 k( +b10001110 s( b10001110 {( -b10001110 %) -b10001110 -) -b10001110 5) -b10001110 =) -b10001110 E) -b10001110 M) -b10001110 U) -b10001110 ]) -b10001110 e) -b10001110 m) -b10001110 u) -b00000000000000000000000010001110 }) -b00000000000000000000000010001110 '* -b00000000000000000000000010001110 /* -b10001110 7* -b10001110100011101000111010001110 ?* -b10001110 G* -b10001110100011101000111010001110 O* -b10001110 W* -b10001110100011101000111010001110 _* -b10001110 g* -b10001110100011101000111010001110 o* -0w* -b00000000000000000000000000000000 !+ -0)+ -b00000000000000000000000000000011 1+ -b00000000000000000000000000001000 9+ -b00000000000000000000000000001001 A+ -b10001110 I+ -b1000111001000111101000111101000111101000011101000011101000011101 Q+ -b11111111111111111111111111111101 a+ -b00000000000000000000000000000001 i+ -b00000000 q+ -b00000000 y+ -b00000000 #, -b00000000 +, -b00000000 3, -b00000000 ;, -b00000000 C, -b00000000 K, -b00000000 S, -b00000000 [, -b00000000 c, -b00000000 k, -b00000000000000000000000000000010 s, -b00000000000000000000000010001110 {, -b000000000000000000000000 %- -b11111111111111111111111111111110 -- +b00000000 %) +b00000000 -) +b00000000 5) +b00000000 =) +b00000000 E) +b00000000 M) +b00000000 U) +b00000000 ]) +b00000000 e) +b00000000 m) +b00000000 u) +b00000000 }) +b00000000 '* +b00000000 /* +b00000000 7* +b00000000 ?* +b00000000 G* +b00000000 O* +b00000000 W* +b00000000 _* +b00000000 g* +b00000000 o* +b00000000 w* +b00000000 !+ +b00000000000000000000000000000010 )+ +b00000000000000000000000010001110 1+ +b000000000000000000000000 9+ +b11111111111111111111111111111110 A+ #10 +b001 C +b01000111 K +b01000111 S b01000111 [ -b01000111 \ -b01000111 ] -b01000111 ^ -b01000111 _ -b01000111 ` -b01000111 a -b01000111 b b01000111 c -b001 E! +b01000111 k +b01000111 s +b01000111 { +b01000111 %! +b01000111 -! +b01000111 5! +b01000111 =! +b01000111 E! b01000111 M! b01000111 U! b01000111 ]! b01000111 e! b01000111 m! b01000111 u! -b01000111 }! -b01000111 '" -b01000111 /" b01000111 7" b01000111 ?" b01000111 G" @@ -459,747 +474,558 @@ b01000111 _" b01000111 g" b01000111 o" b01000111 w" -b01000111 !# -b01000111 )# -b01000111 *# -b01000111 +# +b01000111 9# b01000111 A# -b01000111 B# -b01000111 C# +b01000111 I# +b01000111 Q# b01000111 Y# -b01000111 Z# -b01000111 [# -b01000111 +$ -b01000111 3$ -b01000111 ;$ +b01000111 a# +b01000111 i# +b01000111 q# +b01000111 y# +b01000111 #$ +b00000000000000000000000001000111 +$ +b00000000000000000000000001000111 3$ +b00000000000000000000000001000111 ;$ b01000111 C$ -b01000111 K$ +b10001110010001110100011101000111 K$ b01000111 S$ -b01000111 [$ +b10001110010001110100011101000111 [$ b01000111 c$ -b01000111 k$ +b10001110010001110100011101000111 k$ +b01000111 s$ +b10001110010001110100011101000111 {$ +b01000111 %% +b01000111 &% +b01000111 '% +b01000111 (% +b01000111 )% +b01000111 *% +b01000111 +% +b01000111 ,% b01000111 -% -b01000111 .% -b01000111 /% -b01000111 E% -b01000111 F% -b01000111 G% -b01000111 ]% -b01000111 ^% -b01000111 _% +b01000111 m% +b01000111 u% +b01000111 }% +b01000111 '& b01000111 /& -b01000111 0& -b01000111 1& +b01000111 7& +b01000111 ?& b01000111 G& -b01000111 H& -b01000111 I& -b01000111 _& -b01000111 `& -b01000111 a& +b01000111 O& +b01000111 W& +b01000111 w& +b01000111 !' +b01000111 )' b01000111 1' b01000111 9' b01000111 A' b01000111 I' b01000111 Q' -b01000111 Y' -b01000111 a' -b01000111 i' -b01000111 q' -b01000111 3( -b01000111 4( -b01000111 5( -b01000111 K( -b01000111 L( -b01000111 M( -b01000111 c( -b01000111 d( -b01000111 e( -b01000111 5) -b01000111 =) -b01000111 E) -b01000111 M) -b01000111 U) -b01000111 ]) -b01000111 e) -b01000111 m) -b01000111 u) -b00000000000000000000000001000111 }) -b00000000000000000000000001000111 '* -b00000000000000000000000001000111 /* -b01000111 7* -b10001110010001110100011101000111 ?* -b01000111 G* -b10001110010001110100011101000111 O* -b01000111 W* -b10001110010001110100011101000111 _* -b01000111 g* -b10001110010001110100011101000111 o* -b00000000000000000000000000001001 !+ -1)+ +b00000000000000000000000000001001 y' +1#( #15 -0)+ +0#( #20 +b010 C +b10100011 K +b10001110 S b10100011 [ -b10100011 \ -b10100011 ] -b10100011 ^ -b10100011 _ -b10100011 ` -b10100011 a -b10100011 b b10100011 c -b010 E! +b10001110 k +b10100011 s +b10100011 { +b10001110 %! +b10100011 -! +b10100011 5! +b10100011 =! +b10100011 E! b10100011 M! -b10001110 U! +b10100011 U! b10100011 ]! -b10100011 e! +b10001110 e! b10001110 m! -b10100011 u! -b10100011 }! -b10001110 '" -b10100011 /" -b10100011 7" +b10001110 u! +b10001110 7" b10001110 ?" b10001110 G" -b10001110 O" +b10100011 O" b10100011 W" b10100011 _" b10100011 g" b10100011 o" b10100011 w" -b10100011 !# -b10001110 )# -b10001110 *# -b10001110 +# -b10100011 A# -b10100011 B# -b10100011 C# +b10001110 9# +b10001110 A# +b10001110 I# +b10100011 Q# b10100011 Y# -b10100011 Z# -b10100011 [# -b10001110 +$ -b10001110 3$ -b10001110 ;$ +b10100011 a# +b10100011 i# +b10100011 q# +b10100011 y# +b10100011 #$ +b00000000000000000000000010001110 +$ +b00000000000000000000000010100011 3$ +b00000000000000000000000010100011 ;$ b10100011 C$ -b10100011 K$ +b10001110100011101010001110100011 K$ b10100011 S$ -b10100011 [$ +b10001110100011101010001110100011 [$ b10100011 c$ -b10100011 k$ -b10001110 -% -b10001110 .% -b10001110 /% -b10100011 E% -b10100011 F% -b10100011 G% -b10100011 ]% -b10100011 ^% -b10100011 _% -b10001110 /& -b10001110 0& -b10001110 1& -b10100011 G& -b10100011 H& -b10100011 I& -b10100011 _& -b10100011 `& -b10100011 a& -b10001110 1' -b10001110 9' +b10001110100011101010001110100011 k$ +b10100011 s$ +b10001110100011101010001110100011 {$ +b10100011 %% +b10100011 &% +b10100011 '% +b10100011 (% +b10100011 )% +b10100011 *% +b10100011 +% +b10100011 ,% +b10100011 -% +b10100011 m% +b10100011 u% +b10100011 }% +b10100011 '& +b10100011 /& +b10100011 7& +b10100011 ?& +b10001110 G& +b10001110 O& +b10001110 W& +b10100011 w& +b10100011 !' +b10100011 )' +b10100011 1' +b10100011 9' b10001110 A' -b10100011 I' -b10100011 Q' -b10100011 Y' -b10100011 a' -b10100011 i' -b10100011 q' -b10001110 3( -b10001110 4( -b10001110 5( -b10100011 K( -b10100011 L( -b10100011 M( -b10100011 c( -b10100011 d( -b10100011 e( -b10001110 5) -b10001110 =) -b10001110 E) -b10100011 M) -b10100011 U) -b10100011 ]) -b10100011 e) -b10100011 m) -b10100011 u) -b00000000000000000000000010001110 }) -b00000000000000000000000010100011 '* -b00000000000000000000000010100011 /* -b10100011 7* -b10001110100011101010001110100011 ?* -b10100011 G* -b10001110100011101010001110100011 O* -b10100011 W* -b10001110100011101010001110100011 _* -b10100011 g* -b10001110100011101010001110100011 o* -1)+ +b10001110 I' +b10001110 Q' +1#( #25 -0)+ +0#( #30 +b011 C +b11010001 K +b01000111 S b11010001 [ -b11010001 \ -b11010001 ] -b11010001 ^ -b11010001 _ -b11010001 ` -b11010001 a -b11010001 b b11010001 c -b011 E! +b01000111 k +b11010001 s +b11010001 { +b01000111 %! +b11010001 -! +b11010001 5! +b11010001 =! +b11010001 E! b11010001 M! -b01000111 U! +b11010001 U! b11010001 ]! -b11010001 e! +b01000111 e! b01000111 m! -b11010001 u! -b11010001 }! -b01000111 '" -b11010001 /" -b11010001 7" +b01000111 u! +b01000111 7" b01000111 ?" b01000111 G" -b01000111 O" +b11010001 O" b11010001 W" b11010001 _" b11010001 g" b11010001 o" b11010001 w" -b11010001 !# -b01000111 )# -b01000111 *# -b01000111 +# -b11010001 A# -b11010001 B# -b11010001 C# -b11010001 Y# -b11010001 Z# -b11010001 [# -b01000111 +$ -b01000111 3$ -b01000111 ;$ -b11010001 C$ -b11010001 K$ -b11010001 S$ -b11010001 [$ -b11010001 c$ -b11010001 k$ -b01000111 -% -b01000111 .% -b01000111 /% -b11010001 E% -b11010001 F% -b11010001 G% -b11010001 ]% -b11010001 ^% -b11010001 _% -b01000111 /& -b01000111 0& -b01000111 1& -b11010001 G& -b11010001 H& -b11010001 I& -b11010001 _& -b11010001 `& -b11010001 a& -b01000111 1' -b01000111 9' -b01000111 A' -b11010001 I' -b11010001 Q' -b11010001 Y' -b11010001 a' -b11010001 i' -b11010001 q' -b01000111 3( -b01000111 4( -b01000111 5( -b11010001 K( -b11010001 L( -b11010001 M( -b11010001 c( -b11010001 d( -b11010001 e( -b01000111 5) -b01000111 =) -b01000111 E) -b11010001 M) -b11010001 U) -b11010001 ]) -b11010001 e) -b11010001 m) -b11010001 u) -b00000000000000000000000001000111 }) -b00000000000000000000000011010001 '* -b00000000000000000000000011010001 /* -b11010001 7* -b10001110010001111101000111010001 ?* -b11010001 G* -b10001110010001111101000111010001 O* -b11010001 W* -b10001110010001111101000111010001 _* -b11010001 g* -b10001110010001111101000111010001 o* -1)+ -#35 -0)+ -#40 -b11101000 [ -b11101000 \ -b11101000 ] -b11101000 ^ -b11101000 _ -b11101000 ` -b11101000 a -b11101000 b -b11101000 c -b100 E! -b11101000 M! -b10001110 U! -b10001110 ]! -b11101000 e! -b10001110 m! -b10001110 u! -b11101000 }! -b10001110 '" -b10001110 /" -b11101000 7" -b10001110 ?" -b10001110 G" -b10001110 O" -b10001110 W" -b10001110 _" -b10001110 g" -b11101000 o" -b11101000 w" -b11101000 !# -b10001110 )# -b10001110 *# -b10001110 +# -b10001110 A# -b10001110 B# -b10001110 C# -b11101000 Y# -b11101000 Z# -b11101000 [# -b10001110 +$ -b10001110 3$ -b10001110 ;$ -b10001110 C$ -b10001110 K$ -b10001110 S$ -b11101000 [$ -b11101000 c$ -b11101000 k$ -b10001110 -% -b10001110 .% -b10001110 /% -b10001110 E% -b10001110 F% -b10001110 G% -b11101000 ]% -b11101000 ^% -b11101000 _% -b10001110 /& -b10001110 0& -b10001110 1& -b10001110 G& -b10001110 H& -b10001110 I& -b11101000 _& -b11101000 `& -b11101000 a& -b10001110 1' -b10001110 9' -b10001110 A' -b10001110 I' -b10001110 Q' -b10001110 Y' -b11101000 a' -b11101000 i' -b11101000 q' -b10001110 3( -b10001110 4( -b10001110 5( -b10001110 K( -b10001110 L( -b10001110 M( -b11101000 c( -b11101000 d( -b11101000 e( -b10001110 5) -b10001110 =) -b10001110 E) -b10001110 M) -b10001110 U) -b10001110 ]) -b11101000 e) -b11101000 m) -b11101000 u) -b00000000000000000000000010001110 }) -b00000000000000000000000010001110 '* -b00000000000000000000000011101000 /* -b11101000 7* -b10001110100011101000111011101000 ?* -b11101000 G* -b10001110100011101000111011101000 O* -b11101000 W* -b10001110100011101000111011101000 _* -b11101000 g* -b10001110100011101000111011101000 o* -1)+ -#45 -0)+ -#50 -b01110100 [ -b01110100 \ -b01110100 ] -b01110100 ^ -b01110100 _ -b01110100 ` -b01110100 a -b01110100 b -b01110100 c -b101 E! -b01110100 M! -b01000111 U! -b01000111 ]! -b01110100 e! -b01000111 m! -b01000111 u! -b01110100 }! -b01000111 '" -b01000111 /" -b01110100 7" -b01000111 ?" -b01000111 G" -b01000111 O" -b01000111 W" -b01000111 _" -b01000111 g" -b01110100 o" -b01110100 w" -b01110100 !# -b01000111 )# -b01000111 *# -b01000111 +# +b01000111 9# b01000111 A# -b01000111 B# -b01000111 C# -b01110100 Y# -b01110100 Z# -b01110100 [# -b01000111 +$ -b01000111 3$ -b01000111 ;$ -b01000111 C$ -b01000111 K$ -b01000111 S$ -b01110100 [$ -b01110100 c$ -b01110100 k$ -b01000111 -% -b01000111 .% -b01000111 /% -b01000111 E% -b01000111 F% -b01000111 G% -b01110100 ]% -b01110100 ^% -b01110100 _% -b01000111 /& -b01000111 0& -b01000111 1& +b01000111 I# +b11010001 Q# +b11010001 Y# +b11010001 a# +b11010001 i# +b11010001 q# +b11010001 y# +b11010001 #$ +b00000000000000000000000001000111 +$ +b00000000000000000000000011010001 3$ +b00000000000000000000000011010001 ;$ +b11010001 C$ +b10001110010001111101000111010001 K$ +b11010001 S$ +b10001110010001111101000111010001 [$ +b11010001 c$ +b10001110010001111101000111010001 k$ +b11010001 s$ +b10001110010001111101000111010001 {$ +b11010001 %% +b11010001 &% +b11010001 '% +b11010001 (% +b11010001 )% +b11010001 *% +b11010001 +% +b11010001 ,% +b11010001 -% +b11010001 m% +b11010001 u% +b11010001 }% +b11010001 '& +b11010001 /& +b11010001 7& +b11010001 ?& b01000111 G& -b01000111 H& -b01000111 I& -b01110100 _& -b01110100 `& -b01110100 a& -b01000111 1' -b01000111 9' +b01000111 O& +b01000111 W& +b11010001 w& +b11010001 !' +b11010001 )' +b11010001 1' +b11010001 9' b01000111 A' b01000111 I' b01000111 Q' -b01000111 Y' -b01110100 a' -b01110100 i' -b01110100 q' -b01000111 3( -b01000111 4( -b01000111 5( -b01000111 K( -b01000111 L( -b01000111 M( -b01110100 c( -b01110100 d( -b01110100 e( -b01000111 5) -b01000111 =) -b01000111 E) -b01000111 M) -b01000111 U) -b01000111 ]) -b01110100 e) -b01110100 m) -b01110100 u) -b00000000000000000000000001000111 }) -b00000000000000000000000001000111 '* -b00000000000000000000000001110100 /* -b01110100 7* -b10001110010001110100011101110100 ?* -b01110100 G* -b10001110010001110100011101110100 O* -b01110100 W* -b10001110010001110100011101110100 _* -b01110100 g* -b10001110010001110100011101110100 o* -1)+ -#55 -0)+ -#60 -b00111010 [ -b00111010 \ -b00111010 ] -b00111010 ^ -b00111010 _ -b00111010 ` -b00111010 a -b00111010 b -b00111010 c -b110 E! -b00111010 M! -b10001110 U! -b10100011 ]! -b00111010 e! -b10001110 m! -b10100011 u! -b00111010 }! -b10001110 '" -b10100011 /" -b00111010 7" -b10001110 ?" -b10001110 G" -b10001110 O" -b10100011 W" -b10100011 _" -b10100011 g" -b00111010 o" -b00111010 w" -b00111010 !# -b10001110 )# -b10001110 *# -b10001110 +# -b10100011 A# -b10100011 B# -b10100011 C# -b00111010 Y# -b00111010 Z# -b00111010 [# -b10001110 +$ -b10001110 3$ -b10001110 ;$ -b10100011 C$ -b10100011 K$ -b10100011 S$ -b00111010 [$ -b00111010 c$ -b00111010 k$ -b10001110 -% -b10001110 .% -b10001110 /% -b10100011 E% -b10100011 F% -b10100011 G% -b00111010 ]% -b00111010 ^% -b00111010 _% -b10001110 /& -b10001110 0& -b10001110 1& -b10100011 G& -b10100011 H& -b10100011 I& -b00111010 _& -b00111010 `& -b00111010 a& -b10001110 1' -b10001110 9' -b10001110 A' -b10100011 I' -b10100011 Q' -b10100011 Y' -b00111010 a' -b00111010 i' -b00111010 q' -b10001110 3( -b10001110 4( -b10001110 5( -b10100011 K( -b10100011 L( -b10100011 M( -b00111010 c( -b00111010 d( -b00111010 e( -b10001110 5) -b10001110 =) -b10001110 E) -b10100011 M) -b10100011 U) -b10100011 ]) -b00111010 e) -b00111010 m) -b00111010 u) -b00000000000000000000000010001110 }) -b00000000000000000000000010100011 '* -b00000000000000000000000000111010 /* -b00111010 7* -b10001110100011101010001100111010 ?* -b00111010 G* -b10001110100011101010001100111010 O* -b00111010 W* -b10001110100011101010001100111010 _* -b00111010 g* -b10001110100011101010001100111010 o* -1)+ -#65 -0)+ -#70 -b00011101 [ -b00011101 \ -b00011101 ] -b00011101 ^ -b00011101 _ -b00011101 ` -b00011101 a -b00011101 b -b00011101 c -b111 E! -b00011101 M! -b01000111 U! -b11010001 ]! -b00011101 e! -b01000111 m! -b11010001 u! -b00011101 }! -b01000111 '" -b11010001 /" -b00011101 7" -b01000111 ?" -b01000111 G" -b01000111 O" -b11010001 W" -b11010001 _" -b11010001 g" -b00011101 o" -b00011101 w" -b00011101 !# -b01000111 )# -b01000111 *# -b01000111 +# -b11010001 A# -b11010001 B# -b11010001 C# -b00011101 Y# -b00011101 Z# -b00011101 [# -b01000111 +$ -b01000111 3$ -b01000111 ;$ -b11010001 C$ -b11010001 K$ -b11010001 S$ -b00011101 [$ -b00011101 c$ -b00011101 k$ -b01000111 -% -b01000111 .% -b01000111 /% -b11010001 E% -b11010001 F% -b11010001 G% -b00011101 ]% -b00011101 ^% -b00011101 _% -b01000111 /& -b01000111 0& -b01000111 1& -b11010001 G& -b11010001 H& -b11010001 I& -b00011101 _& -b00011101 `& -b00011101 a& -b01000111 1' -b01000111 9' -b01000111 A' -b11010001 I' -b11010001 Q' -b11010001 Y' -b00011101 a' -b00011101 i' -b00011101 q' -b01000111 3( -b01000111 4( -b01000111 5( -b11010001 K( -b11010001 L( -b11010001 M( -b00011101 c( -b00011101 d( -b00011101 e( -b01000111 5) -b01000111 =) -b01000111 E) -b11010001 M) -b11010001 U) -b11010001 ]) -b00011101 e) -b00011101 m) -b00011101 u) -b00000000000000000000000001000111 }) -b00000000000000000000000011010001 '* -b00000000000000000000000000011101 /* -b00011101 7* -b10001110010001111101000100011101 ?* -b00011101 G* -b10001110010001111101000100011101 O* -b00011101 W* -b10001110010001111101000100011101 _* -b00011101 g* -b10001110010001111101000100011101 o* -1)+ -#75 -0)+ -#80 +1#( +#35 +0#( +#40 +b100 C +b11101000 K +b10001110 S b10001110 [ -b10001110 \ -b10001110 ] -b10001110 ^ -b10001110 _ -b10001110 ` -b10001110 a -b10001110 b -b10001110 c -b000 E! +b11101000 c +b10001110 k +b10001110 s +b11101000 { +b10001110 %! +b10001110 -! +b11101000 5! +b11101000 =! +b11101000 E! +b10001110 M! +b10001110 U! +b10001110 ]! +b10001110 e! +b10001110 m! +b10001110 u! +b10001110 7" +b10001110 ?" +b10001110 G" +b10001110 O" +b10001110 W" +b10001110 _" +b11101000 g" +b11101000 o" +b11101000 w" +b10001110 9# +b10001110 A# +b10001110 I# +b10001110 Q# +b10001110 Y# +b10001110 a# +b11101000 i# +b11101000 q# +b11101000 y# +b11101000 #$ +b00000000000000000000000010001110 +$ +b00000000000000000000000010001110 3$ +b00000000000000000000000011101000 ;$ +b11101000 C$ +b10001110100011101000111011101000 K$ +b11101000 S$ +b10001110100011101000111011101000 [$ +b11101000 c$ +b10001110100011101000111011101000 k$ +b11101000 s$ +b10001110100011101000111011101000 {$ +b11101000 %% +b11101000 &% +b11101000 '% +b11101000 (% +b11101000 )% +b11101000 *% +b11101000 +% +b11101000 ,% +b11101000 -% +b11101000 m% +b11101000 u% +b11101000 }% +b11101000 '& +b10001110 /& +b10001110 7& +b10001110 ?& +b10001110 G& +b10001110 O& +b10001110 W& +b11101000 w& +b11101000 !' +b10001110 )' +b10001110 1' +b10001110 9' +b10001110 A' +b10001110 I' +b10001110 Q' +1#( +#45 +0#( +#50 +b101 C +b01110100 K +b01000111 S +b01000111 [ +b01110100 c +b01000111 k +b01000111 s +b01110100 { +b01000111 %! +b01000111 -! +b01110100 5! +b01110100 =! +b01110100 E! +b01000111 M! +b01000111 U! +b01000111 ]! +b01000111 e! +b01000111 m! +b01000111 u! +b01000111 7" +b01000111 ?" +b01000111 G" +b01000111 O" +b01000111 W" +b01000111 _" +b01110100 g" +b01110100 o" +b01110100 w" +b01000111 9# +b01000111 A# +b01000111 I# +b01000111 Q# +b01000111 Y# +b01000111 a# +b01110100 i# +b01110100 q# +b01110100 y# +b01110100 #$ +b00000000000000000000000001000111 +$ +b00000000000000000000000001000111 3$ +b00000000000000000000000001110100 ;$ +b01110100 C$ +b10001110010001110100011101110100 K$ +b01110100 S$ +b10001110010001110100011101110100 [$ +b01110100 c$ +b10001110010001110100011101110100 k$ +b01110100 s$ +b10001110010001110100011101110100 {$ +b01110100 %% +b01110100 &% +b01110100 '% +b01110100 (% +b01110100 )% +b01110100 *% +b01110100 +% +b01110100 ,% +b01110100 -% +b01110100 m% +b01110100 u% +b01110100 }% +b01110100 '& +b01000111 /& +b01000111 7& +b01000111 ?& +b01000111 G& +b01000111 O& +b01000111 W& +b01110100 w& +b01110100 !' +b01000111 )' +b01000111 1' +b01000111 9' +b01000111 A' +b01000111 I' +b01000111 Q' +1#( +#55 +0#( +#60 +b110 C +b00111010 K +b10001110 S +b10100011 [ +b00111010 c +b10001110 k +b10100011 s +b00111010 { +b10001110 %! +b10100011 -! +b00111010 5! +b00111010 =! +b00111010 E! +b10100011 M! +b10100011 U! +b10100011 ]! +b10001110 e! +b10001110 m! +b10001110 u! +b10001110 7" +b10001110 ?" +b10001110 G" +b10100011 O" +b10100011 W" +b10100011 _" +b00111010 g" +b00111010 o" +b00111010 w" +b10001110 9# +b10001110 A# +b10001110 I# +b10100011 Q# +b10100011 Y# +b10100011 a# +b00111010 i# +b00111010 q# +b00111010 y# +b00111010 #$ +b00000000000000000000000010001110 +$ +b00000000000000000000000010100011 3$ +b00000000000000000000000000111010 ;$ +b00111010 C$ +b10001110100011101010001100111010 K$ +b00111010 S$ +b10001110100011101010001100111010 [$ +b00111010 c$ +b10001110100011101010001100111010 k$ +b00111010 s$ +b10001110100011101010001100111010 {$ +b00111010 %% +b00111010 &% +b00111010 '% +b00111010 (% +b00111010 )% +b00111010 *% +b00111010 +% +b00111010 ,% +b00111010 -% +b00111010 m% +b00111010 u% +b00111010 }% +b00111010 '& +b10100011 /& +b10100011 7& +b10100011 ?& +b10001110 G& +b10001110 O& +b10001110 W& +b00111010 w& +b00111010 !' +b10100011 )' +b10100011 1' +b10100011 9' +b10001110 A' +b10001110 I' +b10001110 Q' +1#( +#65 +0#( +#70 +b111 C +b00011101 K +b01000111 S +b11010001 [ +b00011101 c +b01000111 k +b11010001 s +b00011101 { +b01000111 %! +b11010001 -! +b00011101 5! +b00011101 =! +b00011101 E! +b11010001 M! +b11010001 U! +b11010001 ]! +b01000111 e! +b01000111 m! +b01000111 u! +b01000111 7" +b01000111 ?" +b01000111 G" +b11010001 O" +b11010001 W" +b11010001 _" +b00011101 g" +b00011101 o" +b00011101 w" +b01000111 9# +b01000111 A# +b01000111 I# +b11010001 Q# +b11010001 Y# +b11010001 a# +b00011101 i# +b00011101 q# +b00011101 y# +b00011101 #$ +b00000000000000000000000001000111 +$ +b00000000000000000000000011010001 3$ +b00000000000000000000000000011101 ;$ +b00011101 C$ +b10001110010001111101000100011101 K$ +b00011101 S$ +b10001110010001111101000100011101 [$ +b00011101 c$ +b10001110010001111101000100011101 k$ +b00011101 s$ +b10001110010001111101000100011101 {$ +b00011101 %% +b00011101 &% +b00011101 '% +b00011101 (% +b00011101 )% +b00011101 *% +b00011101 +% +b00011101 ,% +b00011101 -% +b00011101 m% +b00011101 u% +b00011101 }% +b00011101 '& +b11010001 /& +b11010001 7& +b11010001 ?& +b01000111 G& +b01000111 O& +b01000111 W& +b00011101 w& +b00011101 !' +b11010001 )' +b11010001 1' +b11010001 9' +b01000111 A' +b01000111 I' +b01000111 Q' +1#( +#75 +0#( +#80 +b000 C +b10001110 K +b10001110 S +b10001110 [ +b10001110 c +b10001110 k +b10001110 s +b10001110 { +b10001110 %! +b10001110 -! +b10001110 5! +b10001110 =! +b10001110 E! b10001110 M! b10001110 U! b10001110 ]! b10001110 e! b10001110 m! b10001110 u! -b10001110 }! -b10001110 '" -b10001110 /" b10001110 7" b10001110 ?" b10001110 G" @@ -1209,79 +1035,52 @@ b10001110 _" b10001110 g" b10001110 o" b10001110 w" -b10001110 !# -b10001110 )# -b10001110 *# -b10001110 +# +b10001110 9# b10001110 A# -b10001110 B# -b10001110 C# +b10001110 I# +b10001110 Q# b10001110 Y# -b10001110 Z# -b10001110 [# -b10001110 +$ -b10001110 3$ -b10001110 ;$ +b10001110 a# +b10001110 i# +b10001110 q# +b10001110 y# +b10001110 #$ +b00000000000000000000000010001110 +$ +b00000000000000000000000010001110 3$ +b00000000000000000000000010001110 ;$ b10001110 C$ -b10001110 K$ +b10001110100011101000111010001110 K$ b10001110 S$ -b10001110 [$ +b10001110100011101000111010001110 [$ b10001110 c$ -b10001110 k$ +b10001110100011101000111010001110 k$ +b10001110 s$ +b10001110100011101000111010001110 {$ +b10001110 %% +b10001110 &% +b10001110 '% +b10001110 (% +b10001110 )% +b10001110 *% +b10001110 +% +b10001110 ,% b10001110 -% -b10001110 .% -b10001110 /% -b10001110 E% -b10001110 F% -b10001110 G% -b10001110 ]% -b10001110 ^% -b10001110 _% +b10001110 m% +b10001110 u% +b10001110 }% +b10001110 '& b10001110 /& -b10001110 0& -b10001110 1& +b10001110 7& +b10001110 ?& b10001110 G& -b10001110 H& -b10001110 I& -b10001110 _& -b10001110 `& -b10001110 a& +b10001110 O& +b10001110 W& +b10001110 w& +b10001110 !' +b10001110 )' b10001110 1' b10001110 9' b10001110 A' b10001110 I' b10001110 Q' -b10001110 Y' -b10001110 a' -b10001110 i' -b10001110 q' -b10001110 3( -b10001110 4( -b10001110 5( -b10001110 K( -b10001110 L( -b10001110 M( -b10001110 c( -b10001110 d( -b10001110 e( -b10001110 5) -b10001110 =) -b10001110 E) -b10001110 M) -b10001110 U) -b10001110 ]) -b10001110 e) -b10001110 m) -b10001110 u) -b00000000000000000000000010001110 }) -b00000000000000000000000010001110 '* -b00000000000000000000000010001110 /* -b10001110 7* -b10001110100011101000111010001110 ?* -b10001110 G* -b10001110100011101000111010001110 O* -b10001110 W* -b10001110100011101000111010001110 _* -b10001110 g* -b10001110100011101000111010001110 o* -1)+ +1#( diff --git a/test_regress/t/t_split_var_2_trace.pl b/test_regress/t/t_split_var_2_trace.pl index 9b50297b2..f922d3f24 100755 --- a/test_regress/t/t_split_var_2_trace.pl +++ b/test_regress/t/t_split_var_2_trace.pl @@ -22,8 +22,8 @@ execute( ); vcd_identical("$Self->{obj_dir}/simx.vcd", $Self->{golden_filename}); -file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 96); -file_grep($Self->{stats}, qr/SplitVar,\s+Split unpacked arrays\s+(\d+)/i, 13); +file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 180); +file_grep($Self->{stats}, qr/SplitVar,\s+Split unpacked arrays\s+(\d+)/i, 15); ok(1); 1;