From 725ec088ea773da415d46ddc7b2c0f156460874b Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Mon, 6 Mar 2023 05:12:09 -0500 Subject: [PATCH] Parse 'sequence' declarations, property case/if, still unsupported. --- src/verilog.l | 2 +- src/verilog.y | 198 +++++----- .../t/t_assert_property_pexpr_unsup.out | 142 ++++--- .../t/t_assert_property_pexpr_unsup.pl | 2 +- .../t/t_assert_property_pexpr_unsup.v | 23 +- .../t/t_assert_recursive_property_unsup.out | 6 +- test_regress/t/t_sequence_sexpr_unsup.out | 366 +++++++++++------- test_regress/t/t_sequence_sexpr_unsup.pl | 2 +- test_regress/t/t_sequence_sexpr_unsup.v | 162 ++++---- 9 files changed, 531 insertions(+), 372 deletions(-) diff --git a/src/verilog.l b/src/verilog.l index 26bd7fd10..ced9de537 100644 --- a/src/verilog.l +++ b/src/verilog.l @@ -564,7 +564,7 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "ref" { FL; return yREF; } "restrict" { FL; return yRESTRICT; } "return" { FL; return yRETURN; } - "sequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "sequence" { FL; return ySEQUENCE; } "shortint" { FL; return ySHORTINT; } "shortreal" { FL; return ySHORTREAL; } "solve" { FL; return ySOLVE; } diff --git a/src/verilog.y b/src/verilog.y index 20d67cc2c..ee8384990 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -710,7 +710,7 @@ BISONPRE_VERSION(3.7,%define api.header.include {"V3ParseBison.h"}) %token yRTRANIF0 "rtranif0" %token yRTRANIF1 "rtranif1" %token ySCALARED "scalared" -//UNSUP %token ySEQUENCE "sequence" +%token ySEQUENCE "sequence" %token ySHORTINT "shortint" %token ySHORTREAL "shortreal" %token ySIGNED "signed" @@ -2509,10 +2509,11 @@ implicit_typeE: // IEEE: part of *data_type_or_implicit { $$ = new AstBasicDType{$1, LOGIC_IMPLICIT, $1}; } ; -//UNSUPassertion_variable_declaration: // IEEE: assertion_variable_declaration -//UNSUP // // IEEE: var_data_type expanded -//UNSUP var_data_type list_of_variable_decl_assignments ';' { } -//UNSUP ; +assertion_variable_declaration: // IEEE: assertion_variable_declaration + // // IEEE: var_data_type expanded + var_data_type { VARRESET_NONLIST(VAR); VARDTYPE_NDECL($1); } + /*cont*/ list_of_variable_decl_assignments ';' { $$ = $3; } + ; type_declaration: // ==IEEE: type_declaration // Data_type expanded @@ -5685,8 +5686,8 @@ cycle_delay: // IEEE: cycle_delay assertion_item_declaration: // ==IEEE: assertion_item_declaration property_declaration { $$ = $1; } -//UNSUP | sequence_declaration { $$ = $1; } -//UNSUP | let_declaration { $$ = $1; } + | sequence_declaration { $$ = $1; } + //UNSUP let_declaration { $$ = $1; } ; assertion_item: // ==IEEE: assertion_item @@ -5780,15 +5781,20 @@ concurrent_assertion_statement: // ==IEEE: concurrent_assertion_statemen { $$ = new AstAssert{$1, new AstSampled{$1, $4}, nullptr, $6, false}; } //UNSUP yASSUME yPROPERTY '(' property_spec ')' action_block { } // // 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 - //UNSUP yCOVER ySEQUENCE '(' sexpr ')' stmt { } + | yCOVER ySEQUENCE '(' sexpr ')' stmt + { $$ = nullptr; BBUNSUP($2, "Unsupported: cover sequence"); } // // IEEE: yCOVER ySEQUENCE '(' clocking_event sexpr ')' stmt // // sexpr already includes "clocking_event sexpr" - //UNSUP yCOVER ySEQUENCE '(' clocking_event yDISABLE yIFF '(' expr/*expression_or_dist*/ ')' sexpr ')' stmt { } - //UNSUP yCOVER ySEQUENCE '(' yDISABLE yIFF '(' expr/*expression_or_dist*/ ')' sexpr ')' stmt { } + | yCOVER ySEQUENCE '(' clocking_event 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 - | yRESTRICT yPROPERTY '(' property_spec ')' ';' { $$ = new AstRestrict{$1, $4}; } + | yRESTRICT yPROPERTY '(' property_spec ')' ';' + { $$ = new AstRestrict{$1, $4}; } ; elseStmtBlock: // Part of concurrent_assertion_statement @@ -5799,20 +5805,20 @@ elseStmtBlock: // Part of concurrent_assertion_statement property_declaration: // ==IEEE: property_declaration property_declarationFront property_port_listE ';' property_declarationBody yENDPROPERTY endLabelE - { $$ = $1; - $$->addStmtsp($2); - $$->addStmtsp($4); - SYMP->popScope($$); - GRAMMARP->endLabel($6, $$, $6); - GRAMMARP->m_insideProperty = false; - GRAMMARP->m_typedPropertyPort = false; } + { $$ = $1; + $$->addStmtsp($2); + $$->addStmtsp($4); + SYMP->popScope($$); + GRAMMARP->endLabel($6, $$, $6); + GRAMMARP->m_insideProperty = false; + GRAMMARP->m_typedPropertyPort = false; } ; property_declarationFront: // IEEE: part of property_declaration yPROPERTY idAny/*property_identifier*/ - { $$ = new AstProperty{$1, *$2, nullptr}; - GRAMMARP->m_insideProperty = true; - SYMP->pushNewUnderNodeOrCurrent($$, nullptr); } + { $$ = new AstProperty{$2, *$2, nullptr}; + GRAMMARP->m_insideProperty = true; + SYMP->pushNewUnderNodeOrCurrent($$, nullptr); } ; property_port_listE: // IEEE: [ ( [ property_port_list ] ) ] @@ -5848,71 +5854,83 @@ property_port_itemFront: // IEEE: part of property_port_item/sequence_port_item property_port_itemAssignment: // IEEE: part of property_port_item/sequence_port_item/checker_port_direction id variable_dimensionListE { $$ = VARDONEA($1, *$1, $2, nullptr); } -//UNSUP | id variable_dimensionListE '=' property_actual_arg -//UNSUP { VARDONE($1, $1, $2, $4); PINNUMINC(); } + //UNSUP|id variable_dimensionListE '=' property_actual_arg + //UNSUP { VARDONE($1, $1, $2, $4); PINNUMINC(); } ; property_port_itemDirE: /* empty */ { 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 { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); } + //UNSUP|yLOCAL__ETC yINPUT { GRAMMARP->m_pinAnsi = true; VARIO(INPUT); } ; property_declarationBody: // IEEE: part of property_declaration -//UNSUP assertion_variable_declarationList property_statement_spec { } -//UNSUP // // IEEE-2012: Incorectly hasyCOVER ySEQUENCE then property_spec here. -//UNSUP // // Fixed in IEEE 1800-2017 + //UNSUP assertion_variable_declarationList property_statement_spec {} + // // IEEE-2012: Incorectly hasyCOVER ySEQUENCE then property_spec here. + // // Fixed in IEEE 1800-2017 property_spec { $$ = $1; } | property_spec ';' { $$ = $1; } ; -//UNSUPassertion_variable_declarationList: // IEEE: part of assertion_variable_declaration -//UNSUP assertion_variable_declaration { $$ = $1; } -//UNSUP | assertion_variable_declarationList assertion_variable_declaration { } -//UNSUP ; +assertion_variable_declarationList: // IEEE: part of assertion_variable_declaration + assertion_variable_declaration { $$ = $1; } + | assertion_variable_declarationList assertion_variable_declaration + { $$ = addNextNull($1, $2); } + ; -//UNSUPsequence_declaration: // ==IEEE: sequence_declaration -//UNSUP sequence_declarationFront sequence_port_listE ';' sequence_declarationBody -//UNSUP yENDSEQUENCE endLabelE -//UNSUP { SYMP->popScope($$); } -//UNSUP ; +sequence_declaration: // ==IEEE: sequence_declaration + sequence_declarationFront sequence_port_listE ';' sequence_declarationBody + /*cont*/ yENDSEQUENCE endLabelE + { $$ = $1; + $$->addStmtsp($2); + $$->addStmtsp($4); + SYMP->popScope($$); + GRAMMARP->endLabel($6, $$, $6); } + ; -//UNSUPsequence_declarationFront: // IEEE: part of sequence_declaration -//UNSUP ySEQUENCE idAny/*new_sequence*/ -//UNSUP { SYMP->pushNew($$); } -//UNSUP ; +sequence_declarationFront: // IEEE: part of sequence_declaration + ySEQUENCE idAny/*new_sequence*/ + { BBUNSUP($1, "Unsupported: sequence"); + $$ = new AstProperty{$2, *$2, nullptr}; + SYMP->pushNewUnderNodeOrCurrent($$, nullptr); } + ; -//UNSUPsequence_port_listE: // IEEE: [ ( [ sequence_port_list ] ) ] -//UNSUP // // IEEE: sequence_lvar_port_direction ::= yINPUT | yINOUT | yOUTPUT -//UNSUP // // IEEE: [ yLOCAL [ sequence_lvar_port_direction ] ] sequence_formal_type -//UNSUP // // id {variable_dimension} [ '=' sequence_actual_arg ] -//UNSUP // // All this is almost identically the same as a property. -//UNSUP // // Difference is only yINOUT/yOUTPUT (which might be added to 1800-2012) -//UNSUP // // and yPROPERTY. So save some work. -//UNSUP property_port_listE { $$ = $1; } -//UNSUP ; +sequence_port_listE: // IEEE: [ ( [ sequence_port_list ] ) ] + // // IEEE: sequence_lvar_port_direction ::= yINPUT | yINOUT | yOUTPUT + // // IEEE: [ yLOCAL [ sequence_lvar_port_direction ] ] sequence_formal_type + // // id {variable_dimension} [ '=' sequence_actual_arg ] + // // All this is almost identically the same as a property. + // // Difference is only yINOUT/yOUTPUT (which might be added to 1800-2012) + // // and yPROPERTY. So save some work. + property_port_listE { $$ = $1; } + ; property_formal_typeNoDt: // IEEE: property_formal_type (w/o implicit) sequence_formal_typeNoDt { $$ = $1; } -//UNSUP | yPROPERTY { } + | yPROPERTY + { $$ = nullptr; GRAMMARP->m_typedPropertyPort = false; + BBUNSUP($1, "Unsupported: property argument data type"); } ; sequence_formal_typeNoDt: // ==IEEE: sequence_formal_type (w/o data_type_or_implicit) -// // IEEE: data_type_or_implicit -// // implicit expanded where used -//UNSUP ySEQUENCE { } -// // IEEE-2009: yEVENT -// // already part of data_type. Removed in 1800-2012. - yUNTYPED { $$ = nullptr; GRAMMARP->m_typedPropertyPort = false; } + // IEEE: data_type_or_implicit + // implicit expanded where used + ySEQUENCE + { $$ = nullptr; GRAMMARP->m_typedPropertyPort = false; + BBUNSUP($1, "Unsupported: sequence argument data type"); } + // IEEE-2009: yEVENT + // already part of data_type. Removed in 1800-2012. + | yUNTYPED + { $$ = nullptr; GRAMMARP->m_typedPropertyPort = false; } ; -//UNSUPsequence_declarationBody: // IEEE: part of sequence_declaration -//UNSUP // // 1800-2012 makes ';' optional -//UNSUP assertion_variable_declarationList sexpr { } -//UNSUP | assertion_variable_declarationList sexpr ';' { } -//UNSUP | sexpr { $$ = $1; } -//UNSUP | sexpr ';' { $$ = $1; } -//UNSUP ; +sequence_declarationBody: // IEEE: part of sequence_declaration + // // 1800-2012 makes ';' optional + assertion_variable_declarationList sexpr { $$ = addNextNull($1, $2); } + | assertion_variable_declarationList sexpr ';' { $$ = addNextNull($1, $2); } + | sexpr { $$ = $1; } + | sexpr ';' { $$ = $1; } + ; property_spec: // IEEE: property_spec //UNSUP: This rule has been super-specialized to what is supported now @@ -5945,27 +5963,33 @@ property_spec: // IEEE: property_spec //UNSUP | property_statementCaseIf { $$ = $1; } //UNSUP ; -//UNSUPproperty_statementCaseIf: // IEEE: property_statement - minus pexpr -//UNSUP yCASE '(' expr/*expression_or_dist*/ ')' property_case_itemList yENDCASE { } -//UNSUP | yCASE '(' expr/*expression_or_dist*/ ')' yENDCASE { } -//UNSUP | yIF '(' expr/*expression_or_dist*/ ')' pexpr %prec prLOWER_THAN_ELSE { } -//UNSUP | yIF '(' expr/*expression_or_dist*/ ')' pexpr yELSE pexpr { } -//UNSUP ; +property_statementCaseIf: // IEEE: property_statement - minus pexpr + yCASE '(' expr/*expression_or_dist*/ ')' property_case_itemList yENDCASE + { $$ = new AstConst{$1, AstConst::BitFalse{}}; + BBUNSUP($1, "Unsupported: property case expression"); } + | yCASE '(' expr/*expression_or_dist*/ ')' yENDCASE + { $$ = new AstConst{$1, AstConst::BitFalse{}}; + BBUNSUP($1, "Unsupported: property case expression"); } + | yIF '(' expr/*expression_or_dist*/ ')' pexpr %prec prLOWER_THAN_ELSE + { $$ = $5; BBUNSUP($1, "Unsupported: property case expression"); } + | yIF '(' expr/*expression_or_dist*/ ')' pexpr yELSE pexpr + { $$ = $5; BBUNSUP($1, "Unsupported: property case expression"); } + ; -//UNSUPproperty_case_itemList: // IEEE: {property_case_item} -//UNSUP property_case_item { $$ = $1; } -//UNSUP | property_case_itemList ',' property_case_item { $$ = addNextNull($1, $3); } -//UNSUP ; +property_case_itemList: // IEEE: {property_case_item} + property_case_item { $$ = $1; } + | property_case_itemList ',' property_case_item { $$ = addNextNull($1, $3); } + ; -//UNSUPproperty_case_item: // ==IEEE: property_case_item -//UNSUP // // IEEE: expression_or_dist { ',' expression_or_dist } ':' property_statement -//UNSUP // // IEEE 1800-2012 changed from property_statement to property_expr -//UNSUP // // IEEE 1800-2017 changed to require the semicolon -//UNSUP caseCondList ':' pexpr { } -//UNSUP | caseCondList ':' pexpr ';' { } -//UNSUP | yDEFAULT pexpr { } -//UNSUP | yDEFAULT ':' pexpr ';' { } -//UNSUP ; +property_case_item: // ==IEEE: property_case_item + // // IEEE: expression_or_dist { ',' expression_or_dist } ':' property_statement + // // IEEE 1800-2012 changed from property_statement to property_expr + // // IEEE 1800-2017 changed to require the semicolon + caseCondList ':' pexpr { $$ = new AstCaseItem{$2, $1, $3}; } + | caseCondList ':' pexpr ';' { $$ = new AstCaseItem{$2, $1, $3}; } + | yDEFAULT pexpr { $$ = new AstCaseItem{$1, nullptr, $2}; } + | yDEFAULT ':' pexpr ';' { $$ = new AstCaseItem{$1, nullptr, $3}; } + ; //UNSUPpev_expr: // IEEE: property_actual_arg | expr //UNSUP // // which expands to pexpr | event_expression @@ -6017,7 +6041,7 @@ pexpr: // IEEE: property_expr (The name pexpr is important as regex // // // IEEE-2009: property_statement // // IEEE-2012: yIF and yCASE - //UNSUP property_statementCaseIf { } + | property_statementCaseIf { $$ = $1; } // | ~o~pexpr/*sexpr*/ yP_POUNDMINUSPD pexpr { $$ = $3; BBUNSUP($2, "Unsupported: #-# (in property expression)"); } @@ -6182,9 +6206,9 @@ cycle_delay_range: // IEEE: ==cycle_delay_range boolean_abbrev: // ==IEEE: boolean_abbrev // // IEEE: consecutive_repetition - yP_BRASTAR constExpr ']' { } + yP_BRASTAR constExpr ']' { $$ = $2; BBUNSUP($1, "Unsupported: [*] boolean abbrev expression"); } - | yP_BRASTAR constExpr ':' constExpr ']' { } + | yP_BRASTAR constExpr ':' constExpr ']' { $$ = $2; BBUNSUP($1, "Unsupported: [*] boolean abbrev expression"); } | yP_BRASTAR ']' { $$ = new AstConst{$1, AstConst::BitFalse{}}; diff --git a/test_regress/t/t_assert_property_pexpr_unsup.out b/test_regress/t/t_assert_property_pexpr_unsup.out index e70cc0825..882db1882 100644 --- a/test_regress/t/t_assert_property_pexpr_unsup.out +++ b/test_regress/t/t_assert_property_pexpr_unsup.out @@ -1,95 +1,113 @@ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:24:13: Unsupported: strong (in property expression) - 24 | strong(a); +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:25:13: Unsupported: strong (in property expression) + 25 | strong(a); | ^ ... 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) - 28 | weak(a); +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:29:11: Unsupported: weak (in property expression) + 29 | weak(a); | ^ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:32:9: Unsupported: until (in property expression) - 32 | a until b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:33:9: Unsupported: until (in property expression) + 33 | a until b; | ^~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:36:9: Unsupported: s_until (in property expression) - 36 | a s_until b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:37:9: Unsupported: s_until (in property expression) + 37 | a s_until b; | ^~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:40:9: Unsupported: until_with (in property expression) - 40 | a until_with b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:41:9: Unsupported: until_with (in property expression) + 41 | a until_with b; | ^~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:44:9: Unsupported: s_until_with (in property expression) - 44 | a s_until_with b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:45:9: Unsupported: s_until_with (in property expression) + 45 | a s_until_with b; | ^~~~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:48:9: Unsupported: implies (in property expression) - 48 | a implies b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:49:9: Unsupported: implies (in property expression) + 49 | a implies b; | ^~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:52:9: Unsupported: #-# (in property expression) - 52 | a #-# b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:53:9: Unsupported: #-# (in property expression) + 53 | a #-# b; | ^~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:56:9: Unsupported: #=# (in property expression) - 56 | a #=# b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:57:9: Unsupported: #=# (in property expression) + 57 | a #=# b; | ^~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:60:7: Unsupported: nexttime (in property expression) - 60 | nexttime a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:61:7: Unsupported: nexttime (in property expression) + 61 | nexttime a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:64:7: Unsupported: nexttime[] (in property expression) - 64 | nexttime [2] a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:65:7: Unsupported: nexttime[] (in property expression) + 65 | nexttime [2] a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:68:7: Unsupported: s_nexttime (in property expression) - 68 | s_nexttime a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:69:7: Unsupported: s_nexttime (in property expression) + 69 | s_nexttime a; | ^~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:72:7: Unsupported: s_nexttime[] (in property expression) - 72 | s_nexttime [2] a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:73:7: Unsupported: s_nexttime[] (in property expression) + 73 | s_nexttime [2] a; | ^~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:76:16: Unsupported: always (in property expression) - 76 | nexttime always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:77:16: Unsupported: always (in property expression) + 77 | nexttime always a; | ^~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:76:7: Unsupported: nexttime (in property expression) - 76 | nexttime always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:77:7: Unsupported: nexttime (in property expression) + 77 | nexttime always a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:80:20: Unsupported: always (in property expression) - 80 | nexttime [2] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:81:20: Unsupported: always (in property expression) + 81 | nexttime [2] always a; | ^~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:80:7: Unsupported: nexttime[] (in property expression) - 80 | nexttime [2] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:81:7: Unsupported: nexttime[] (in property expression) + 81 | nexttime [2] always a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:84:16: Unsupported: eventually (in property expression) - 84 | nexttime eventually a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:85:16: Unsupported: eventually (in property expression) + 85 | nexttime eventually a; | ^~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:84:7: Unsupported: nexttime (in property expression) - 84 | nexttime eventually a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:85:7: Unsupported: nexttime (in property expression) + 85 | nexttime eventually a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:88:20: Unsupported: always (in property expression) - 88 | nexttime [2] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:89:20: Unsupported: always (in property expression) + 89 | nexttime [2] always a; | ^~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:88:7: Unsupported: nexttime[] (in property expression) - 88 | nexttime [2] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:89:7: Unsupported: nexttime[] (in property expression) + 89 | nexttime [2] always a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:92:16: Unsupported: s_eventually (in property expression) - 92 | nexttime s_eventually a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:93:16: Unsupported: s_eventually (in property expression) + 93 | nexttime s_eventually a; | ^~~~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:92:7: Unsupported: nexttime (in property expression) - 92 | nexttime s_eventually a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:93:7: Unsupported: nexttime (in property expression) + 93 | nexttime s_eventually a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:96:35: Unsupported: always (in property expression) - 96 | nexttime s_eventually [2:$] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:97:35: Unsupported: always (in property expression) + 97 | nexttime s_eventually [2:$] always a; | ^~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:96:16: Unsupported: s_eventually[] (in property expression) - 96 | nexttime s_eventually [2:$] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:97:16: Unsupported: s_eventually[] (in property expression) + 97 | nexttime s_eventually [2:$] always a; | ^~~~~~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:96:7: Unsupported: nexttime (in property expression) - 96 | nexttime s_eventually [2:$] always a; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:97:7: Unsupported: nexttime (in property expression) + 97 | nexttime s_eventually [2:$] always a; | ^~~~~~~~ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:100:17: Unsupported: accept_on (in property expression) - 100 | accept_on (a) b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:101:17: Unsupported: accept_on (in property expression) + 101 | accept_on (a) b; | ^ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:104:22: Unsupported: sync_accept_on (in property expression) - 104 | sync_accept_on (a) b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:105:22: Unsupported: sync_accept_on (in property expression) + 105 | sync_accept_on (a) b; | ^ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:108:17: Unsupported: reject_on (in property expression) - 108 | reject_on (a) b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:109:17: Unsupported: reject_on (in property expression) + 109 | reject_on (a) b; | ^ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:112:22: Unsupported: sync_reject_on (in property expression) - 112 | sync_reject_on (a) b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:113:22: Unsupported: sync_reject_on (in property expression) + 113 | sync_reject_on (a) b; | ^ -%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:116:9: Unsupported: iff (in property expression) - 116 | a iff b; +%Error-UNSUPPORTED: t/t_assert_property_pexpr_unsup.v:117:9: Unsupported: iff (in property expression) + 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 diff --git a/test_regress/t/t_assert_property_pexpr_unsup.pl b/test_regress/t/t_assert_property_pexpr_unsup.pl index d188a4276..c9ca914d8 100755 --- a/test_regress/t/t_assert_property_pexpr_unsup.pl +++ b/test_regress/t/t_assert_property_pexpr_unsup.pl @@ -12,7 +12,7 @@ scenarios(vlt => 1); compile( expect_filename => $Self->{golden_filename}, - verilator_flags2 => ['--assert'], + verilator_flags2 => ['--assert --error-limit 1000'], fails => 1, ); diff --git a/test_regress/t/t_assert_property_pexpr_unsup.v b/test_regress/t/t_assert_property_pexpr_unsup.v index dd3977db7..ec806a492 100644 --- a/test_regress/t/t_assert_property_pexpr_unsup.v +++ b/test_regress/t/t_assert_property_pexpr_unsup.v @@ -6,12 +6,13 @@ module t (/*AUTOARG*/ // Inputs - clk, a, b + clk ); input clk; int a; int b; + int c; int cyc = 0; always @(posedge clk) begin @@ -116,6 +117,26 @@ module t (/*AUTOARG*/ a iff b; 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 if (cyc == 10) begin $write("*-* All Finished *-*\n"); diff --git a/test_regress/t/t_assert_recursive_property_unsup.out b/test_regress/t/t_assert_recursive_property_unsup.out index fbca8fd7c..7a2e9e68b 100644 --- a/test_regress/t/t_assert_recursive_property_unsup.out +++ b/test_regress/t/t_assert_recursive_property_unsup.out @@ -1,6 +1,6 @@ -%Error-UNSUPPORTED: t/t_assert_recursive_property_unsup.v:20:4: Unsupported: Recursive property call: 'check' - : ... In instance t +%Error-UNSUPPORTED: t/t_assert_recursive_property_unsup.v:20:13: Unsupported: Recursive property call: 'check' + : ... In instance t 20 | property check(int n); - | ^~~~~~~~ + | ^~~~~ ... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest %Error: Exiting due to diff --git a/test_regress/t/t_sequence_sexpr_unsup.out b/test_regress/t/t_sequence_sexpr_unsup.out index 1f322e376..e128af57a 100644 --- a/test_regress/t/t_sequence_sexpr_unsup.out +++ b/test_regress/t/t_sequence_sexpr_unsup.out @@ -1,144 +1,224 @@ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:27:14: Unsupported: within (in sequence expression) - 27 | weak(a within(b)); - | ^~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:26:4: Unsupported: sequence + 26 | sequence s_a; + | ^~~~~~~~ ... 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) - 27 | weak(a within(b)); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:31:14: Unsupported: and (in sequence expression) - 31 | weak(a and b); - | ^~~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:31:11: Unsupported: weak (in property expression) - 31 | weak(a and b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:35:14: Unsupported: or (in sequence expression) - 35 | weak(a or b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:35:11: Unsupported: weak (in property expression) - 35 | weak(a or b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:39:14: Unsupported: throughout (in sequence expression) - 39 | weak(a throughout b); - | ^~~~~~~~~~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:39:11: Unsupported: weak (in property expression) - 39 | weak(a throughout b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:43:14: Unsupported: intersect (in sequence expression) - 43 | weak(a intersect b); - | ^~~~~~~~~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:43:11: Unsupported: weak (in property expression) - 43 | weak(a intersect b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:12: Unsupported: ## () cycle delay range expression - 47 | weak(## 1 b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:17: Unsupported: ## (in sequence expression) - 47 | weak(## 1 b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:11: Unsupported: weak (in property expression) - 47 | weak(## 1 b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:12: Unsupported: ## id cycle delay range expression - 50 | weak(## DELAY b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:21: Unsupported: ## (in sequence expression) - 50 | weak(## DELAY b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:11: Unsupported: weak (in property expression) - 50 | weak(## DELAY b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:53:12: Unsupported: ## () cycle delay range expression - 53 | weak(## ( DELAY ) b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:53:25: Unsupported: ## (in sequence expression) - 53 | weak(## ( DELAY ) b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:53:11: Unsupported: weak (in property expression) - 53 | weak(## ( DELAY ) b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:56:12: Unsupported: ## range cycle delay range expression - 56 | weak(## [1:2] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:56:21: Unsupported: ## (in sequence expression) - 56 | weak(## [1:2] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:56:11: Unsupported: weak (in property expression) - 56 | weak(## [1:2] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:59:12: Unsupported: ## [*] cycle delay range expression - 59 | weak(## [*] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:59:19: Unsupported: ## (in sequence expression) - 59 | weak(## [*] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:59:11: Unsupported: weak (in property expression) - 59 | weak(## [*] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:62:12: Unsupported: ## [+] cycle delay range expression - 62 | weak(## [+] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:62:19: Unsupported: ## (in sequence expression) - 62 | weak(## [+] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:62:11: Unsupported: weak (in property expression) - 62 | weak(## [+] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:14: Unsupported: ## () cycle delay range expression - 66 | weak(a ## 1 b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:17: Unsupported: ## (in sequence expression) - 66 | weak(a ## 1 b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:11: Unsupported: weak (in property expression) - 66 | weak(a ## 1 b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:14: Unsupported: ## id cycle delay range expression - 69 | weak(a ## DELAY b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:14: Unsupported: ## (in sequence expression) - 69 | weak(a ## DELAY b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:11: Unsupported: weak (in property expression) - 69 | weak(a ## DELAY b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:72:14: Unsupported: ## () cycle delay range expression - 72 | weak(a ## ( DELAY ) b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:72:19: Unsupported: ## (in sequence expression) - 72 | weak(a ## ( DELAY ) b); - | ^~~~~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:72:11: Unsupported: weak (in property expression) - 72 | weak(a ## ( DELAY ) b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:75:14: Unsupported: ## range cycle delay range expression - 75 | weak(a ## [1:2] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:75:14: Unsupported: ## (in sequence expression) - 75 | weak(a ## [1:2] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:75:11: Unsupported: weak (in property expression) - 75 | weak(a ## [1:2] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:78:14: Unsupported: ## [*] cycle delay range expression - 78 | weak(a ## [*] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:78:14: Unsupported: ## (in sequence expression) - 78 | weak(a ## [*] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:78:11: Unsupported: weak (in property expression) - 78 | weak(a ## [*] b); - | ^ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:81:14: Unsupported: ## [+] cycle delay range expression - 81 | weak(a ## [+] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:81:14: Unsupported: ## (in sequence expression) - 81 | weak(a ## [+] b); - | ^~ -%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:81:11: Unsupported: weak (in property expression) - 81 | weak(a ## [+] b); - | ^ -%Error: t/t_sequence_sexpr_unsup.v:85:12: syntax error, unexpected [*, expecting TYPE-IDENTIFIER - 85 | weak([* 1 ] a); - | ^~ -%Error: Cannot continue - ... See the manual at https://verilator.org/verilator_doc.html for more assistance. +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:29:4: Unsupported: sequence + 29 | sequence s_var; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:34:4: Unsupported: sequence + 34 | sequence s_within; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:35:9: Unsupported: within (in sequence expression) + 35 | a within(b); + | ^~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:38:4: Unsupported: sequence + 38 | sequence s_and; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:39:9: Unsupported: and (in sequence expression) + 39 | a and b; + | ^~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:42:4: Unsupported: sequence + 42 | sequence s_or; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:43:9: Unsupported: or (in sequence expression) + 43 | a or b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:46:4: Unsupported: sequence + 46 | sequence s_throughout; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:47:9: Unsupported: throughout (in sequence expression) + 47 | a throughout b; + | ^~~~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:50:4: Unsupported: sequence + 50 | sequence s_intersect; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:51:9: Unsupported: intersect (in sequence expression) + 51 | a intersect b; + | ^~~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:54:4: Unsupported: sequence + 54 | sequence s_uni_cycdelay_int; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:55:7: Unsupported: ## () cycle delay range expression + 55 | ## 1 b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:55:12: Unsupported: ## (in sequence expression) + 55 | ## 1 b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:57:4: Unsupported: sequence + 57 | sequence s_uni_cycdelay_id; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:58:7: Unsupported: ## id cycle delay range expression + 58 | ## DELAY b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:58:16: Unsupported: ## (in sequence expression) + 58 | ## DELAY b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:60:4: Unsupported: sequence + 60 | sequence s_uni_cycdelay_pid; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:61:7: Unsupported: ## () cycle delay range expression + 61 | ## ( DELAY ) b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:61:20: Unsupported: ## (in sequence expression) + 61 | ## ( DELAY ) b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:63:4: Unsupported: sequence + 63 | sequence s_uni_cycdelay_range; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:64:7: Unsupported: ## range cycle delay range expression + 64 | ## [1:2] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:64:16: Unsupported: ## (in sequence expression) + 64 | ## [1:2] b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:66:4: Unsupported: sequence + 66 | sequence s_uni_cycdelay_star; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:67:7: Unsupported: ## [*] cycle delay range expression + 67 | ## [*] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:67:14: Unsupported: ## (in sequence expression) + 67 | ## [*] b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:69:4: Unsupported: sequence + 69 | sequence s_uni_cycdelay_plus; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:70:7: Unsupported: ## [+] cycle delay range expression + 70 | ## [+] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:70:14: Unsupported: ## (in sequence expression) + 70 | ## [+] b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:73:4: Unsupported: sequence + 73 | sequence s_cycdelay_int; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:74:9: Unsupported: ## () cycle delay range expression + 74 | a ## 1 b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:74:12: Unsupported: ## (in sequence expression) + 74 | a ## 1 b; + | ^ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:76:4: Unsupported: sequence + 76 | sequence s_cycdelay_id; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:77:9: Unsupported: ## id cycle delay range expression + 77 | a ## DELAY b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:77:9: Unsupported: ## (in sequence expression) + 77 | a ## DELAY b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:79:4: Unsupported: sequence + 79 | sequence s_cycdelay_pid; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:80:9: Unsupported: ## () cycle delay range expression + 80 | a ## ( DELAY ) b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:80:14: Unsupported: ## (in sequence expression) + 80 | a ## ( DELAY ) b; + | ^~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:82:4: Unsupported: sequence + 82 | sequence s_cycdelay_range; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:83:9: Unsupported: ## range cycle delay range expression + 83 | a ## [1:2] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:83:9: Unsupported: ## (in sequence expression) + 83 | a ## [1:2] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:85:4: Unsupported: sequence + 85 | sequence s_cycdelay_star; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:86:9: Unsupported: ## [*] cycle delay range expression + 86 | a ## [*] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:86:9: Unsupported: ## (in sequence expression) + 86 | a ## [*] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:88:4: Unsupported: sequence + 88 | sequence s_cycdelay_plus; + | ^~~~~~~~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:89:9: Unsupported: ## [+] cycle delay range expression + 89 | a ## [+] b; + | ^~ +%Error-UNSUPPORTED: t/t_sequence_sexpr_unsup.v:89:9: Unsupported: ## (in sequence expression) + 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 diff --git a/test_regress/t/t_sequence_sexpr_unsup.pl b/test_regress/t/t_sequence_sexpr_unsup.pl index d188a4276..c9ca914d8 100755 --- a/test_regress/t/t_sequence_sexpr_unsup.pl +++ b/test_regress/t/t_sequence_sexpr_unsup.pl @@ -12,7 +12,7 @@ scenarios(vlt => 1); compile( expect_filename => $Self->{golden_filename}, - verilator_flags2 => ['--assert'], + verilator_flags2 => ['--assert --error-limit 1000'], fails => 1, ); diff --git a/test_regress/t/t_sequence_sexpr_unsup.v b/test_regress/t/t_sequence_sexpr_unsup.v index 2f92d7f27..0ec594255 100644 --- a/test_regress/t/t_sequence_sexpr_unsup.v +++ b/test_regress/t/t_sequence_sexpr_unsup.v @@ -6,7 +6,7 @@ module t (/*AUTOARG*/ // Inputs - clk, a, b + clk ); input clk; @@ -23,85 +23,101 @@ module t (/*AUTOARG*/ // NOTE this grammar hasn't been checked with other simulators, // is here just to avoid uncovered code lines in the grammar. // NOTE using 'property weak' here as sequence/endsequence not supported - property s_within; - weak(a within(b)); - endproperty + sequence s_a; + a; + endsequence : s_a + sequence s_var; + logic l1, l2; + a; + endsequence - property s_and; - weak(a and b); - endproperty + sequence s_within; + a within(b); + endsequence - property s_or; - weak(a or b); - endproperty + sequence s_and; + a and b; + endsequence - property s_throughout; - weak(a throughout b); - endproperty + sequence s_or; + a or b; + endsequence - property s_intersect; - weak(a intersect b); - endproperty + sequence s_throughout; + a throughout b; + endsequence - property s_uni_cycdelay_int; - weak(## 1 b); - endproperty - 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 + sequence s_intersect; + a intersect b; + endsequence - property s_cycdelay_int; - weak(a ## 1 b); - endproperty - property s_cycdelay_id; - weak(a ## DELAY b); - endproperty - property s_cycdelay_pid; - weak(a ## ( DELAY ) b); - endproperty - property s_cycdelay_range; - weak(a ## [1:2] b); - endproperty - property s_cycdelay_star; - weak(a ## [*] b); - endproperty - property s_cycdelay_plus; - weak(a ## [+] b); - endproperty + sequence s_uni_cycdelay_int; + ## 1 b; + endsequence + sequence s_uni_cycdelay_id; + ## DELAY b; + endsequence + sequence s_uni_cycdelay_pid; + ## ( DELAY ) b; + endsequence + sequence s_uni_cycdelay_range; + ## [1:2] b; + endsequence + sequence s_uni_cycdelay_star; + ## [*] b; + endsequence + sequence s_uni_cycdelay_plus; + ## [+] b; + endsequence - property s_booleanabbrev_brastar_int; - weak([* 1 ] a); - endproperty - property s_booleanabbrev_brastar; - weak([*] a); - endproperty - property s_booleanabbrev_plus; - weak([+] a); - endproperty - property s_booleanabbrev_eq; - weak([= 1] a); - endproperty - property s_booleanabbrev_eq_range; - weak([= 1:2] a); - endproperty - property s_booleanabbrev_minusgt; - weak([-> 1] a); - endproperty - property s_booleanabbrev_minusgt_range; - weak([-> 1:2] a); - endproperty + sequence s_cycdelay_int; + a ## 1 b; + endsequence + sequence s_cycdelay_id; + a ## DELAY b; + endsequence + sequence s_cycdelay_pid; + a ## ( DELAY ) b; + endsequence + sequence s_cycdelay_range; + a ## [1:2] b; + endsequence + sequence s_cycdelay_star; + a ## [*] b; + endsequence + sequence s_cycdelay_plus; + a ## [+] b; + endsequence + + sequence s_booleanabbrev_brastar_int; + 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 if (cyc == 10) begin