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
|
||||
iverilog - Icarus Verilog compiler
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B iverilog
|
||||
[\-ESuVv] [\-Bpath] [\-ccmdfile|\-fcmdfile] [\-Dmacro[=defn]]
|
||||
[\-EiSuVv] [\-Bpath] [\-ccmdfile|\-fcmdfile] [\-Dmacro[=defn]]
|
||||
[\-Pparameter=value] [\-pflag=value] [\-dname]
|
||||
[\-g1995\:|\-g2001\:|\-g2005\:|\-g2005-sv\:|\-g2009\:|\-g2012\:|\-g<feature>]
|
||||
[\-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.
|
||||
Very little Verilog\-AMS specific functionality is currently supported.
|
||||
.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
|
||||
Enable or disable (default) specify block support. When enabled,
|
||||
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
|
||||
in the order they appear on the command line.
|
||||
.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
|
||||
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
|
||||
|
|
@ -578,7 +590,7 @@ Tips on using, debugging, and developing the compiler can be found at
|
|||
|
||||
.SH COPYRIGHT
|
||||
.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
|
||||
GNU General Public License version 2.0
|
||||
|
|
|
|||
2
main.cc
2
main.cc
|
|
@ -1174,7 +1174,7 @@ int main(int argc, char*argv[])
|
|||
|
||||
if (roots.empty()) {
|
||||
cerr << "No top level modules, and no -s option." << endl;
|
||||
return 1;
|
||||
return ignore_missing_modules ? 0 : 1;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
62
parse.y
62
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 <real_type> non_integer_type
|
||||
%type <int_val> assert_or_assume
|
||||
%type <int_val> atom2_type
|
||||
%type <int_val> module_start module_end
|
||||
|
||||
|
|
@ -714,6 +715,13 @@ source_text
|
|||
| /* 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 */
|
||||
: concurrent_assertion_item
|
||||
;
|
||||
|
|
@ -1830,18 +1838,60 @@ property_expr /* IEEE1800-2012 A.2.10 */
|
|||
;
|
||||
|
||||
procedural_assertion_statement /* IEEE1800-2012 A.6.10 */
|
||||
: K_assert '(' expression ')' statement %prec less_than_K_else
|
||||
{ yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
|
||||
// $assertcontrol is not yet supported.
|
||||
: assert_or_assume '(' expression ')' statement_or_null %prec less_than_K_else
|
||||
{
|
||||
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
|
||||
{ yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
|
||||
}
|
||||
| assert_or_assume '(' expression ')' K_else statement_or_null
|
||||
{
|
||||
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
|
||||
{ yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
|
||||
}
|
||||
| assert_or_assume '(' expression ')' statement_or_null K_else statement_or_null
|
||||
{
|
||||
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;
|
||||
}
|
||||
;
|
||||
|
||||
/* The property_qualifier rule is as literally described in the LRM,
|
||||
|
|
|
|||
Loading…
Reference in New Issue