Add --pins-bv option to use sc_bv for all ports.

This commit is contained in:
Wilson Snyder 2009-03-13 14:17:30 -04:00
parent 09091781cf
commit 193dcf38f4
11 changed files with 129 additions and 46 deletions

View File

@ -5,6 +5,8 @@ indicates the contributor was also the author of the fix; Thanks!
* Verilator 3.70**** * Verilator 3.70****
*** Add --pins-bv option to use sc_bv for all ports. [Brian Small]
**** Fix the SC_MODULE name() to not include __PVT__. [Bob Fredieu] **** Fix the SC_MODULE name() to not include __PVT__. [Bob Fredieu]
* Verilator 3.701 2009/02/26 * Verilator 3.701 2009/02/26
@ -1405,3 +1407,4 @@ Local variables:
mode: outline mode: outline
paragraph-separate: "[ \f\n]*$" paragraph-separate: "[ \f\n]*$"
end: end:

View File

@ -212,6 +212,7 @@ descriptions in the next sections for more information.
-O<optimization-letter> Selectable optimizations -O<optimization-letter> Selectable optimizations
--output-split <bytes> Split .cpp files into pieces --output-split <bytes> Split .cpp files into pieces
--output-split-cfuncs <statements> Split .ccp functions --output-split-cfuncs <statements> Split .ccp functions
--pins-bv <bits> Specify types for top level ports
--prefix <topname> Name of top level class --prefix <topname> Name of top level class
--profile-cfuncs Name functions for profiling --profile-cfuncs Name functions for profiling
--private Debugging; see docs --private Debugging; see docs
@ -459,9 +460,7 @@ the same as --prefix.
=item --no-pins64 =item --no-pins64
Specifies SystemC outputs of 33-64 bits wide should use sc_bv's instead of Backward compatible alias for "--pins-bv 33".
uint64_t's. Uint64's are faster, but sc_bvs were the default until
Verilator 3.671.
=item --no-skip-identical =item --no-skip-identical
@ -507,6 +506,17 @@ worse with decreasing split values. Note that this option is stronger than
--output-split in the sense that --output-split will not split inside a --output-split in the sense that --output-split will not split inside a
function. function.
=item --pins64
Backward compatible alias for "--pins-bv 65". Note that's a 65, not a 64.
=item --pins-bv I<width>
Specifies SystemC outputs of greater than or equal to I<width> bits wide
should use sc_bv's instead of uint32/uint64_t's. The default is "--pins-bv
65". Versions before Verilator 3.671 defaulted to "--pins-bv 33". The
more sc_bv is used, the worse for performance.
=item --prefix I<topname> =item --prefix I<topname>
Specifies the name of the top level class and makefile. Defaults to V Specifies the name of the top level class and makefile. Defaults to V

View File

