Parse 'sequence' declarations, property case/if, still unsupported.

This commit is contained in:
Wilson Snyder 2023-03-06 05:12:09 -05:00
parent 87c3de5aab
commit 725ec088ea
9 changed files with 531 additions and 372 deletions

View File

@ -564,7 +564,7 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5}
"ref" { FL; return yREF; } "ref" { FL; return yREF; }
"restrict" { FL; return yRESTRICT; } "restrict" { FL; return yRESTRICT; }
"return" { FL; return yRETURN; } "return" { FL; return yRETURN; }
"sequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "sequence" { FL; return ySEQUENCE; }
"shortint" { FL; return ySHORTINT; } "shortint" { FL; return ySHORTINT; }
"shortreal" { FL; return ySHORTREAL; } "shortreal" { FL; return ySHORTREAL; }
"solve" { FL; return ySOLVE; } "solve" { FL; return ySOLVE; }

View File

@ -710,7 +710,7 @@ BISONPRE_VERSION(3.7,%define api.header.include {"V3ParseBison.h"})
%token<fl> yRTRANIF0 "rtranif0" %token<fl> yRTRANIF0 "rtranif0"
%token<fl> yRTRANIF1 "rtranif1" %token<fl> yRTRANIF1 "rtranif1"
%token<fl> ySCALARED "scalared" %token<fl> ySCALARED "scalared"
//UNSUP %token<fl> ySEQUENCE "sequence" %token<fl> ySEQUENCE "sequence"
%token<fl> ySHORTINT "shortint" %token<fl> ySHORTINT "shortint"
%token<fl> ySHORTREAL "shortreal" %token<fl> ySHORTREAL "shortreal"
%token<fl> ySIGNED "signed" %token<fl> ySIGNED "signed"
@ -2509,10 +2509,11 @@ implicit_typeE<nodeDTypep>: // IEEE: part of *data_type_or_implicit
{ $$ = new AstBasicDType{$<fl>1, LOGIC_IMPLICIT, $1}; } { $$ = new AstBasicDType{$<fl>1, LOGIC_IMPLICIT, $1}; }
; ;
//UNSUPassertion_variable_declaration: // IEEE: assertion_variable_declaration assertion_variable_declaration<nodep>: // IEEE: assertion_variable_declaration
//UNSUP // // IEEE: var_data_type expanded // // IEEE: var_data_type expanded
//UNSUP var_data_type list_of_variable_decl_assignments ';' { } var_data_type { VARRESET_NONLIST(VAR); VARDTYPE_NDECL($1); }
//UNSUP ; /*cont*/ list_of_variable_decl_assignments ';' { $$ = $3; }
;
type_declaration<nodep>: // ==IEEE: type_declaration type_declaration<nodep>: // ==IEEE: type_declaration
// Data_type expanded // Data_type expanded
@ -5685,8 +5686,8 @@ cycle_delay<delayp>: // IEEE: cycle_delay
assertion_item_declaration<nodep>: // ==IEEE: assertion_item_declaration assertion_item_declaration<nodep>: // ==IEEE: assertion_item_declaration
property_declaration { $$ = $1; } property_declaration { $$ = $1; }
//UNSUP | sequence_declaration { $$ = $1; } | sequence_declaration { $$ = $1; }
//UNSUP | let_declaration { $$ = $1; } //UNSUP let_declaration { $$ = $1; }
; ;
assertion_item<nodep>: // ==IEEE: assertion_item assertion_item<nodep>: // ==IEEE: assertion_item
@ -5780,15 +5781,20 @@ concurrent_assertion_statement<nodep>: // ==IEEE: concurrent_assertion_statemen
{ $$ = new AstAssert{$1, new AstSampled{$1, $4}, nullptr, $6, false}; } { $$ = new AstAssert{$1, new AstSampled{$1, $4}, nullptr, $6, false}; }
//UNSUP yASSUME yPROPERTY '(' property_spec ')' action_block { } //UNSUP yASSUME yPROPERTY '(' property_spec ')' action_block { }
// // IEEE: cover_property_statement // // IEEE: cover_property_statement
| yCOVER yPROPERTY '(' property_spec ')' stmtBlock { $$ = new AstCover{$1, $4, $6, false}; } | yCOVER yPROPERTY '(' property_spec ')' stmtBlock
{ $$ = new AstCover{$1, $4, $6, false}; }
// // IEEE: cover_sequence_statement // // IEEE: cover_sequence_statement
//UNSUP yCOVER ySEQUENCE '(' sexpr ')' stmt { } | yCOVER ySEQUENCE '(' sexpr ')' stmt
{ $$ = nullptr; BBUNSUP($2, "Unsupported: cover sequence"); }
// // IEEE: yCOVER ySEQUENCE '(' clocking_event sexpr ')' stmt // // IEEE: yCOVER ySEQUENCE '(' clocking_event sexpr ')' stmt
// // sexpr already includes "clocking_event sexpr" // // sexpr already includes "clocking_event sexpr"
//UNSUP yCOVER ySEQUENCE '(' clocking_event yDISABLE yIFF '(' expr/*expression_or_dist*/ ')' sexpr ')' stmt { } | yCOVER ySEQUENCE '(' clocking_event yDISABLE yIFF '(' expr/*expression_or_dist*/ ')' sexpr ')' stmt
//UNSUP yCOVER ySEQUENCE '(' yDISABLE yIFF '(' expr/*expression_or_dist*/ ')' sexpr ')' stmt { } { $$ = nullptr; BBUNSUP($2, "Unsupported: cover sequence"); }
| yCOVER ySEQUENCE '(' yDISABLE yIFF '(' expr/*expression_or_dist*/ ')' sexpr ')' stmt
{ $$ = nullptr; BBUNSUP($2, "Unsupported: cover sequence"); }
// // IEEE: restrict_property_statement // // IEEE: restrict_property_statement
| yRESTRICT yPROPERTY '(' property_spec ')' ';' { $$ = new AstRestrict{$1, $4}; } | yRESTRICT yPROPERTY '(' property_spec ')' ';'
{ $$ = new AstRestrict{$1, $4}; }
; ;
elseStmtBlock<nodep>: // Part of concurrent_assertion_statement elseStmtBlock<nodep>: // Part of concurrent_assertion_statement
@ -5799,20 +5805,20 @@ elseStmtBlock<nodep>: // Part of concurrent_assertion_statement
property_declaration<nodeFTaskp>: // ==IEEE: property_declaration property_declaration<nodeFTaskp>: // ==IEEE: property_declaration
property_declarationFront property_port_listE ';' property_declarationBody property_declarationFront property_port_listE ';' property_declarationBody
yENDPROPERTY endLabelE yENDPROPERTY endLabelE
{ $$ = $1; { $$ = $1;
$$->addStmtsp($2); $$->addStmtsp($2);
$$->addStmtsp($4); $$->addStmtsp($4);
SYMP->popScope($$); SYMP->popScope($$);
GRAMMARP->endLabel($<fl>6, $$, $6); GRAMMARP->endLabel($<fl>6, $$, $6);
GRAMMARP->m_insideProperty = false; GRAMMARP->m_insideProperty = false;
GRAMMARP->m_typedPropertyPort = false; } GRAMMARP->m_typedPropertyPort = false; }
; ;
property_declarationFront<nodeFTaskp>: // IEEE: part of property_declaration property_declarationFront<nodeFTaskp>: // IEEE: part of property_declaration
yPROPERTY idAny/*property_identifier*/ yPROPERTY idAny/*property_identifier*/
{ $$ = new AstProperty{$1, *$2, nullptr}; { $$ = new AstProperty{$<fl>2, *$2, nullptr};
GRAMMARP->m_insideProperty = true; GRAMMARP->m_insideProperty = true;
SYMP->pushNewUnderNodeOrCurrent($$, nullptr); } SYMP->pushNewUnderNodeOrCurrent($$, nullptr); }
; ;
property_port_listE<nodep>: // IEEE: [ ( [ property_port_list ] ) ] property_port_listE<nodep>: // IEEE: [ ( [ property_port_list ] ) ]
@ -5848,71 +5854,83 @@ property_port_itemFront: // IEEE: part of property_port_item/sequence_port_item
property_port_itemAssignment<nodep>: // IEEE: part of property_port_item/sequence_port_item/checker_port_direction property_port_itemAssignment<nodep>: // IEEE: part of property_port_item/sequence_port_item/checker_port_direction
id variable_dimensionListE { $$ = VARDONEA($<fl>1, *$1, $2, nullptr); } id variable_dimensionListE { $$ = VARDONEA($<fl>1, *$1, $2, nullptr); }
//UNSUP | id variable_dimensionListE '=' property_actual_arg //UNSUP|id variable_dimensionListE '=' property_actual_arg
//UNSUP { VARDONE($<fl>1, $1, $2, $4); PINNUMINC(); } //UNSUP { VARDONE($<fl>1, $1, $2, $4); PINNUMINC(); }
; ;
property_port_itemDirE: property_port_itemDirE:
/* empty */ { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); } /* empty */ { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); }
//UNSUP | yLOCAL__ETC { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); } //UNSUP|yLOCAL__ETC { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); }
//UNSUP | yLOCAL__ETC yINPUT { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); } //UNSUP|yLOCAL__ETC yINPUT { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); }
; ;
property_declarationBody<nodep>: // IEEE: part of property_declaration property_declarationBody<nodep>: // IEEE: part of property_declaration
//UNSUP assertion_variable_declarationList property_statement_spec { } //UNSUP assertion_variable_declarationList property_statement_spec {}
//UNSUP // // IEEE-2012: Incorectly hasyCOVER ySEQUENCE then property_spec here. // // IEEE-2012: Incorectly hasyCOVER ySEQUENCE then property_spec here.
//UNSUP // // Fixed in IEEE 1800-2017 // // Fixed in IEEE 1800-2017
property_spec { $$ = $1; } property_spec { $$ = $1; }
| property_spec ';' { $$ = $1; } | property_spec ';' { $$ = $1; }
; ;
//UNSUPassertion_variable_declarationList<nodep>: // IEEE: part of assertion_variable_declaration assertion_variable_declarationList<nodep>: // IEEE: part of assertion_variable_declaration
//UNSUP assertion_variable_declaration { $$ = $1; } assertion_variable_declaration { $$ = $1; }
//UNSUP | assertion_variable_declarationList assertion_variable_declaration { } | assertion_variable_declarationList assertion_variable_declaration
//UNSUP ; { $$ = addNextNull($1, $2); }
;
//UNSUPsequence_declaration<nodep>: // ==IEEE: sequence_declaration sequence_declaration<nodeFTaskp>: // ==IEEE: sequence_declaration
//UNSUP sequence_declarationFront sequence_port_listE ';' sequence_declarationBody sequence_declarationFront sequence_port_listE ';' sequence_declarationBody
//UNSUP yENDSEQUENCE endLabelE /*cont*/ yENDSEQUENCE endLabelE
//UNSUP { SYMP->popScope($$); } { $$ = $1;
//UNSUP ; $$->addStmtsp($2);
$$->addStmtsp($4);
SYMP->popScope($$);
GRAMMARP->endLabel($<fl>6, $$, $6); }
;
//UNSUPsequence_declarationFront<nodep>: // IEEE: part of sequence_declaration sequence_declarationFront<nodeFTaskp>: // IEEE: part of sequence_declaration
//UNSUP ySEQUENCE idAny/*new_sequence*/ ySEQUENCE idAny/*new_sequence*/
//UNSUP { SYMP->pushNew($$); } { BBUNSUP($1, "Unsupported: sequence");
//UNSUP ; $$ = new AstProperty{$<fl>2, *$2, nullptr};
SYMP->pushNewUnderNodeOrCurrent($$, nullptr); }
;
//UNSUPsequence_port_listE<nodep>: // IEEE: [ ( [ sequence_port_list ] ) ] sequence_port_listE<nodep>: // IEEE: [ ( [ sequence_port_list ] ) ]
//UNSUP // // IEEE: sequence_lvar_port_direction ::= yINPUT | yINOUT | yOUTPUT // // IEEE: sequence_lvar_port_direction ::= yINPUT | yINOUT | yOUTPUT
//UNSUP // // IEEE: [ yLOCAL [ sequence_lvar_port_direction ] ] sequence_formal_type // // IEEE: [ yLOCAL [ sequence_lvar_port_direction ] ] sequence_formal_type
//UNSUP // // id {variable_dimension} [ '=' sequence_actual_arg ] // // id {variable_dimension} [ '=' sequence_actual_arg ]
//UNSUP // // All this is almost identically the same as a property. // // All this is almost identically the same as a property.
//UNSUP // // Difference is only yINOUT/yOUTPUT (which might be added to 1800-2012) // // Difference is only yINOUT/yOUTPUT (which might be added to 1800-2012)
//UNSUP // // and yPROPERTY. So save some work. // // and yPROPERTY. So save some work.
//UNSUP property_port_listE { $$ = $1; } property_port_listE { $$ = $1; }
//UNSUP ; ;
property_formal_typeNoDt<nodeDTypep>: // IEEE: property_formal_type (w/o implicit) property_formal_typeNoDt<nodeDTypep>: // IEEE: property_formal_type (w/o implicit)
sequence_formal_typeNoDt { $$ = $1; } sequence_formal_typeNoDt { $$ = $1; }
//UNSUP | yPROPERTY { } | yPROPERTY
{ $$ = nullptr; GRAMMARP->m_typedPropertyPort = false;
BBUNSUP($1, "Unsupported: property argument data type"); }
; ;
sequence_formal_typeNoDt<nodeDTypep>: // ==IEEE: sequence_formal_type (w/o data_type_or_implicit) sequence_formal_typeNoDt<nodeDTypep>: // ==IEEE: sequence_formal_type (w/o data_type_or_implicit)
// // IEEE: data_type_or_implicit // IEEE: data_type_or_implicit
// // implicit expanded where used // implicit expanded where used
//UNSUP ySEQUENCE { } ySEQUENCE
// // IEEE-2009: yEVENT { $$ = nullptr; GRAMMARP->m_typedPropertyPort = false;
// // already part of data_type. Removed in 1800-2012. BBUNSUP($1, "Unsupported: sequence argument data type"); }
yUNTYPED { $$ = nullptr; GRAMMARP->m_typedPropertyPort = false; } // IEEE-2009: yEVENT
// already part of data_type. Removed in 1800-2012.
| yUNTYPED
{ $$ = nullptr; GRAMMARP->m_typedPropertyPort = false; }
; ;
//UNSUPsequence_declarationBody<nodep>: // IEEE: part of sequence_declaration sequence_declarationBody<nodep>: // IEEE: part of sequence_declaration
//UNSUP // // 1800-2012 makes ';' optional // // 1800-2012 makes ';' optional
//UNSUP assertion_variable_declarationList sexpr { } assertion_variable_declarationList sexpr { $$ = addNextNull($1, $2); }
//UNSUP | assertion_variable_declarationList sexpr ';' { } | assertion_variable_declarationList sexpr ';' { $$ = addNextNull($1, $2); }
//UNSUP | sexpr { $$ = $1; } | sexpr { $$ = $1; }
//UNSUP | sexpr ';' { $$ = $1; } | sexpr ';' { $$ = $1; }
//UNSUP ; ;
property_spec<propSpecp>: // IEEE: property_spec property_spec<propSpecp>: // IEEE: property_spec
//UNSUP: This rule has been super-specialized to what is supported now //UNSUP: This rule has been super-specialized to what is supported now
@ -5945,27 +5963,33 @@ property_spec<propSpecp>: // IEEE: property_spec
//UNSUP | property_statementCaseIf { $$ = $1; } //UNSUP | property_statementCaseIf { $$ = $1; }
//UNSUP ; //UNSUP ;
//UNSUPproperty_statementCaseIf<nodep>: // IEEE: property_statement - minus pexpr property_statementCaseIf<nodeExprp>: // IEEE: property_statement - minus pexpr
//UNSUP yCASE '(' expr/*expression_or_dist*/ ')' property_case_itemList yENDCASE { } yCASE '(' expr/*expression_or_dist*/ ')' property_case_itemList yENDCASE
//UNSUP | yCASE '(' expr/*expression_or_dist*/ ')' yENDCASE { } { $$ = new AstConst{$1, AstConst::BitFalse{}};
//UNSUP | yIF '(' expr/*expression_or_dist*/ ')' pexpr %prec prLOWER_THAN_ELSE { } BBUNSUP($<fl>1, "Unsupported: property case expression"); }
//UNSUP | yIF '(' expr/*expression_or_dist*/ ')' pexpr yELSE pexpr { } | yCASE '(' expr/*expression_or_dist*/ ')' yENDCASE
//UNSUP ; { $$ = new AstConst{$1, AstConst::BitFalse{}};
BBUNSUP($<fl>1, "Unsupported: property case expression"); }
| yIF '(' expr/*expression_or_dist*/ ')' pexpr %prec prLOWER_THAN_ELSE
{ $$ = $5; BBUNSUP($<fl>1, "Unsupported: property case expression"); }
| yIF '(' expr/*expression_or_dist*/ ')' pexpr yELSE pexpr
{ $$ = $5; BBUNSUP($<fl>1, "Unsupported: property case expression"); }
;
//UNSUPproperty_case_itemList<nodep>: // IEEE: {property_case_item} property_case_itemList<caseItemp>: // IEEE: {property_case_item}
//UNSUP property_case_item { $$ = $1; } property_case_item { $$ = $1; }
//UNSUP | property_case_itemList ',' property_case_item { $$ = addNextNull($1, $3); } | property_case_itemList ',' property_case_item { $$ = addNextNull($1, $3); }
//UNSUP ; ;
//UNSUPproperty_case_item<nodep>: // ==IEEE: property_case_item property_case_item<caseItemp>: // ==IEEE: property_case_item
//UNSUP // // IEEE: expression_or_dist { ',' expression_or_dist } ':' property_statement // // IEEE: expression_or_dist { ',' expression_or_dist } ':' property_statement
//UNSUP // // IEEE 1800-2012 changed from property_statement to property_expr // // IEEE 1800-2012 changed from property_statement to property_expr
//UNSUP // // IEEE 1800-2017 changed to require the semicolon // // IEEE 1800-2017 changed to require the semicolon
//UNSUP caseCondList ':' pexpr { } caseCondList ':' pexpr { $$ = new AstCaseItem{$2, $1, $3}; }
//UNSUP | caseCondList ':' pexpr ';' { } | caseCondList ':' pexpr ';' { $$ = new AstCaseItem{$2, $1, $3}; }
//UNSUP | yDEFAULT pexpr { } | yDEFAULT pexpr { $$ = new AstCaseItem{$1, nullptr, $2}; }
//UNSUP | yDEFAULT ':' pexpr ';' { } | yDEFAULT ':' pexpr ';' { $$ = new AstCaseItem{$1, nullptr, $3}; }
//UNSUP ; ;
//UNSUPpev_expr<nodep>: // IEEE: property_actual_arg | expr //UNSUPpev_expr<nodep>: // IEEE: property_actual_arg | expr
//UNSUP // // which expands to pexpr | event_expression //UNSUP // // which expands to pexpr | event_expression
@ -6017,7 +6041,7 @@ pexpr<nodeExprp>: // IEEE: property_expr (The name pexpr is important as regex
// //
// // IEEE-2009: property_statement // // IEEE-2009: property_statement
// // IEEE-2012: yIF and yCASE // // IEEE-2012: yIF and yCASE
//UNSUP property_statementCaseIf { } | property_statementCaseIf { $$ = $1; }
// //
| ~o~pexpr/*sexpr*/ yP_POUNDMINUSPD pexpr | ~o~pexpr/*sexpr*/ yP_POUNDMINUSPD pexpr
{ $$ = $3; BBUNSUP($2, "Unsupported: #-# (in property expression)"); } { $$ = $3; BBUNSUP($2, "Unsupported: #-# (in property expression)"); }
@ -6182,9 +6206,9 @@ cycle_delay_range<nodep>: // IEEE: ==cycle_delay_range
boolean_abbrev<nodeExprp>: // ==IEEE: boolean_abbrev boolean_abbrev<nodeExprp>: // ==IEEE: boolean_abbrev
// // IEEE: consecutive_repetition // // IEEE: consecutive_repetition
yP_BRASTAR constExpr ']' { } yP_BRASTAR constExpr ']'
{ $$ = $2; BBUNSUP($<fl>1, "Unsupported: [*] boolean abbrev expression"); } { $$ = $2; BBUNSUP($<fl>1, "Unsupported: [*] boolean abbrev expression"); }
| yP_BRASTAR constExpr ':' constExpr ']' { } | yP_BRASTAR constExpr ':' constExpr ']'
{ $$ = $2; BBUNSUP($<fl>1, "Unsupported: [*] boolean abbrev expression"); } { $$ = $2; BBUNSUP($<fl>1, "Unsupported: [*] boolean abbrev expression"); }
| yP_BRASTAR ']' | yP_BRASTAR ']'
{ $$ = new AstConst{$1, AstConst::BitFalse{}}; { $$ = new AstConst{$1, AstConst::BitFalse{}};

View File

@ -1,95 +1,113 @@
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:24:13: Unsupported: strong (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:25:13: Unsupported: strong (in property expression)
24 | strong(a); 25 | strong(a);
| ^ | ^
... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest ... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:28:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:29:11: Unsupported: weak (in property expression)
28 | weak(a); 29 | weak(a);
| ^ | ^
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:32:9: Unsupported: until (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:33:9: Unsupported: until (in property expression)
32 | a until b; 33 | a until b;
| ^~~~~ | ^~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:36:9: Unsupported: s_until (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:37:9: Unsupported: s_until (in property expression)
36 | a s_until b; 37 | a s_until b;
| ^~~~~~~ | ^~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:40:9: Unsupported: until_with (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:41:9: Unsupported: until_with (in property expression)
40 | a until_with b; 41 | a until_with b;
| ^~~~~~~~~~ | ^~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:44:9: Unsupported: s_until_with (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:45:9: Unsupported: s_until_with (in property expression)
44 | a s_until_with b; 45 | a s_until_with b;
| ^~~~~~~~~~~~ | ^~~~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:48:9: Unsupported: implies (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:49:9: Unsupported: implies (in property expression)
48 | a implies b; 49 | a implies b;
| ^~~~~~~ | ^~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:52:9: Unsupported: #-# (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:53:9: Unsupported: #-# (in property expression)
52 | a #-# b; 53 | a #-# b;
| ^~~ | ^~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:56:9: Unsupported: #=# (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:57:9: Unsupported: #=# (in property expression)
56 | a #=# b; 57 | a #=# b;
| ^~~ | ^~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:60:7: Unsupported: nexttime (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:61:7: Unsupported: nexttime (in property expression)
60 | nexttime a; 61 | nexttime a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:64:7: Unsupported: nexttime[] (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:65:7: Unsupported: nexttime[] (in property expression)
64 | nexttime [2] a; 65 | nexttime [2] a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:68:7: Unsupported: s_nexttime (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:69:7: Unsupported: s_nexttime (in property expression)
68 | s_nexttime a; 69 | s_nexttime a;
| ^~~~~~~~~~ | ^~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:72:7: Unsupported: s_nexttime[] (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:73:7: Unsupported: s_nexttime[] (in property expression)
72 | s_nexttime [2] a; 73 | s_nexttime [2] a;
| ^~~~~~~~~~ | ^~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:76:16: Unsupported: always (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:77:16: Unsupported: always (in property expression)
76 | nexttime always a; 77 | nexttime always a;
| ^~~~~~ | ^~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:76:7: Unsupported: nexttime (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:77:7: Unsupported: nexttime (in property expression)
76 | nexttime always a; 77 | nexttime always a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:80:20: Unsupported: always (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:81:20: Unsupported: always (in property expression)
80 | nexttime [2] always a; 81 | nexttime [2] always a;
| ^~~~~~ | ^~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:80:7: Unsupported: nexttime[] (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:81:7: Unsupported: nexttime[] (in property expression)
80 | nexttime [2] always a; 81 | nexttime [2] always a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:84:16: Unsupported: eventually (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:85:16: Unsupported: eventually (in property expression)
84 | nexttime eventually a; 85 | nexttime eventually a;
| ^~~~~~~~~~ | ^~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:84:7: Unsupported: nexttime (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:85:7: Unsupported: nexttime (in property expression)
84 | nexttime eventually a; 85 | nexttime eventually a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:88:20: Unsupported: always (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:89:20: Unsupported: always (in property expression)
88 | nexttime [2] always a; 89 | nexttime [2] always a;
| ^~~~~~ | ^~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:88:7: Unsupported: nexttime[] (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:89:7: Unsupported: nexttime[] (in property expression)
88 | nexttime [2] always a; 89 | nexttime [2] always a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:92:16: Unsupported: s_eventually (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:93:16: Unsupported: s_eventually (in property expression)
92 | nexttime s_eventually a; 93 | nexttime s_eventually a;
| ^~~~~~~~~~~~ | ^~~~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:92:7: Unsupported: nexttime (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:93:7: Unsupported: nexttime (in property expression)
92 | nexttime s_eventually a; 93 | nexttime s_eventually a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:96:35: Unsupported: always (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:97:35: Unsupported: always (in property expression)
96 | nexttime s_eventually [2:$] always a; 97 | nexttime s_eventually [2:$] always a;
| ^~~~~~ | ^~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:96:16: Unsupported: s_eventually[] (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:97:16: Unsupported: s_eventually[] (in property expression)
96 | nexttime s_eventually [2:$] always a; 97 | nexttime s_eventually [2:$] always a;
| ^~~~~~~~~~~~ | ^~~~~~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:96:7: Unsupported: nexttime (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:97:7: Unsupported: nexttime (in property expression)
96 | nexttime s_eventually [2:$] always a; 97 | nexttime s_eventually [2:$] always a;
| ^~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:100:17: Unsupported: accept_on (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:101:17: Unsupported: accept_on (in property expression)
100 | accept_on (a) b; 101 | accept_on (a) b;
| ^ | ^
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:104:22: Unsupported: sync_accept_on (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:105:22: Unsupported: sync_accept_on (in property expression)
104 | sync_accept_on (a) b; 105 | sync_accept_on (a) b;
| ^ | ^
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:108:17: Unsupported: reject_on (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:109:17: Unsupported: reject_on (in property expression)
108 | reject_on (a) b; 109 | reject_on (a) b;
| ^ | ^
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:112:22: Unsupported: sync_reject_on (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:113:22: Unsupported: sync_reject_on (in property expression)
112 | sync_reject_on (a) b; 113 | sync_reject_on (a) b;
| ^ | ^
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:116:9: Unsupported: iff (in property expression) %Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:117:9: Unsupported: iff (in property expression)
116 | a iff b; 117 | a iff b;
| ^~~ | ^~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:120:27: Unsupported: property argument data type
120 | property p_arg_propery(property inprop);
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:123:27: Unsupported: sequence argument data type
123 | property p_arg_seqence(sequence inseq);
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:128:7: Unsupported: property case expression
128 | case (a) endcase
| ^~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:131:7: Unsupported: property case expression
131 | case (a) default: b; endcase
| ^~~~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:134:7: Unsupported: property case expression
134 | if (a) b
| ^~
%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:137:7: Unsupported: property case expression
137 | if (a) b else c
| ^~
%Error: Exiting due to %Error: Exiting due to

View File

@ -12,7 +12,7 @@ scenarios(vlt => 1);
compile( compile(
expect_filename => $Self->{golden_filename}, expect_filename => $Self->{golden_filename},
verilator_flags2 => ['--assert'], verilator_flags2 => ['--assert --error-limit 1000'],
fails => 1, fails => 1,
); );

View File

@ -6,12 +6,13 @@
module t (/*AUTOARG*/ module t (/*AUTOARG*/
// Inputs // Inputs
clk, a, b clk
); );
input clk; input clk;
int a; int a;
int b; int b;
int c;
int cyc = 0; int cyc = 0;
always @(posedge clk) begin always @(posedge clk) begin
@ -116,6 +117,26 @@ module t (/*AUTOARG*/
a iff b; a iff b;
endproperty endproperty
property p_arg_propery(property inprop);
inprop;
endproperty
property p_arg_seqence(sequence inseq);
inseq;
endproperty
property p_case_1;
case (a) endcase
endproperty
property p_case_2;
case (a) default: b; endcase
endproperty
property p_if;
if (a) b
endproperty
property p_ifelse;
if (a) b else c
endproperty
always @(posedge clk) begin always @(posedge clk) begin
if (cyc == 10) begin if (cyc == 10) begin
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");

View File

@ -1,6 +1,6 @@
%Error-UNSUPPORTED: t/t_assert_recursive_property_unsup.v:20:4: Unsupported: Recursive property call: 'check' %Error-UNSUPPORTED: t/t_assert_recursive_property_unsup.v:20:13: Unsupported: Recursive property call: 'check'
: ... In instance t : ... In instance t
20 | property check(int n); 20 | property check(int n);
| ^~~~~~~~ | ^~~~~
... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest ... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest
%Error: Exiting due to %Error: Exiting due to

View File

@ -1,144 +1,224 @@
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:27:14: Unsupported: within (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:26:4: Unsupported: sequence
27 | weak(a within(b)); 26 | sequence s_a;
| ^~~~~~ | ^~~~~~~~
... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest ... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:27:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:29:4: Unsupported: sequence
27 | weak(a within(b)); 29 | sequence s_var;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:31:14: Unsupported: and (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:34:4: Unsupported: sequence
31 | weak(a and b); 34 | sequence s_within;
| ^~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:31:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:35:9: Unsupported: within (in sequence expression)
31 | weak(a and b); 35 | a within(b);
| ^ | ^~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:35:14: Unsupported: or (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:38:4: Unsupported: sequence
35 | weak(a or b); 38 | sequence s_and;
| ^~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:35:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:39:9: Unsupported: and (in sequence expression)
35 | weak(a or b); 39 | a and b;
| ^ | ^~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:39:14: Unsupported: throughout (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:42:4: Unsupported: sequence
39 | weak(a throughout b); 42 | sequence s_or;
| ^~~~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:39:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:43:9: Unsupported: or (in sequence expression)
39 | weak(a throughout b); 43 | a or b;
| ^ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:43:14: Unsupported: intersect (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:46:4: Unsupported: sequence
43 | weak(a intersect b); 46 | sequence s_throughout;
| ^~~~~~~~~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:43:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:9: Unsupported: throughout (in sequence expression)
43 | weak(a intersect b); 47 | a throughout b;
| ^ | ^~~~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:12: Unsupported: ## () cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:4: Unsupported: sequence
47 | weak(## 1 b); 50 | sequence s_intersect;
| ^~ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:17: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:51:9: Unsupported: intersect (in sequence expression)
47 | weak(## 1 b); 51 | a intersect b;
| ^ | ^~~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:54:4: Unsupported: sequence
47 | weak(## 1 b); 54 | sequence s_uni_cycdelay_int;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:12: Unsupported: ## id cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:55:7: Unsupported: ## () cycle delay range expression
50 | weak(## DELAY b); 55 | ## 1 b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:21: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:55:12: Unsupported: ## (in sequence expression)
50 | weak(## DELAY b); 55 | ## 1 b;
| ^ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:57:4: Unsupported: sequence
50 | weak(## DELAY b); 57 | sequence s_uni_cycdelay_id;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:53:12: Unsupported: ## () cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:58:7: Unsupported: ## id cycle delay range expression
53 | weak(## ( DELAY ) b); 58 | ## DELAY b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:53:25: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:58:16: Unsupported: ## (in sequence expression)
53 | weak(## ( DELAY ) b); 58 | ## DELAY b;
| ^ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:53:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:60:4: Unsupported: sequence
53 | weak(## ( DELAY ) b); 60 | sequence s_uni_cycdelay_pid;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:56:12: Unsupported: ## range cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:61:7: Unsupported: ## () cycle delay range expression
56 | weak(## [1:2] b); 61 | ## ( DELAY ) b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:56:21: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:61:20: Unsupported: ## (in sequence expression)
56 | weak(## [1:2] b); 61 | ## ( DELAY ) b;
| ^ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:56:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:63:4: Unsupported: sequence
56 | weak(## [1:2] b); 63 | sequence s_uni_cycdelay_range;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:59:12: Unsupported: ## [*] cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:64:7: Unsupported: ## range cycle delay range expression
59 | weak(## [*] b); 64 | ## [1:2] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:59:19: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:64:16: Unsupported: ## (in sequence expression)
59 | weak(## [*] b); 64 | ## [1:2] b;
| ^ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:59:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:4: Unsupported: sequence
59 | weak(## [*] b); 66 | sequence s_uni_cycdelay_star;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:62:12: Unsupported: ## [+] cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:67:7: Unsupported: ## [*] cycle delay range expression
62 | weak(## [+] b); 67 | ## [*] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:62:19: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:67:14: Unsupported: ## (in sequence expression)
62 | weak(## [+] b); 67 | ## [*] b;
| ^ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:62:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:4: Unsupported: sequence
62 | weak(## [+] b); 69 | sequence s_uni_cycdelay_plus;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:14: Unsupported: ## () cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:70:7: Unsupported: ## [+] cycle delay range expression
66 | weak(a ## 1 b); 70 | ## [+] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:17: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:70:14: Unsupported: ## (in sequence expression)
66 | weak(a ## 1 b); 70 | ## [+] b;
| ^ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:73:4: Unsupported: sequence
66 | weak(a ## 1 b); 73 | sequence s_cycdelay_int;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:14: Unsupported: ## id cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:74:9: Unsupported: ## () cycle delay range expression
69 | weak(a ## DELAY b); 74 | a ## 1 b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:14: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:74:12: Unsupported: ## (in sequence expression)
69 | weak(a ## DELAY b); 74 | a ## 1 b;
| ^~ | ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:76:4: Unsupported: sequence
69 | weak(a ## DELAY b); 76 | sequence s_cycdelay_id;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:72:14: Unsupported: ## () cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:77:9: Unsupported: ## id cycle delay range expression
72 | weak(a ## ( DELAY ) b); 77 | a ## DELAY b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:72:19: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:77:9: Unsupported: ## (in sequence expression)
72 | weak(a ## ( DELAY ) b); 77 | a ## DELAY b;
| ^~~~~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:72:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:79:4: Unsupported: sequence
72 | weak(a ## ( DELAY ) b); 79 | sequence s_cycdelay_pid;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:75:14: Unsupported: ## range cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:80:9: Unsupported: ## () cycle delay range expression
75 | weak(a ## [1:2] b); 80 | a ## ( DELAY ) b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:75:14: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:80:14: Unsupported: ## (in sequence expression)
75 | weak(a ## [1:2] b); 80 | a ## ( DELAY ) b;
| ^~ | ^~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:75:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:82:4: Unsupported: sequence
75 | weak(a ## [1:2] b); 82 | sequence s_cycdelay_range;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:78:14: Unsupported: ## [*] cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:83:9: Unsupported: ## range cycle delay range expression
78 | weak(a ## [*] b); 83 | a ## [1:2] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:78:14: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:83:9: Unsupported: ## (in sequence expression)
78 | weak(a ## [*] b); 83 | a ## [1:2] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:78:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:85:4: Unsupported: sequence
78 | weak(a ## [*] b); 85 | sequence s_cycdelay_star;
| ^ | ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:81:14: Unsupported: ## [+] cycle delay range expression %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:86:9: Unsupported: ## [*] cycle delay range expression
81 | weak(a ## [+] b); 86 | a ## [*] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:81:14: Unsupported: ## (in sequence expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:86:9: Unsupported: ## (in sequence expression)
81 | weak(a ## [+] b); 86 | a ## [*] b;
| ^~ | ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:81:11: Unsupported: weak (in property expression) %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:88:4: Unsupported: sequence
81 | weak(a ## [+] b); 88 | sequence s_cycdelay_plus;
| ^ | ^~~~~~~~
%Error: t/t_sequence_sexpr_unsup.v:85:12: syntax error, unexpected [*, expecting TYPE-IDENTIFIER %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:89:9: Unsupported: ## [+] cycle delay range expression
85 | weak([* 1 ] a); 89 | a ## [+] b;
| ^~ | ^~
%Error: Cannot continue %Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:89:9: Unsupported: ## (in sequence expression)
... See the manual at https://verilator.org/verilator_doc.html for more assistance. 89 | a ## [+] b;
| ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:92:4: Unsupported: sequence
92 | sequence s_booleanabbrev_brastar_int;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:93:9: Unsupported: [*] boolean abbrev expression
93 | a [* 1 ];
| ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:93:12: Unsupported: boolean abbrev (in sequence expression)
93 | a [* 1 ];
| ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:95:4: Unsupported: sequence
95 | sequence s_booleanabbrev_brastar;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:96:9: Unsupported: [*] boolean abbrev expression
96 | a [*];
| ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:96:9: Unsupported: boolean abbrev (in sequence expression)
96 | a [*];
| ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:98:4: Unsupported: sequence
98 | sequence s_booleanabbrev_plus;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:99:9: Unsupported: [+] boolean abbrev expression
99 | a [+];
| ^~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:99:9: Unsupported: boolean abbrev (in sequence expression)
99 | a [+];
| ^~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:101:4: Unsupported: sequence
101 | sequence s_booleanabbrev_eq;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:102:9: Unsupported: [= boolean abbrev expression
102 | a [= 1];
| ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:102:12: Unsupported: boolean abbrev (in sequence expression)
102 | a [= 1];
| ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:104:4: Unsupported: sequence
104 | sequence s_booleanabbrev_eq_range;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:105:9: Unsupported: [= boolean abbrev expression
105 | a [= 1:2];
| ^~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:105:12: Unsupported: boolean abbrev (in sequence expression)
105 | a [= 1:2];
| ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:107:4: Unsupported: sequence
107 | sequence s_booleanabbrev_minusgt;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:108:9: Unsupported: [-> boolean abbrev expression
108 | a [-> 1];
| ^~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:108:13: Unsupported: boolean abbrev (in sequence expression)
108 | a [-> 1];
| ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:110:4: Unsupported: sequence
110 | sequence s_booleanabbrev_minusgt_range;
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:111:9: Unsupported: [-> boolean abbrev expression
111 | a [-> 1:2];
| ^~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:111:13: Unsupported: boolean abbrev (in sequence expression)
111 | a [-> 1:2];
| ^
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:114:4: Unsupported: sequence
114 | sequence p_arg_seqence(sequence inseq);
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:114:27: Unsupported: sequence argument data type
114 | sequence p_arg_seqence(sequence inseq);
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:118:10: Unsupported: cover sequence
118 | cover sequence (s_a) $display("");
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:119:10: Unsupported: cover sequence
119 | cover sequence (@(posedge a) disable iff (b) s_a) $display("");
| ^~~~~~~~
%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:120:10: Unsupported: cover sequence
120 | cover sequence (disable iff (b) s_a) $display("");
| ^~~~~~~~
%Error: Exiting due to

View File

@ -12,7 +12,7 @@ scenarios(vlt => 1);
compile( compile(
expect_filename => $Self->{golden_filename}, expect_filename => $Self->{golden_filename},
verilator_flags2 => ['--assert'], verilator_flags2 => ['--assert --error-limit 1000'],
fails => 1, fails => 1,
); );

View File

@ -6,7 +6,7 @@
module t (/*AUTOARG*/ module t (/*AUTOARG*/
// Inputs // Inputs
clk, a, b clk
); );
input clk; input clk;
@ -23,85 +23,101 @@ module t (/*AUTOARG*/
// NOTE this grammar hasn't been checked with other simulators, // NOTE this grammar hasn't been checked with other simulators,
// is here just to avoid uncovered code lines in the grammar. // is here just to avoid uncovered code lines in the grammar.
// NOTE using 'property weak' here as sequence/endsequence not supported // NOTE using 'property weak' here as sequence/endsequence not supported
property s_within; sequence s_a;
weak(a within(b)); a;
endproperty endsequence : s_a
sequence s_var;
logic l1, l2;
a;
endsequence
property s_and; sequence s_within;
weak(a and b); a within(b);
endproperty endsequence
property s_or; sequence s_and;
weak(a or b); a and b;
endproperty endsequence
property s_throughout; sequence s_or;
weak(a throughout b); a or b;
endproperty endsequence
property s_intersect; sequence s_throughout;
weak(a intersect b); a throughout b;
endproperty endsequence
property s_uni_cycdelay_int; sequence s_intersect;
weak(## 1 b); a intersect b;
endproperty endsequence
property s_uni_cycdelay_id;
weak(## DELAY b);
endproperty
property s_uni_cycdelay_pid;
weak(## ( DELAY ) b);
endproperty
property s_uni_cycdelay_range;
weak(## [1:2] b);
endproperty
property s_uni_cycdelay_star;
weak(## [*] b);
endproperty
property s_uni_cycdelay_plus;
weak(## [+] b);
endproperty
property s_cycdelay_int; sequence s_uni_cycdelay_int;
weak(a ## 1 b); ## 1 b;
endproperty endsequence
property s_cycdelay_id; sequence s_uni_cycdelay_id;
weak(a ## DELAY b); ## DELAY b;
endproperty endsequence
property s_cycdelay_pid; sequence s_uni_cycdelay_pid;
weak(a ## ( DELAY ) b); ## ( DELAY ) b;
endproperty endsequence
property s_cycdelay_range; sequence s_uni_cycdelay_range;
weak(a ## [1:2] b); ## [1:2] b;
endproperty endsequence
property s_cycdelay_star; sequence s_uni_cycdelay_star;
weak(a ## [*] b); ## [*] b;
endproperty endsequence
property s_cycdelay_plus; sequence s_uni_cycdelay_plus;
weak(a ## [+] b); ## [+] b;
endproperty endsequence
property s_booleanabbrev_brastar_int; sequence s_cycdelay_int;
weak([* 1 ] a); a ## 1 b;
endproperty endsequence
property s_booleanabbrev_brastar; sequence s_cycdelay_id;
weak([*] a); a ## DELAY b;
endproperty endsequence
property s_booleanabbrev_plus; sequence s_cycdelay_pid;
weak([+] a); a ## ( DELAY ) b;
endproperty endsequence
property s_booleanabbrev_eq; sequence s_cycdelay_range;
weak([= 1] a); a ## [1:2] b;
endproperty endsequence
property s_booleanabbrev_eq_range; sequence s_cycdelay_star;
weak([= 1:2] a); a ## [*] b;
endproperty endsequence
property s_booleanabbrev_minusgt; sequence s_cycdelay_plus;
weak([-> 1] a); a ## [+] b;
endproperty endsequence
property s_booleanabbrev_minusgt_range;
weak([-> 1:2] a); sequence s_booleanabbrev_brastar_int;
endproperty a [* 1 ];
endsequence
sequence s_booleanabbrev_brastar;
a [*];
endsequence
sequence s_booleanabbrev_plus;
a [+];
endsequence
sequence s_booleanabbrev_eq;
a [= 1];
endsequence
sequence s_booleanabbrev_eq_range;
a [= 1:2];
endsequence
sequence s_booleanabbrev_minusgt;
a [-> 1];
endsequence
sequence s_booleanabbrev_minusgt_range;
a [-> 1:2];
endsequence
sequence p_arg_seqence(sequence inseq);
inseq;
endsequence
cover sequence (s_a) $display("");
cover sequence (@(posedge a) disable iff (b) s_a) $display("");
cover sequence (disable iff (b) s_a) $display("");
always @(posedge clk) begin always @(posedge clk) begin
if (cyc == 10) begin if (cyc == 10) begin