Internal code coverage fixes
This commit is contained in:
parent
4cfa3f879a
commit
fbc814b54a
|
|
@ -42,6 +42,6 @@ remove_source("*examples/*");
|
||||||
# Would just be removed with remove_source in later step
|
# Would just be removed with remove_source in later step
|
||||||
remove_gcda_regexp(qr!test_regress/.*/(Vt_|Vtop_).*\.gcda!);
|
remove_gcda_regexp(qr!test_regress/.*/(Vt_|Vtop_).*\.gcda!);
|
||||||
|
|
||||||
exclude_line_regexp(qr/(\bv3fatalSrc\b|\bfatalSrc\b|\bVL_UNCOVERABLE\b|\bVL_FATAL|\bUASSERT\bERROR_RSVD_WORD\bV3ERROR_NA)/);
|
exclude_line_regexp(qr/(\bv3fatalSrc\b|\bfatalSrc\b|\bVL_UNCOVERABLE\b|\bVL_FATAL|\bUASSERT|\bERROR_RSVD_WORD\bV3ERROR_NA)/);
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
||||||
|
|
@ -1154,10 +1154,10 @@ string AstNode::locationStr() const {
|
||||||
const AstNode* backp = this;
|
const AstNode* backp = this;
|
||||||
int itmax = 10000; // Max iterations before giving up on location search
|
int itmax = 10000; // Max iterations before giving up on location search
|
||||||
while (backp) {
|
while (backp) {
|
||||||
if (--itmax < 0) {
|
if (VL_UNCOVERABLE(--itmax < 0)) {
|
||||||
// Likely some circular back link, and V3Ast is trying to report a low-level error
|
// Likely some circular back link, and V3Ast is trying to report a low-level error
|
||||||
UINFO(1, "Ran out of iterations finding locationStr on " << backp << endl);
|
UINFO(1, "Ran out of iterations finding locationStr on " << backp << endl);
|
||||||
return "";
|
return ""; // LCOV_EXCL_LINE
|
||||||
}
|
}
|
||||||
const AstScope* scopep;
|
const AstScope* scopep;
|
||||||
if ((scopep = VN_CAST_CONST(backp, Scope))) {
|
if ((scopep = VN_CAST_CONST(backp, Scope))) {
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,8 @@ private:
|
||||||
virtual void visit(AstVarRef* nodep) VL_OVERRIDE {
|
virtual void visit(AstVarRef* nodep) VL_OVERRIDE {
|
||||||
if (!VarFlags(nodep->varp()).m_notOpt) {
|
if (!VarFlags(nodep->varp()).m_notOpt) {
|
||||||
if (!m_cfuncp) { // Not in function, can't optimize
|
if (!m_cfuncp) { // Not in function, can't optimize
|
||||||
clearOptimizable(nodep->varp(), "BVnofunc");
|
// Perhaps impossible, but better safe
|
||||||
|
clearOptimizable(nodep->varp(), "BVnofunc"); // LCOV_EXCL_LINE
|
||||||
} else {
|
} else {
|
||||||
// If we're scoping down to it, it isn't really in the same block
|
// If we're scoping down to it, it isn't really in the same block
|
||||||
if (!nodep->hierThis()) clearOptimizable(nodep->varp(), "HierRef");
|
if (!nodep->hierThis()) clearOptimizable(nodep->varp(), "HierRef");
|
||||||
|
|
|
||||||
|
|
@ -2231,31 +2231,6 @@ V3Number& V3Number::opSelInto(const V3Number& lhs, int lsbval, int width) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
V3Number& V3Number::opCond(const V3Number& lhs, const V3Number& if1s, const V3Number& if0s) {
|
|
||||||
NUM_ASSERT_OP_ARGS3(lhs, if1s, if0s);
|
|
||||||
NUM_ASSERT_LOGIC_ARGS1(lhs);
|
|
||||||
V3Number lhstrue(&lhs);
|
|
||||||
lhstrue.opRedOr(lhs);
|
|
||||||
if (lhstrue.bitIs0(0)) {
|
|
||||||
this->opAssign(if0s);
|
|
||||||
} else if (lhstrue.bitIs1(0)) {
|
|
||||||
this->opAssign(if1s);
|
|
||||||
} else { // select is "X/Z"
|
|
||||||
setZero();
|
|
||||||
NUM_ASSERT_LOGIC_ARGS2(if1s, if0s);
|
|
||||||
for (int bit = 0; bit < this->width(); bit++) {
|
|
||||||
if (if0s.bitIs1(bit) && if1s.bitIs1(bit)) {
|
|
||||||
setBit(bit, 1);
|
|
||||||
} else if (if0s.bitIs0(bit) && if1s.bitIs0(bit)) {
|
|
||||||
setBit(bit, 0);
|
|
||||||
} else {
|
|
||||||
setBit(bit, 'x');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
//======================================================================
|
//======================================================================
|
||||||
// Ops - Floating point
|
// Ops - Floating point
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,6 @@ public:
|
||||||
V3Number& opSelInto(const V3Number& lhs, int lsbval, int width);
|
V3Number& opSelInto(const V3Number& lhs, int lsbval, int width);
|
||||||
V3Number& opToLowerN(const V3Number& lhs);
|
V3Number& opToLowerN(const V3Number& lhs);
|
||||||
V3Number& opToUpperN(const V3Number& lhs);
|
V3Number& opToUpperN(const V3Number& lhs);
|
||||||
V3Number& opCond(const V3Number& lhs, const V3Number& if1s, const V3Number& if0s);
|
|
||||||
V3Number& opCaseEq(const V3Number& lhs, const V3Number& rhs);
|
V3Number& opCaseEq(const V3Number& lhs, const V3Number& rhs);
|
||||||
V3Number& opCaseNeq(const V3Number& lhs, const V3Number& rhs);
|
V3Number& opCaseNeq(const V3Number& lhs, const V3Number& rhs);
|
||||||
V3Number& opWildEq(const V3Number& lhs, const V3Number& rhs);
|
V3Number& opWildEq(const V3Number& lhs, const V3Number& rhs);
|
||||||
|
|
|
||||||
|
|
@ -1532,14 +1532,16 @@ void OrderVisitor::processDomainsIterate(OrderEitherVertex* vertexp) {
|
||||||
} else if (domainp != fromVertexp->domainp()) {
|
} else if (domainp != fromVertexp->domainp()) {
|
||||||
// Make a domain that merges the two domains
|
// Make a domain that merges the two domains
|
||||||
bool ddebug = debug() >= 9;
|
bool ddebug = debug() >= 9;
|
||||||
if (ddebug) {
|
|
||||||
|
if (ddebug) { // LCOV_EXCL_START
|
||||||
|
|
||||||
cout << endl;
|
cout << endl;
|
||||||
UINFO(0, " conflicting domain " << fromVertexp << endl);
|
UINFO(0, " conflicting domain " << fromVertexp << endl);
|
||||||
UINFO(0, " dorig=" << domainp << endl);
|
UINFO(0, " dorig=" << domainp << endl);
|
||||||
domainp->dumpTree(cout);
|
domainp->dumpTree(cout);
|
||||||
UINFO(0, " d2 =" << fromVertexp->domainp() << endl);
|
UINFO(0, " d2 =" << fromVertexp->domainp() << endl);
|
||||||
fromVertexp->domainp()->dumpTree(cout);
|
fromVertexp->domainp()->dumpTree(cout);
|
||||||
}
|
} // LCOV_EXCL_STOP
|
||||||
AstSenTree* newtreep = domainp->cloneTree(false);
|
AstSenTree* newtreep = domainp->cloneTree(false);
|
||||||
AstNodeSenItem* newtree2p = fromVertexp->domainp()->sensesp()->cloneTree(true);
|
AstNodeSenItem* newtree2p = fromVertexp->domainp()->sensesp()->cloneTree(true);
|
||||||
UASSERT_OBJ(newtree2p, fromVertexp->domainp(),
|
UASSERT_OBJ(newtree2p, fromVertexp->domainp(),
|
||||||
|
|
@ -1549,13 +1551,13 @@ void OrderVisitor::processDomainsIterate(OrderEitherVertex* vertexp) {
|
||||||
V3Const::constifyExpensiveEdit(newtreep); // Remove duplicates
|
V3Const::constifyExpensiveEdit(newtreep); // Remove duplicates
|
||||||
newtreep->multi(true); // Comment that it was made from 2 clock domains
|
newtreep->multi(true); // Comment that it was made from 2 clock domains
|
||||||
domainp = m_finder.getSenTree(domainp->fileline(), newtreep);
|
domainp = m_finder.getSenTree(domainp->fileline(), newtreep);
|
||||||
if (ddebug) {
|
if (ddebug) { // LCOV_EXCL_START
|
||||||
UINFO(0, " dnew =" << newtreep << endl);
|
UINFO(0, " dnew =" << newtreep << endl);
|
||||||
newtreep->dumpTree(cout);
|
newtreep->dumpTree(cout);
|
||||||
UINFO(0, " find =" << domainp << endl);
|
UINFO(0, " find =" << domainp << endl);
|
||||||
domainp->dumpTree(cout);
|
domainp->dumpTree(cout);
|
||||||
cout << endl;
|
cout << endl;
|
||||||
}
|
} // LCOV_EXCL_STOP
|
||||||
VL_DO_DANGLING(newtreep->deleteTree(), newtreep);
|
VL_DO_DANGLING(newtreep->deleteTree(), newtreep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -341,9 +341,10 @@ void V3Os::u_sleep(int64_t usec) {
|
||||||
int V3Os::system(const string& command) {
|
int V3Os::system(const string& command) {
|
||||||
UINFO(1, "Running system: " << command << endl);
|
UINFO(1, "Running system: " << command << endl);
|
||||||
const int ret = ::system(command.c_str());
|
const int ret = ::system(command.c_str());
|
||||||
if (ret == -1) {
|
if (VL_UNCOVERABLE(ret == -1)) {
|
||||||
v3fatal("Failed to execute command:" << command << " " << strerror(errno));
|
v3fatal("Failed to execute command:" // LCOV_EXCL_LINE
|
||||||
return -1;
|
<< command << " " << strerror(errno));
|
||||||
|
return -1; // LCOV_EXCL_LINE
|
||||||
} else {
|
} else {
|
||||||
UASSERT(WIFEXITED(ret), "system(" << command << ") returned unexpected value of " << ret);
|
UASSERT(WIFEXITED(ret), "system(" << command << ") returned unexpected value of " << ret);
|
||||||
const int exit_code = WEXITSTATUS(ret);
|
const int exit_code = WEXITSTATUS(ret);
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,6 @@ public:
|
||||||
// Interactions with lexer
|
// Interactions with lexer
|
||||||
void lexNew();
|
void lexNew();
|
||||||
void lexDestroy();
|
void lexDestroy();
|
||||||
void statePop(); // Parser -> lexer communication
|
|
||||||
static int stateVerilogRecent(); // Parser -> lexer communication
|
static int stateVerilogRecent(); // Parser -> lexer communication
|
||||||
int prevLexToken() { return m_prevLexToken; } // Parser -> lexer communication
|
int prevLexToken() { return m_prevLexToken; } // Parser -> lexer communication
|
||||||
size_t flexPpInputToLex(char* buf, size_t max_size) { return ppInputToLex(buf, max_size); }
|
size_t flexPpInputToLex(char* buf, size_t max_size) { return ppInputToLex(buf, max_size); }
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ public:
|
||||||
: V3LexerBase(NULL) {}
|
: V3LexerBase(NULL) {}
|
||||||
~V3Lexer() {}
|
~V3Lexer() {}
|
||||||
// METHODS
|
// METHODS
|
||||||
void statePop() { yy_pop_state(); }
|
|
||||||
void unputString(const char* textp, size_t length) {
|
void unputString(const char* textp, size_t length) {
|
||||||
// Add characters to input stream in back-to-front order
|
// Add characters to input stream in back-to-front order
|
||||||
const char* cp = textp;
|
const char* cp = textp;
|
||||||
|
|
@ -51,8 +50,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void V3ParseImp::statePop() { parsep()->m_lexerp->statePop(); }
|
|
||||||
|
|
||||||
void V3ParseImp::unputString(const char* textp, size_t length) {
|
void V3ParseImp::unputString(const char* textp, size_t length) {
|
||||||
parsep()->m_lexerp->unputString(textp, length);
|
parsep()->m_lexerp->unputString(textp, length);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ protected:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static V3PreProc* createPreProc(FileLine* fl);
|
static V3PreProc* createPreProc(FileLine* fl);
|
||||||
virtual ~V3PreProc() {}
|
virtual ~V3PreProc() {} // LCOV_EXCL_LINE // Persistent
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // Guard
|
#endif // Guard
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,8 @@ public:
|
||||||
if (m_symPrefix != "") os << " symPrefix=" << m_symPrefix;
|
if (m_symPrefix != "") os << " symPrefix=" << m_symPrefix;
|
||||||
os << " n=" << nodep();
|
os << " n=" << nodep();
|
||||||
os << endl;
|
os << endl;
|
||||||
if (doneSymsr.find(this) != doneSymsr.end()) {
|
if (VL_UNCOVERABLE(doneSymsr.find(this) != doneSymsr.end())) {
|
||||||
os << indent << "| ^ duplicate, so no children printed\n";
|
os << indent << "| ^ duplicate, so no children printed\n"; // LCOV_EXCL_LINE
|
||||||
} else {
|
} else {
|
||||||
doneSymsr.insert(this);
|
doneSymsr.insert(this);
|
||||||
for (IdNameMap::const_iterator it = m_idNameMap.begin(); it != m_idNameMap.end();
|
for (IdNameMap::const_iterator it = m_idNameMap.begin(); it != m_idNameMap.end();
|
||||||
|
|
|
||||||
|
|
@ -41,10 +41,10 @@ private:
|
||||||
m_dataSize *= 2;
|
m_dataSize *= 2;
|
||||||
// UINFO(9, "Realloc "<<allocSize()<<" for "<<point<<" "<<cvtToHex(m_datap)<<endl);
|
// UINFO(9, "Realloc "<<allocSize()<<" for "<<point<<" "<<cvtToHex(m_datap)<<endl);
|
||||||
vluint64_t* newp = static_cast<vluint64_t*>(realloc(m_datap, allocSize()));
|
vluint64_t* newp = static_cast<vluint64_t*>(realloc(m_datap, allocSize()));
|
||||||
if (!newp) {
|
if (VL_UNCOVERABLE(!newp)) {
|
||||||
// cppcheck-suppress doubleFree // cppcheck 1.90 bug - realloc doesn't free on fail
|
// cppcheck-suppress doubleFree // cppcheck 1.90 bug - realloc doesn't free on fail
|
||||||
free(m_datap);
|
free(m_datap); // LCOV_EXCL_LINE
|
||||||
v3fatal("Out of memory increasing buckets");
|
v3fatal("Out of memory increasing buckets"); // LCOV_EXCL_LINE
|
||||||
}
|
}
|
||||||
m_datap = newp;
|
m_datap = newp;
|
||||||
for (vluint64_t i = oldsize; i < m_dataSize; i += 64) m_datap[i / 64] = 0;
|
for (vluint64_t i = oldsize; i < m_dataSize; i += 64) m_datap[i / 64] = 0;
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,6 @@ extern void yyerrorf(const char* format, ...);
|
||||||
yyerrorf("Unsupported: " language " reserved word not implemented: '%s'", yytext); \
|
yyerrorf("Unsupported: " language " reserved word not implemented: '%s'", yytext); \
|
||||||
FL_BRK; } while(0)
|
FL_BRK; } while(0)
|
||||||
|
|
||||||
// See V3Read.cpp
|
|
||||||
//void V3ParseImp::statePop() { yy_pop_state(); }
|
|
||||||
|
|
||||||
//======================================================================
|
//======================================================================
|
||||||
|
|
||||||
void yyerror(const char* errmsg) {
|
void yyerror(const char* errmsg) {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ hello, from a concatenated string.
|
||||||
hello, from a concatenated format string [0].
|
hello, from a concatenated format string [0].
|
||||||
extra argument: 0
|
extra argument: 0
|
||||||
0 : pre argument after
|
0 : pre argument after
|
||||||
[0] Embedded <#013> return
|
[0] Embedded tab ' ' and <#013> return
|
||||||
[0] Embedded
|
[0] Embedded
|
||||||
multiline
|
multiline
|
||||||
'23 23 23'
|
'23 23 23'
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ module t;
|
||||||
$write("hel", "lo, fr", "om a concatenated format string [%0t].\n", $time);
|
$write("hel", "lo, fr", "om a concatenated format string [%0t].\n", $time);
|
||||||
$display("extra argument: ", $time);
|
$display("extra argument: ", $time);
|
||||||
$display($time,, ": pre argument",, "after");
|
$display($time,, ": pre argument",, "after");
|
||||||
$write("[%0t] Embedded \r return\n", $time);
|
$write("[%0t] Embedded tab '\t' and \r return\n", $time);
|
||||||
$display("[%0t] Embedded\
|
$display("[%0t] Embedded\
|
||||||
multiline", $time);
|
multiline", $time);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ module submodule ();
|
||||||
final begin
|
final begin
|
||||||
$write("d");
|
$write("d");
|
||||||
end
|
end
|
||||||
|
final ; // Empty test
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module t ();
|
module t ();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
%Error: t/t_func_return_bad.v:10:7: Return isn't underneath a task or function
|
||||||
|
10 | return;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_func_return_bad.v:11:7: continue isn't underneath a loop
|
||||||
|
11 | continue;
|
||||||
|
| ^~~~~~~~
|
||||||
|
%Error: t/t_func_return_bad.v:12:7: break isn't underneath a loop
|
||||||
|
12 | break;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2011 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
|
||||||
|
|
||||||
|
scenarios(linter => 1);
|
||||||
|
|
||||||
|
lint(
|
||||||
|
fails => 1,
|
||||||
|
expect_filename => $Self->{golden_filename},
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(1);
|
||||||
|
1;
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2011 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module t (/*AUTOARG*/);
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
return; // Not under function
|
||||||
|
continue; // Not under loop
|
||||||
|
break; // Not under loop
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
%Error: t/t_lint_restore_prag_bad.v:10:4: /*verilator lint_restore*/ without matching save.
|
||||||
|
10 | /*verilator lint_restore*/
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2003-2009 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
|
||||||
|
|
||||||
|
scenarios(vlt => 1);
|
||||||
|
|
||||||
|
lint(
|
||||||
|
fails => 1,
|
||||||
|
expect_filename => $Self->{golden_filename},
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(1);
|
||||||
|
1;
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2007 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module t ();
|
||||||
|
|
||||||
|
// No matching save
|
||||||
|
// verilator lint_restore
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -51,6 +51,10 @@ module t (/*AUTOARG*/
|
||||||
if (5'd10 != 5'D10) $stop;
|
if (5'd10 != 5'D10) $stop;
|
||||||
if (5'd10 != 5'H a) $stop;
|
if (5'd10 != 5'H a) $stop;
|
||||||
if (5'd10 != 5 'O 12) $stop;
|
if (5'd10 != 5 'O 12) $stop;
|
||||||
|
if (24'h29cbb8 != 24'o12345670) $stop;
|
||||||
|
if (6'b111xxx !== 6'o7x) $stop;
|
||||||
|
if (6'b111??? !== 6'o7?) $stop;
|
||||||
|
if (6'b111zzz !== 6'o7z) $stop;
|
||||||
//
|
//
|
||||||
if (r_wide0 !== {32'haa111111,32'hbb222222,32'hcc333333,32'hdd444444}) $stop;
|
if (r_wide0 !== {32'haa111111,32'hbb222222,32'hcc333333,32'hdd444444}) $stop;
|
||||||
if (r_wide1 !== {32'haa111111,32'hbb222222}) $stop;
|
if (r_wide1 !== {32'haa111111,32'hbb222222}) $stop;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,199 @@
|
||||||
|
%Error: t/t_vams_kwd_bad.v:12:8: Unsupported: AMS reserved word not implemented: 'above'
|
||||||
|
12 | int above;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:12:13: syntax error, unexpected ';', expecting IDENTIFIER
|
||||||
|
12 | int above;
|
||||||
|
| ^
|
||||||
|
%Error: t/t_vams_kwd_bad.v:13:8: Unsupported: AMS reserved word not implemented: 'abs'
|
||||||
|
13 | int abs;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:14:8: Unsupported: AMS reserved word not implemented: 'absdelay'
|
||||||
|
14 | int absdelay;
|
||||||
|
| ^~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:15:8: Unsupported: AMS reserved word not implemented: 'abstol'
|
||||||
|
15 | int abstol;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:16:8: Unsupported: AMS reserved word not implemented: 'ac_stim'
|
||||||
|
16 | int ac_stim;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:17:8: Unsupported: AMS reserved word not implemented: 'access'
|
||||||
|
17 | int access;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:18:8: Unsupported: AMS reserved word not implemented: 'acos'
|
||||||
|
18 | int acos;
|
||||||
|
| ^~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:19:8: Unsupported: AMS reserved word not implemented: 'acosh'
|
||||||
|
19 | int acosh;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:20:8: Unsupported: AMS reserved word not implemented: 'aliasparam'
|
||||||
|
20 | int aliasparam;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:21:8: Unsupported: AMS reserved word not implemented: 'analog'
|
||||||
|
21 | int analog;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:22:8: Unsupported: AMS reserved word not implemented: 'analysis'
|
||||||
|
22 | int analysis;
|
||||||
|
| ^~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:23:8: Unsupported: AMS reserved word not implemented: 'assert'
|
||||||
|
23 | int assert;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:24:8: Unsupported: AMS reserved word not implemented: 'branch'
|
||||||
|
24 | int branch;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:25:8: Unsupported: AMS reserved word not implemented: 'connect'
|
||||||
|
25 | int connect;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:26:8: Unsupported: AMS reserved word not implemented: 'connectmodule'
|
||||||
|
26 | int connectmodule;
|
||||||
|
| ^~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:27:8: Unsupported: AMS reserved word not implemented: 'connectrules'
|
||||||
|
27 | int connectrules;
|
||||||
|
| ^~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:28:8: Unsupported: AMS reserved word not implemented: 'continuous'
|
||||||
|
28 | int continuous;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:29:8: Unsupported: AMS reserved word not implemented: 'cross'
|
||||||
|
29 | int cross;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:30:8: Unsupported: AMS reserved word not implemented: 'ddt'
|
||||||
|
30 | int ddt;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:31:8: Unsupported: AMS reserved word not implemented: 'ddt_nature'
|
||||||
|
31 | int ddt_nature;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:32:8: Unsupported: AMS reserved word not implemented: 'ddx'
|
||||||
|
32 | int ddx;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:33:8: Unsupported: AMS reserved word not implemented: 'discipline'
|
||||||
|
33 | int discipline;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:34:8: Unsupported: AMS reserved word not implemented: 'discrete'
|
||||||
|
34 | int discrete;
|
||||||
|
| ^~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:35:8: Unsupported: AMS reserved word not implemented: 'domain'
|
||||||
|
35 | int domain;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:36:8: Unsupported: AMS reserved word not implemented: 'driver_update'
|
||||||
|
36 | int driver_update;
|
||||||
|
| ^~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:37:8: Unsupported: AMS reserved word not implemented: 'endconnectrules'
|
||||||
|
37 | int endconnectrules;
|
||||||
|
| ^~~~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:38:8: Unsupported: AMS reserved word not implemented: 'enddiscipline'
|
||||||
|
38 | int enddiscipline;
|
||||||
|
| ^~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:39:8: Unsupported: AMS reserved word not implemented: 'endnature'
|
||||||
|
39 | int endnature;
|
||||||
|
| ^~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:40:8: Unsupported: AMS reserved word not implemented: 'endparamset'
|
||||||
|
40 | int endparamset;
|
||||||
|
| ^~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:41:8: Unsupported: AMS reserved word not implemented: 'exclude'
|
||||||
|
41 | int exclude;
|
||||||
|
| ^~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:42:8: Unsupported: AMS reserved word not implemented: 'final_step'
|
||||||
|
42 | int final_step;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:43:8: Unsupported: AMS reserved word not implemented: 'flicker_noise'
|
||||||
|
43 | int flicker_noise;
|
||||||
|
| ^~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:44:8: Unsupported: AMS reserved word not implemented: 'flow'
|
||||||
|
44 | int flow;
|
||||||
|
| ^~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:45:8: Unsupported: AMS reserved word not implemented: 'from'
|
||||||
|
45 | int from;
|
||||||
|
| ^~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:46:8: Unsupported: AMS reserved word not implemented: 'ground'
|
||||||
|
46 | int ground;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:47:8: Unsupported: AMS reserved word not implemented: 'idt'
|
||||||
|
47 | int idt;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:48:8: Unsupported: AMS reserved word not implemented: 'idt_nature'
|
||||||
|
48 | int idt_nature;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:49:8: Unsupported: AMS reserved word not implemented: 'idtmod'
|
||||||
|
49 | int idtmod;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:50:8: Unsupported: AMS reserved word not implemented: 'inf'
|
||||||
|
50 | int inf;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:51:8: Unsupported: AMS reserved word not implemented: 'initial_step'
|
||||||
|
51 | int initial_step;
|
||||||
|
| ^~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:52:8: Unsupported: AMS reserved word not implemented: 'laplace_nd'
|
||||||
|
52 | int laplace_nd;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:53:8: Unsupported: AMS reserved word not implemented: 'laplace_np'
|
||||||
|
53 | int laplace_np;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:54:8: Unsupported: AMS reserved word not implemented: 'laplace_zd'
|
||||||
|
54 | int laplace_zd;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:55:8: Unsupported: AMS reserved word not implemented: 'laplace_zp'
|
||||||
|
55 | int laplace_zp;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:56:8: Unsupported: AMS reserved word not implemented: 'last_crossing'
|
||||||
|
56 | int last_crossing;
|
||||||
|
| ^~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:57:8: Unsupported: AMS reserved word not implemented: 'limexp'
|
||||||
|
57 | int limexp;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:58:8: Unsupported: AMS reserved word not implemented: 'max'
|
||||||
|
58 | int max;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:59:8: Unsupported: AMS reserved word not implemented: 'merged'
|
||||||
|
59 | int merged;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:60:8: Unsupported: AMS reserved word not implemented: 'min'
|
||||||
|
60 | int min;
|
||||||
|
| ^~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:61:8: Unsupported: AMS reserved word not implemented: 'nature'
|
||||||
|
61 | int nature;
|
||||||
|
| ^~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:62:8: Unsupported: AMS reserved word not implemented: 'net_resolution'
|
||||||
|
62 | int net_resolution;
|
||||||
|
| ^~~~~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:63:8: Unsupported: AMS reserved word not implemented: 'noise_table'
|
||||||
|
63 | int noise_table;
|
||||||
|
| ^~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:64:8: Unsupported: AMS reserved word not implemented: 'paramset'
|
||||||
|
64 | int paramset;
|
||||||
|
| ^~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:65:8: Unsupported: AMS reserved word not implemented: 'potential'
|
||||||
|
65 | int potential;
|
||||||
|
| ^~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:66:8: Unsupported: AMS reserved word not implemented: 'resolveto'
|
||||||
|
66 | int resolveto;
|
||||||
|
| ^~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:67:8: Unsupported: AMS reserved word not implemented: 'slew'
|
||||||
|
67 | int slew;
|
||||||
|
| ^~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:68:8: Unsupported: AMS reserved word not implemented: 'split'
|
||||||
|
68 | int split;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:69:8: Unsupported: AMS reserved word not implemented: 'timer'
|
||||||
|
69 | int timer;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:70:8: Unsupported: AMS reserved word not implemented: 'transition'
|
||||||
|
70 | int transition;
|
||||||
|
| ^~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:71:8: Unsupported: AMS reserved word not implemented: 'units'
|
||||||
|
71 | int units;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:72:8: Unsupported: AMS reserved word not implemented: 'white_noise'
|
||||||
|
72 | int white_noise;
|
||||||
|
| ^~~~~~~~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:73:8: Unsupported: AMS reserved word not implemented: 'zi_nd'
|
||||||
|
73 | int zi_nd;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:74:8: Unsupported: AMS reserved word not implemented: 'zi_np'
|
||||||
|
74 | int zi_np;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:75:8: Unsupported: AMS reserved word not implemented: 'zi_zd'
|
||||||
|
75 | int zi_zd;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: t/t_vams_kwd_bad.v:76:8: Unsupported: AMS reserved word not implemented: 'zi_zp'
|
||||||
|
76 | int zi_zp;
|
||||||
|
| ^~~~~
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2019 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
|
||||||
|
|
||||||
|
scenarios(vlt => 1);
|
||||||
|
|
||||||
|
lint(
|
||||||
|
fails => 1,
|
||||||
|
verilator_flags2 => ["--error-limit 1000"],
|
||||||
|
expect_filename => $Self->{golden_filename},
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(1);
|
||||||
|
1;
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed into the Public Domain, for any use,
|
||||||
|
// without warranty, 2019 by Driss Hafdi.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
`begin_keywords "VAMS-2.3"
|
||||||
|
|
||||||
|
module t (/*AUTOARG*/);
|
||||||
|
|
||||||
|
// Just get errors on bad keywords (for code coverage)
|
||||||
|
int above;
|
||||||
|
int abs;
|
||||||
|
int absdelay;
|
||||||
|
int abstol;
|
||||||
|
int ac_stim;
|
||||||
|
int access;
|
||||||
|
int acos;
|
||||||
|
int acosh;
|
||||||
|
int aliasparam;
|
||||||
|
int analog;
|
||||||
|
int analysis;
|
||||||
|
int assert;
|
||||||
|
int branch;
|
||||||
|
int connect;
|
||||||
|
int connectmodule;
|
||||||
|
int connectrules;
|
||||||
|
int continuous;
|
||||||
|
int cross;
|
||||||
|
int ddt;
|
||||||
|
int ddt_nature;
|
||||||
|
int ddx;
|
||||||
|
int discipline;
|
||||||
|
int discrete;
|
||||||
|
int domain;
|
||||||
|
int driver_update;
|
||||||
|
int endconnectrules;
|
||||||
|
int enddiscipline;
|
||||||
|
int endnature;
|
||||||
|
int endparamset;
|
||||||
|
int exclude;
|
||||||
|
int final_step;
|
||||||
|
int flicker_noise;
|
||||||
|
int flow;
|
||||||
|
int from;
|
||||||
|
int ground;
|
||||||
|
int idt;
|
||||||
|
int idt_nature;
|
||||||
|
int idtmod;
|
||||||
|
int inf;
|
||||||
|
int initial_step;
|
||||||
|
int laplace_nd;
|
||||||
|
int laplace_np;
|
||||||
|
int laplace_zd;
|
||||||
|
int laplace_zp;
|
||||||
|
int last_crossing;
|
||||||
|
int limexp;
|
||||||
|
int max;
|
||||||
|
int merged;
|
||||||
|
int min;
|
||||||
|
int nature;
|
||||||
|
int net_resolution;
|
||||||
|
int noise_table;
|
||||||
|
int paramset;
|
||||||
|
int potential;
|
||||||
|
int resolveto;
|
||||||
|
int slew;
|
||||||
|
int split;
|
||||||
|
int timer;
|
||||||
|
int transition;
|
||||||
|
int units;
|
||||||
|
int white_noise;
|
||||||
|
int zi_nd;
|
||||||
|
int zi_np;
|
||||||
|
int zi_zd;
|
||||||
|
int zi_zp;
|
||||||
|
|
||||||
|
endmodule
|
||||||
Loading…
Reference in New Issue