@ -51,11 +51,11 @@ bool AstVar::isSigPublic() const {
} }
bool AstVar::isScQuad() const { bool AstVar::isScQuad() const {
return (isSc()&&isQuad()&&v3Global.opt.pins64()); return (isSc() && isQuad() && !isScBv());
} }
bool AstVar::isScWide() const { bool AstVar::isScBv() const {
return (isWide() || isSc()&&isQuad()&&!v3Global.opt.pins64()); return (isSc() && width() >= v3Global.opt.pinsBv());
} }
void AstVar::combineType(AstVarType type) { void AstVar::combineType(AstVarType type) {
@ -108,7 +108,7 @@ string AstVar::cType() const {
return "bool"; return "bool";
} else if (widthMin() <= VL_WORDSIZE) { } else if (widthMin() <= VL_WORDSIZE) {
return "uint32_t"; return "uint32_t";
} else if (isScWide()) { } else if (isWide()) {
return "uint32_t"; // []'s added later return "uint32_t"; // []'s added later
} else { } else {
return "uint64_t"; return "uint64_t";
@ -116,12 +116,12 @@ string AstVar::cType() const {
} }
string AstVar::scType() const { string AstVar::scType() const {
if (widthMin() == 1) { if (isScBv()) {
return (string("sc_bv<")+cvtToStr(widthMin())+"> "); // Keep the space so don't get >>
} else if (widthMin() == 1) {
return "bool"; return "bool";
} else if (widthMin() <= VL_WORDSIZE) { } else if (widthMin() <= VL_WORDSIZE) {
return "uint32_t"; return "uint32_t";
} else if (isScWide()) {
return (string("sc_bv<")+cvtToStr(widthMin())+"> "); // Keep the space so don't get >>
} else { } else {
return "uint64_t"; return "uint64_t";
} }

View File

@ -341,7 +341,7 @@ public:
bool isUsedParam() const { return m_usedParam; } bool isUsedParam() const { return m_usedParam; }
bool isSc() const { return m_sc; } bool isSc() const { return m_sc; }
bool isScQuad() const; bool isScQuad() const;
bool isScWide() const; bool isScBv() const;
bool isScSensitive() const { return m_scSensitive; } bool isScSensitive() const { return m_scSensitive; }
bool isSigPublic() const; bool isSigPublic() const;
bool isSigModPublic() const { return m_sigModPublic; } bool isSigModPublic() const { return m_sigModPublic; }

View File

@ -1412,7 +1412,7 @@ void EmitCStmts::emitVarList(AstNode* firstp, EisWhich which, const string& pref
int sigbytes = varp->widthAlignBytes(); int sigbytes = varp->widthAlignBytes();
if (varp->isUsedClock() && varp->widthMin()==1) sigbytes = 0; if (varp->isUsedClock() && varp->widthMin()==1) sigbytes = 0;
else if (varp->arraysp()) sigbytes=7; else if (varp->arraysp()) sigbytes=7;
else if (varp->isScWide()) sigbytes=6; else if (varp->isScBv()) sigbytes=6;
else if (sigbytes==8) sigbytes=5; else if (sigbytes==8) sigbytes=5;
else if (sigbytes==4) sigbytes=4; else if (sigbytes==4) sigbytes=4;
else if (sigbytes==2) sigbytes=2; else if (sigbytes==2) sigbytes=2;
@ -1544,7 +1544,7 @@ void EmitCImp::emitInt(AstModule* modp) {
if (!varp->initp()) nodep->v3fatalSrc("No init for a param?"); if (!varp->initp()) nodep->v3fatalSrc("No init for a param?");
// These should be static const values, however microsloth VC++ doesn't // These should be static const values, however microsloth VC++ doesn't
// support them. They also cause problems with GDB under GCC2.95. // support them. They also cause problems with GDB under GCC2.95.
if (varp->isScWide()) { // Unsupported for output if (varp->isWide()) { // Unsupported for output
puts("// enum WData "+varp->name()+" //wide"); puts("// enum WData "+varp->name()+" //wide");
} else if (!varp->initp()->castConst()) { // Unsupported for output } else if (!varp->initp()->castConst()) { // Unsupported for output
puts("// enum IData "+varp->name()+" //not simple value"); puts("// enum IData "+varp->name()+" //not simple value");
@ -1816,11 +1816,11 @@ class EmitCTrace : EmitCStmts {
puts("\n//======================\n\n"); puts("\n//======================\n\n");
} }
bool emitTraceIsScWide(AstTraceInc* nodep) { bool emitTraceIsScBv(AstTraceInc* nodep) {
AstVarRef* varrefp = nodep->valuep()->castVarRef(); AstVarRef* varrefp = nodep->valuep()->castVarRef();
if (!varrefp) return false; if (!varrefp) return false;
AstVar* varp = varrefp->varp(); AstVar* varp = varrefp->varp();
return varp->isSc() && varp->isScWide(); return varp->isSc() && varp->isScBv();
} }
void emitTraceInitOne(AstTraceDecl* nodep) { void emitTraceInitOne(AstTraceDecl* nodep) {
if (nodep->isWide()) { if (nodep->isWide()) {
@ -1851,7 +1851,7 @@ class EmitCTrace : EmitCStmts {
string full = ((m_funcp->funcType() == AstCFuncType::TRACE_FULL string full = ((m_funcp->funcType() == AstCFuncType::TRACE_FULL
|| m_funcp->funcType() == AstCFuncType::TRACE_FULL_SUB) || m_funcp->funcType() == AstCFuncType::TRACE_FULL_SUB)
? "full":"chg"); ? "full":"chg");
if (nodep->isWide() || emitTraceIsScWide(nodep)) { if (nodep->isWide() || emitTraceIsScBv(nodep)) {
puts("vcdp->"+full+"Array"); puts("vcdp->"+full+"Array");
} else if (nodep->isQuad()) { } else if (nodep->isQuad()) {
puts("vcdp->"+full+"Quad "); puts("vcdp->"+full+"Quad ");
@ -1873,7 +1873,7 @@ class EmitCTrace : EmitCStmts {
if (nodep->valuep()->castVarRef()) { if (nodep->valuep()->castVarRef()) {
AstVarRef* varrefp = nodep->valuep()->castVarRef(); AstVarRef* varrefp = nodep->valuep()->castVarRef();
AstVar* varp = varrefp->varp(); AstVar* varp = varrefp->varp();
if (emitTraceIsScWide(nodep)) puts("(uint32_t*)"); if (emitTraceIsScBv(nodep)) puts("(uint32_t*)");
puts("("); puts("(");
varrefp->iterate(*this); // Put var name out varrefp->iterate(*this); // Put var name out
if (varp->arraysp()) { if (varp->arraysp()) {
@ -1882,7 +1882,7 @@ class EmitCTrace : EmitCStmts {
else puts("["+cvtToStr(arrayindex)+"]"); else puts("["+cvtToStr(arrayindex)+"]");
} }
if (varp->isSc()) puts(".read()"); if (varp->isSc()) puts(".read()");
if (emitTraceIsScWide(nodep)) puts(".get_datap()"); if (emitTraceIsScBv(nodep)) puts(".get_datap()");
puts(")"); puts(")");
} else { } else {
puts("("); puts("(");

View File

@ -622,7 +622,8 @@ void V3Options::parseOptsList(FileLine* fl, int argc, char** argv) {
else if ( onoff (sw, "-inhibit-sim", flag/*ref*/)){ m_inhibitSim = flag; } else if ( onoff (sw, "-inhibit-sim", flag/*ref*/)){ m_inhibitSim = flag; }
else if ( onoff (sw, "-l2name", flag/*ref*/) ) { m_l2Name = flag; } else if ( onoff (sw, "-l2name", flag/*ref*/) ) { m_l2Name = flag; }
else if ( onoff (sw, "-lint-only", flag/*ref*/) ) { m_lintOnly = flag; } else if ( onoff (sw, "-lint-only", flag/*ref*/) ) { m_lintOnly = flag; }
else if ( onoff (sw, "-pins64", flag/*ref*/) ) { m_pins64 = flag; } else if ( !strcmp (sw, "-no-pins64") ) { m_pinsBv = 33; }
else if ( !strcmp (sw, "-pins64") ) { m_pinsBv = 65; }
else if ( !strcmp (sw, "-private") ) { m_public = false; } else if ( !strcmp (sw, "-private") ) { m_public = false; }
else if ( onoff (sw, "-profile-cfuncs", flag/*ref*/) ) { m_profileCFuncs = flag; } else if ( onoff (sw, "-profile-cfuncs", flag/*ref*/) ) { m_profileCFuncs = flag; }
else if ( onoff (sw, "-psl", flag/*ref*/) ) { m_psl = flag; } else if ( onoff (sw, "-psl", flag/*ref*/) ) { m_psl = flag; }
@ -740,6 +741,9 @@ void V3Options::parseOptsList(FileLine* fl, int argc, char** argv) {
else if ( !strcmp (sw, "-mod-prefix") && (i+1)<argc ) { else if ( !strcmp (sw, "-mod-prefix") && (i+1)<argc ) {
shift; m_modPrefix = argv[i]; shift; m_modPrefix = argv[i];
} }
else if ( !strcmp (sw, "-pins-bv") && (i+1)<argc ) {
shift; m_pinsBv = atoi(argv[i]);
}
else if ( !strcmp (sw, "-prefix") && (i+1)<argc ) { else if ( !strcmp (sw, "-prefix") && (i+1)<argc ) {
shift; m_prefix = argv[i]; shift; m_prefix = argv[i];
if (m_modPrefix=="") m_modPrefix = m_prefix; if (m_modPrefix=="") m_modPrefix = m_prefix;
@ -872,7 +876,7 @@ V3Options::V3Options() {
m_makeDepend = true; m_makeDepend = true;
m_makePhony = false; m_makePhony = false;
m_outFormatOk = false; m_outFormatOk = false;
m_pins64 = true; m_pinsBv = 65;
m_profileCFuncs = false; m_profileCFuncs = false;
m_preprocOnly = false; m_preprocOnly = false;
m_psl = false; m_psl = false;

View File

@ -104,7 +104,6 @@ class V3Options {
bool m_l2Name; // main switch: --l2name bool m_l2Name; // main switch: --l2name
bool m_lintOnly; // main switch: --lint-only bool m_lintOnly; // main switch: --lint-only
bool m_outFormatOk; // main switch: --cc, --sc or --sp was specified bool m_outFormatOk; // main switch: --cc, --sc or --sp was specified
bool m_pins64; // main switch: --pins64
bool m_profileCFuncs;// main switch: --profile-cfuncs bool m_profileCFuncs;// main switch: --profile-cfuncs
bool m_psl; // main switch: --psl bool m_psl; // main switch: --psl
bool m_public; // main switch: --public bool m_public; // main switch: --public
@ -121,6 +120,7 @@ class V3Options {
int m_outputSplit; // main switch: --output-split int m_outputSplit; // main switch: --output-split
int m_outputSplitCFuncs;// main switch: --output-split-cfuncs int m_outputSplitCFuncs;// main switch: --output-split-cfuncs
int m_outputSplitCTrace;// main switch: --output-split-ctrace int m_outputSplitCTrace;// main switch: --output-split-ctrace
int m_pinsBv; // main switch: --pins-bv
int m_traceDepth; // main switch: --trace-depth int m_traceDepth; // main switch: --trace-depth
int m_unrollCount; // main switch: --unroll-count int m_unrollCount; // main switch: --unroll-count
int m_unrollStmts; // main switch: --unroll-stmts int m_unrollStmts; // main switch: --unroll-stmts
@ -207,7 +207,6 @@ class V3Options {
bool traceDups() const { return m_traceDups; } bool traceDups() const { return m_traceDups; }
bool outFormatOk() const { return m_outFormatOk; } bool outFormatOk() const { return m_outFormatOk; }
bool keepTempFiles() const { return (V3Error::debugDefault()!=0); } bool keepTempFiles() const { return (V3Error::debugDefault()!=0); }
bool pins64() const { return m_pins64; }
bool profileCFuncs() const { return m_profileCFuncs; } bool profileCFuncs() const { return m_profileCFuncs; }
bool psl() const { return m_psl; } bool psl() const { return m_psl; }
bool allPublic() const { return m_public; } bool allPublic() const { return m_public; }
@ -221,6 +220,7 @@ class V3Options {
int outputSplit() const { return m_outputSplit; } int outputSplit() const { return m_outputSplit; }
int outputSplitCFuncs() const { return m_outputSplitCFuncs; } int outputSplitCFuncs() const { return m_outputSplitCFuncs; }
int outputSplitCTrace() const { return m_outputSplitCTrace; } int outputSplitCTrace() const { return m_outputSplitCTrace; }
int pinsBv() const { return m_pinsBv; }
int traceDepth() const { return m_traceDepth; } int traceDepth() const { return m_traceDepth; }
int unrollCount() const { return m_unrollCount; } int unrollCount() const { return m_unrollCount; }
int unrollStmts() const { return m_unrollStmts; } int unrollStmts() const { return m_unrollStmts; }

View File

@ -0,0 +1,33 @@
#!/usr/bin/perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2003 by Wilson Snyder. This program is free software; you can
# redistribute it and/or modify it under the terms of either the GNU
# General Public License or the Perl Artistic License.
top_filename("t/t_var_pinsizes.v");
compile (
v_flags2 => ['-sp -pins-bv 1'],
verilator_make_gcc => 0,
) if $Self->{v3};
if ($Self->{v3}) {
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<1>\s> \s+ i1;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<8>\s> \s+ i8;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<16>\s> \s+ i16;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<32>\s> \s+ i32;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<64>\s> \s+ i64;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<65>\s> \s+ i65;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<1>\s> \s+ o1;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<8>\s> \s+ o8;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<16>\s> \s+ o16;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<32>\s> \s+ o32;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<64>\s> \s+ o64;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<65>\s> \s+ o65;/x);
}
ok(1);
1;

View File

@ -0,0 +1,33 @@
#!/usr/bin/perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2003 by Wilson Snyder. This program is free software; you can
# redistribute it and/or modify it under the terms of either the GNU
# General Public License or the Perl Artistic License.
top_filename("t/t_var_pinsizes.v");
compile (
v_flags2 => ['-sp -pins-bv 2'],
verilator_make_gcc => 0,
) if $Self->{v3};
if ($Self->{v3}) {
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<bool> \s+ i1;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<8>\s> \s+ i8;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<16>\s> \s+ i16;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<32>\s> \s+ i32;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<64>\s> \s+ i64;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<65>\s> \s+ i65;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<bool> \s+ o1;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<8>\s> \s+ o8;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<16>\s> \s+ o16;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<32>\s> \s+ o32;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<64>\s> \s+ o64;/x);
file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<65>\s> \s+ o65;/x);
}
ok(1);
1;

View File

@ -14,19 +14,19 @@ compile (
) if $Self->{v3}; ) if $Self->{v3};
if ($Self->{v3}) { if ($Self->{v3}) {
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_in<bool> \s+ i1;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<bool> \s+ i1;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_in<uint32_t> \s+ i8;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint32_t> \s+ i8;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_in<uint32_t> \s+ i16;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint32_t> \s+ i16;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_in<uint32_t> \s+ i32;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint32_t> \s+ i32;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_in<sc_bv<64>\s> \s+ i64;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<64>\s> \s+ i64;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_in<sc_bv<65>\s> \s+ i65;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<65>\s> \s+ i65;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_out<bool> \s+ o1;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<bool> \s+ o1;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_out<uint32_t> \s+ o8;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint32_t> \s+ o8;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_out<uint32_t> \s+ o16;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint32_t> \s+ o16;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_out<uint32_t> \s+ o32;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint32_t> \s+ o32;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_out<sc_bv<64>\s> \s+ o64;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<64>\s> \s+ o64;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc32.sp", qr/sc_out<sc_bv<65>\s> \s+ o65;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<65>\s> \s+ o65;/x);
} }
ok(1); ok(1);

View File

@ -14,19 +14,19 @@ compile (
) if $Self->{v3}; ) if $Self->{v3};
if ($Self->{v3}) { if ($Self->{v3}) {
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_in<bool> \s+ i1;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<bool> \s+ i1;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_in<uint32_t> \s+ i8;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint32_t> \s+ i8;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_in<uint32_t> \s+ i16;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint32_t> \s+ i16;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_in<uint32_t> \s+ i32;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint32_t> \s+ i32;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_in<uint64_t> \s+ i64;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<uint64_t> \s+ i64;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_in<sc_bv<65>\s> \s+ i65;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_in<sc_bv<65>\s> \s+ i65;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_out<bool> \s+ o1;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<bool> \s+ o1;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_out<uint32_t> \s+ o8;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint32_t> \s+ o8;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_out<uint32_t> \s+ o16;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint32_t> \s+ o16;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_out<uint32_t> \s+ o32;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint32_t> \s+ o32;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_out<uint64_t> \s+ o64;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<uint64_t> \s+ o64;/x);
file_grep ("$Self->{obj_dir}/Vt_var_pins_sc64.sp", qr/sc_out<sc_bv<65>\s> \s+ o65;/x); file_grep ("$Self->{obj_dir}/$Self->{VM_PREFIX}.sp", qr/sc_out<sc_bv<65>\s> \s+ o65;/x);
} }
ok(1); ok(1);