Merge branch 'master' of github.com:steveicarus/iverilog
This commit is contained in:
commit
ecd7b39244
|
|
@ -1,10 +1,10 @@
|
||||||
.TH iverilog 1 "Nov 8th, 2017" "" "Version %M.%n%E"
|
.TH iverilog 1 "Sep 20th, 2019" "" "Version %M.%n%E"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
iverilog - Icarus Verilog compiler
|
iverilog - Icarus Verilog compiler
|
||||||
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B iverilog
|
.B iverilog
|
||||||
[\-ESuVv] [\-Bpath] [\-ccmdfile|\-fcmdfile] [\-Dmacro[=defn]]
|
[\-EiSuVv] [\-Bpath] [\-ccmdfile|\-fcmdfile] [\-Dmacro[=defn]]
|
||||||
[\-Pparameter=value] [\-pflag=value] [\-dname]
|
[\-Pparameter=value] [\-pflag=value] [\-dname]
|
||||||
[\-g1995\:|\-g2001\:|\-g2005\:|\-g2005-sv\:|\-g2009\:|\-g2012\:|\-g<feature>]
|
[\-g1995\:|\-g2001\:|\-g2005\:|\-g2005-sv\:|\-g2009\:|\-g2012\:|\-g<feature>]
|
||||||
[\-Iincludedir] [\-mmodule] [\-M[mode=]file] [\-Nfile] [\-ooutputfilename]
|
[\-Iincludedir] [\-mmodule] [\-M[mode=]file] [\-Nfile] [\-ooutputfilename]
|
||||||
|
|
@ -80,6 +80,11 @@ use any of the new \fIIEEE1800\fP keywords.
|
||||||
Enable or disable (default) support for Verilog\-AMS.
|
Enable or disable (default) support for Verilog\-AMS.
|
||||||
Very little Verilog\-AMS specific functionality is currently supported.
|
Very little Verilog\-AMS specific functionality is currently supported.
|
||||||
.TP 8
|
.TP 8
|
||||||
|
.B -gassertions\fI|\fP-gno-assertions
|
||||||
|
Enable (default) or disable SystemVerilog assertions. When enabled,
|
||||||
|
assertion statements are elaborated. When disabled, assertion statements
|
||||||
|
are parsed but ignored.
|
||||||
|
.TP 8
|
||||||
.B -gspecify\fI|\fP-gno-specify
|
.B -gspecify\fI|\fP-gno-specify
|
||||||
Enable or disable (default) specify block support. When enabled,
|
Enable or disable (default) specify block support. When enabled,
|
||||||
specify block code is elaborated. When disabled, specify blocks are
|
specify block code is elaborated. When disabled, specify blocks are
|
||||||
|
|
@ -151,6 +156,13 @@ for Verilog include files. The \fB\-I\fP switch may be used many times
|
||||||
to specify several directories to search, the directories are searched
|
to specify several directories to search, the directories are searched
|
||||||
in the order they appear on the command line.
|
in the order they appear on the command line.
|
||||||
.TP 8
|
.TP 8
|
||||||
|
.B -i
|
||||||
|
Ignore missing modules. Normally it is an error if a module instantiation
|
||||||
|
refers to an undefined module. This option causes the compiler to skip
|
||||||
|
over that instantiation. It will also stop the compiler returning an
|
||||||
|
error if there are no top level modules. This allows the compiler to be
|
||||||
|
used to check incomplete designs for errors.
|
||||||
|
.TP 8
|
||||||
.B -l\fIfile\fP
|
.B -l\fIfile\fP
|
||||||
Add the specified file to the list of source files to be compiled,
|
Add the specified file to the list of source files to be compiled,
|
||||||
but mark it as a library file. All modules contained within that
|
but mark it as a library file. All modules contained within that
|
||||||
|
|
@ -578,7 +590,7 @@ Tips on using, debugging, and developing the compiler can be found at
|
||||||
|
|
||||||
.SH COPYRIGHT
|
.SH COPYRIGHT
|
||||||
.nf
|
.nf
|
||||||
Copyright \(co 2002\-2017 Stephen Williams
|
Copyright \(co 2002\-2019 Stephen Williams
|
||||||
|
|
||||||
This document can be freely redistributed according to the terms of the
|
This document can be freely redistributed according to the terms of the
|
||||||
GNU General Public License version 2.0
|
GNU General Public License version 2.0
|
||||||
|
|
|
||||||
4
main.cc
4
main.cc
|
|
@ -735,7 +735,7 @@ static void read_iconfig_file(const char*ipath)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (strcmp(buf, "ignore_missing_modules") == 0) {
|
} else if (strcmp(buf, "ignore_missing_modules") == 0) {
|
||||||
if (strcmp(cp, "true") == 0)
|
if (strcmp(cp, "true") == 0)
|
||||||
ignore_missing_modules = true;
|
ignore_missing_modules = true;
|
||||||
|
|
||||||
|
|
@ -1174,7 +1174,7 @@ int main(int argc, char*argv[])
|
||||||
|
|
||||||
if (roots.empty()) {
|
if (roots.empty()) {
|
||||||
cerr << "No top level modules, and no -s option." << endl;
|
cerr << "No top level modules, and no -s option." << endl;
|
||||||
return 1;
|
return ignore_missing_modules ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
68
parse.y
68
parse.y
|
|
@ -666,6 +666,7 @@ static void current_function_set_statement(const YYLTYPE&loc, vector<Statement*>
|
||||||
%type <specpath> specify_edge_path specify_edge_path_decl
|
%type <specpath> specify_edge_path specify_edge_path_decl
|
||||||
|
|
||||||
%type <real_type> non_integer_type
|
%type <real_type> non_integer_type
|
||||||
|
%type <int_val> assert_or_assume
|
||||||
%type <int_val> atom2_type
|
%type <int_val> atom2_type
|
||||||
%type <int_val> module_start module_end
|
%type <int_val> module_start module_end
|
||||||
|
|
||||||
|
|
@ -714,6 +715,13 @@ source_text
|
||||||
| /* empty */
|
| /* empty */
|
||||||
;
|
;
|
||||||
|
|
||||||
|
assert_or_assume
|
||||||
|
: K_assert
|
||||||
|
{ $$ = 1; } /* IEEE1800-2012: Table 20-7 */
|
||||||
|
| K_assume
|
||||||
|
{ $$ = 4; } /* IEEE1800-2012: Table 20-7 */
|
||||||
|
;
|
||||||
|
|
||||||
assertion_item /* IEEE1800-2012: A.6.10 */
|
assertion_item /* IEEE1800-2012: A.6.10 */
|
||||||
: concurrent_assertion_item
|
: concurrent_assertion_item
|
||||||
;
|
;
|
||||||
|
|
@ -1830,17 +1838,59 @@ property_expr /* IEEE1800-2012 A.2.10 */
|
||||||
;
|
;
|
||||||
|
|
||||||
procedural_assertion_statement /* IEEE1800-2012 A.6.10 */
|
procedural_assertion_statement /* IEEE1800-2012 A.6.10 */
|
||||||
: K_assert '(' expression ')' statement %prec less_than_K_else
|
// $assertcontrol is not yet supported.
|
||||||
{ yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
|
: assert_or_assume '(' expression ')' statement_or_null %prec less_than_K_else
|
||||||
$$ = 0;
|
{
|
||||||
|
if (gn_assertions_flag) {
|
||||||
|
list<PExpr*>arg_list;
|
||||||
|
PCallTask*tmp1 = new PCallTask(lex_strings.make("$error"), arg_list);
|
||||||
|
FILE_NAME(tmp1, @1);
|
||||||
|
PCondit*tmp2 = new PCondit($3, $5, tmp1);
|
||||||
|
FILE_NAME(tmp2, @1);
|
||||||
|
$$ = tmp2;
|
||||||
|
} else {
|
||||||
|
$$ = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
| K_assert '(' expression ')' K_else statement
|
| assert_or_assume '(' expression ')' K_else statement_or_null
|
||||||
{ yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
|
{
|
||||||
$$ = 0;
|
if (gn_assertions_flag) {
|
||||||
|
PCondit*tmp = new PCondit($3, 0, $6);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
$$ = tmp;
|
||||||
|
} else {
|
||||||
|
$$ = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
| K_assert '(' expression ')' statement K_else statement
|
| assert_or_assume '(' expression ')' statement_or_null K_else statement_or_null
|
||||||
{ yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
|
{
|
||||||
$$ = 0;
|
if (gn_assertions_flag) {
|
||||||
|
PCondit*tmp = new PCondit($3, $5, $7);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
$$ = tmp;
|
||||||
|
} else {
|
||||||
|
$$ = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
| K_cover '(' expression ')' statement_or_null
|
||||||
|
// Coverage collection is not currently supported.
|
||||||
|
{ $$ = 0; }
|
||||||
|
|
||||||
|
| assert_or_assume '(' error ')' statement_or_null %prec less_than_K_else
|
||||||
|
{ yyerror(@1, "error: Malformed conditional expression.");
|
||||||
|
$$ = $5;
|
||||||
|
}
|
||||||
|
| assert_or_assume '(' error ')' K_else statement_or_null
|
||||||
|
{ yyerror(@1, "error: Malformed conditional expression.");
|
||||||
|
$$ = $6;
|
||||||
|
}
|
||||||
|
| assert_or_assume '(' error ')' statement_or_null K_else statement_or_null
|
||||||
|
{ yyerror(@1, "error: Malformed conditional expression.");
|
||||||
|
$$ = $5;
|
||||||
|
}
|
||||||
|
| K_cover '(' error ')' statement_or_null
|
||||||
|
{ yyerror(@1, "error: Malformed conditional expression.");
|
||||||
|
$$ = $5;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue