Fix parsing of `with` clause inside covergroups (#6618)
This commit is contained in:
parent
8eed4e32ba
commit
5d5798b4af
|
|
@ -190,6 +190,7 @@ Paul Bowen-Huggett
|
||||||
Paul Swirhun
|
Paul Swirhun
|
||||||
Paul Wright
|
Paul Wright
|
||||||
Pawel Jewstafjew
|
Pawel Jewstafjew
|
||||||
|
Pawel Kojma
|
||||||
Pawel Sagan
|
Pawel Sagan
|
||||||
Pengcheng Xu
|
Pengcheng Xu
|
||||||
Peter Birch
|
Peter Birch
|
||||||
|
|
|
||||||
|
|
@ -6862,11 +6862,11 @@ bins_or_options<nodep>: // ==IEEE: bins_or_options
|
||||||
// // Can't use wildcardE as results in conflicts
|
// // Can't use wildcardE as results in conflicts
|
||||||
| bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' iffE
|
| bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' iffE
|
||||||
{ $$ = nullptr; BBCOVERIGN($<fl>4, "Ignoring unsupported: cover bin specification"); DEL($3, $6, $8); }
|
{ $$ = nullptr; BBCOVERIGN($<fl>4, "Ignoring unsupported: cover bin specification"); DEL($3, $6, $8); }
|
||||||
| bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' yWITH__CUR '{' cgexpr '}' iffE
|
| bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' yWITH__PAREN '(' cgexpr ')' iffE
|
||||||
{ $$ = nullptr; BBCOVERIGN($<fl>8, "Ignoring unsupported: cover bin 'with' specification"); DEL($3, $6, $10, $12); }
|
{ $$ = nullptr; BBCOVERIGN($<fl>8, "Ignoring unsupported: cover bin 'with' specification"); DEL($3, $6, $10, $12); }
|
||||||
| yWILDCARD bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' iffE
|
| yWILDCARD bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' iffE
|
||||||
{ $$ = nullptr; BBCOVERIGN($<fl>5, "Ignoring unsupported: cover bin 'wildcard' specification"); DEL($4, $7, $9); }
|
{ $$ = nullptr; BBCOVERIGN($<fl>5, "Ignoring unsupported: cover bin 'wildcard' specification"); DEL($4, $7, $9); }
|
||||||
| yWILDCARD bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' yWITH__CUR '{' cgexpr '}' iffE
|
| yWILDCARD bins_keyword idAny/*bin_identifier*/ bins_orBraE '=' '{' range_list '}' yWITH__PAREN '(' cgexpr ')' iffE
|
||||||
{ $$ = nullptr; BBCOVERIGN($<fl>9, "Ignoring unsupported: cover bin 'wildcard' 'with' specification"); DEL($4, $7, $11, $13); }
|
{ $$ = nullptr; BBCOVERIGN($<fl>9, "Ignoring unsupported: cover bin 'wildcard' 'with' specification"); DEL($4, $7, $11, $13); }
|
||||||
//
|
//
|
||||||
// // cgexpr part of trans_list
|
// // cgexpr part of trans_list
|
||||||
|
|
@ -6980,6 +6980,16 @@ cross_body_item<nodep>: // ==IEEE: cross_body_item
|
||||||
;
|
;
|
||||||
|
|
||||||
select_expression<nodep>: // ==IEEE: select_expression
|
select_expression<nodep>: // ==IEEE: select_expression
|
||||||
|
select_expression_r
|
||||||
|
{ $$ = $1; }
|
||||||
|
| select_expression yP_ANDAND select_expression
|
||||||
|
{ $$ = nullptr; BBCOVERIGN($2, "Ignoring unsupported: coverage select expression '&&'"); DEL($1, $3); }
|
||||||
|
| select_expression yP_OROR select_expression
|
||||||
|
{ $$ = nullptr; BBCOVERIGN($2, "Ignoring unsupported: coverage select expression '||'"); DEL($1, $3); }
|
||||||
|
;
|
||||||
|
|
||||||
|
// This non-terminal exists to disambiguate select_expression and make "with" bind tighter
|
||||||
|
select_expression_r<nodep>:
|
||||||
// // IEEE: select_condition expanded here
|
// // IEEE: select_condition expanded here
|
||||||
yBINSOF '(' bins_expression ')'
|
yBINSOF '(' bins_expression ')'
|
||||||
{ $$ = nullptr; BBCOVERIGN($1, "Ignoring unsupported: coverage select expression 'binsof'"); DEL($3); }
|
{ $$ = nullptr; BBCOVERIGN($1, "Ignoring unsupported: coverage select expression 'binsof'"); DEL($3); }
|
||||||
|
|
@ -6993,16 +7003,14 @@ select_expression<nodep>: // ==IEEE: select_expression
|
||||||
{ $$ = nullptr; BBCOVERIGN($1, "Ignoring unsupported: coverage select expression with"); DEL($3); }
|
{ $$ = nullptr; BBCOVERIGN($1, "Ignoring unsupported: coverage select expression with"); DEL($3); }
|
||||||
| '!' yWITH__PAREN '(' cgexpr ')'
|
| '!' yWITH__PAREN '(' cgexpr ')'
|
||||||
{ $$ = nullptr; BBCOVERIGN($1, "Ignoring unsupported: coverage select expression with"); DEL($4); }
|
{ $$ = nullptr; BBCOVERIGN($1, "Ignoring unsupported: coverage select expression with"); DEL($4); }
|
||||||
|
| select_expression_r yWITH__PAREN '(' cgexpr ')'
|
||||||
|
{ $$ = nullptr; BBCOVERIGN($2, "Ignoring unsupported: coverage select expression with"); DEL($1, $4); }
|
||||||
// // IEEE-2012: Need clarification as to precedence
|
// // IEEE-2012: Need clarification as to precedence
|
||||||
//UNSUP yWITH__PAREN '(' cgexpr ')' yMATCHES cgexpr { }
|
//UNSUP yWITH__PAREN '(' cgexpr ')' yMATCHES cgexpr { }
|
||||||
// // IEEE-2012: Need clarification as to precedence
|
// // IEEE-2012: Need clarification as to precedence
|
||||||
//UNSUP '!' yWITH__PAREN '(' cgexpr ')' yMATCHES cgexpr { }
|
//UNSUP '!' yWITH__PAREN '(' cgexpr ')' yMATCHES cgexpr { }
|
||||||
//
|
//
|
||||||
| '(' select_expression ')' { $$ = $2; }
|
| '(' select_expression ')' { $$ = $2; }
|
||||||
| select_expression yP_ANDAND select_expression
|
|
||||||
{ $$ = nullptr; BBCOVERIGN($2, "Ignoring unsupported: coverage select expression '&&'"); DEL($1, $3); }
|
|
||||||
| select_expression yP_OROR select_expression
|
|
||||||
{ $$ = nullptr; BBCOVERIGN($2, "Ignoring unsupported: coverage select expression '||'"); DEL($1, $3); }
|
|
||||||
// // IEEE-2012: cross_identifier
|
// // IEEE-2012: cross_identifier
|
||||||
// // Part of covergroup_expression - generic identifier
|
// // Part of covergroup_expression - generic identifier
|
||||||
// // IEEE-2012: Need clarification as to precedence
|
// // IEEE-2012: Need clarification as to precedence
|
||||||
|
|
|
||||||
|
|
@ -223,13 +223,13 @@
|
||||||
118 | { bins ba[2] = {a}; }
|
118 | { bins ba[2] = {a}; }
|
||||||
| ^
|
| ^
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:120:23: Ignoring unsupported: cover bin 'with' specification
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:120:23: Ignoring unsupported: cover bin 'with' specification
|
||||||
120 | { bins ba = {a} with { b }; }
|
120 | { bins ba = {a} with ( b ); }
|
||||||
| ^~~~
|
| ^~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:122:27: Ignoring unsupported: cover bin 'wildcard' specification
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:122:27: Ignoring unsupported: cover bin 'wildcard' specification
|
||||||
122 | { wildcard bins bwa = {a}; }
|
122 | { wildcard bins bwa = {a}; }
|
||||||
| ^
|
| ^
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:123:34: Ignoring unsupported: cover bin 'wildcard' 'with' specification
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:123:34: Ignoring unsupported: cover bin 'wildcard' 'with' specification
|
||||||
123 | { wildcard bins bwaw = {a} with { b }; }
|
123 | { wildcard bins bwaw = {a} with ( b ); }
|
||||||
| ^~~~
|
| ^~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:125:20: Ignoring unsupported: cover bin 'default'
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:125:20: Ignoring unsupported: cover bin 'default'
|
||||||
125 | { bins def = default; }
|
125 | { bins def = default; }
|
||||||
|
|
@ -381,28 +381,67 @@
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:157:10: Ignoring unsupported: coverage cross bin
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:157:10: Ignoring unsupported: coverage cross bin
|
||||||
157 | bins bin_or = binsof(a) || binsof(b);
|
157 | bins bin_or = binsof(a) || binsof(b);
|
||||||
| ^~~~
|
| ^~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:158:26: Ignoring unsupported: coverage select expression 'binsof'
|
||||||
|
158 | bins bin_with = binsof(a) with (a);
|
||||||
|
| ^~~~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:158:36: Ignoring unsupported: coverage select expression with
|
||||||
|
158 | bins bin_with = binsof(a) with (a);
|
||||||
|
| ^~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:158:10: Ignoring unsupported: coverage cross bin
|
||||||
|
158 | bins bin_with = binsof(a) with (a);
|
||||||
|
| ^~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:159:29: Ignoring unsupported: coverage select expression 'binsof'
|
||||||
|
159 | bins bin_or_with = binsof(a) || binsof(a) with (a);
|
||||||
|
| ^~~~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:159:42: Ignoring unsupported: coverage select expression 'binsof'
|
||||||
|
159 | bins bin_or_with = binsof(a) || binsof(a) with (a);
|
||||||
|
| ^~~~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:159:52: Ignoring unsupported: coverage select expression with
|
||||||
|
159 | bins bin_or_with = binsof(a) || binsof(a) with (a);
|
||||||
|
| ^~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:159:39: Ignoring unsupported: coverage select expression '||'
|
||||||
|
159 | bins bin_or_with = binsof(a) || binsof(a) with (a);
|
||||||
|
| ^~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:159:10: Ignoring unsupported: coverage cross bin
|
||||||
|
159 | bins bin_or_with = binsof(a) || binsof(a) with (a);
|
||||||
|
| ^~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:160:30: Ignoring unsupported: coverage select expression 'binsof'
|
||||||
|
160 | bins bin_and_with = binsof(a) && binsof(a) with (a);
|
||||||
|
| ^~~~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:160:43: Ignoring unsupported: coverage select expression 'binsof'
|
||||||
|
160 | bins bin_and_with = binsof(a) && binsof(a) with (a);
|
||||||
|
| ^~~~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:160:53: Ignoring unsupported: coverage select expression with
|
||||||
|
160 | bins bin_and_with = binsof(a) && binsof(a) with (a);
|
||||||
|
| ^~~~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:160:40: Ignoring unsupported: coverage select expression '&&'
|
||||||
|
160 | bins bin_and_with = binsof(a) && binsof(a) with (a);
|
||||||
|
| ^~
|
||||||
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:160:10: Ignoring unsupported: coverage cross bin
|
||||||
|
160 | bins bin_and_with = binsof(a) && binsof(a) with (a);
|
||||||
|
| ^~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:143:7: Ignoring unsupported: cover cross
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:143:7: Ignoring unsupported: cover cross
|
||||||
143 | cross a, b {
|
143 | cross a, b {
|
||||||
| ^~~~~
|
| ^~~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:142:4: Ignoring unsupported: covergroup
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:142:4: Ignoring unsupported: covergroup
|
||||||
142 | covergroup cg_cross_bins;
|
142 | covergroup cg_cross_bins;
|
||||||
| ^~~~~~~~~~
|
| ^~~~~~~~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:161:4: Ignoring unsupported: covergroup
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:164:4: Ignoring unsupported: covergroup
|
||||||
161 | covergroup cgArgs(int cg_lim);
|
164 | covergroup cgArgs(int cg_lim);
|
||||||
| ^~~~~~~~~~
|
| ^~~~~~~~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:168:23: Ignoring unsupported: coverage clocking event
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:171:23: Ignoring unsupported: coverage clocking event
|
||||||
168 | covergroup cov1 @m_z;
|
171 | covergroup cov1 @m_z;
|
||||||
| ^
|
| ^
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:169:10: Ignoring unsupported: coverpoint
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:172:10: Ignoring unsupported: coverpoint
|
||||||
169 | coverpoint m_x;
|
172 | coverpoint m_x;
|
||||||
| ^~~~~~~~~~
|
| ^~~~~~~~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:170:10: Ignoring unsupported: coverpoint
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:173:10: Ignoring unsupported: coverpoint
|
||||||
170 | coverpoint m_y;
|
173 | coverpoint m_y;
|
||||||
| ^~~~~~~~~~
|
| ^~~~~~~~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:168:7: Ignoring unsupported: covergroup
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:171:7: Ignoring unsupported: covergroup
|
||||||
168 | covergroup cov1 @m_z;
|
171 | covergroup cov1 @m_z;
|
||||||
| ^~~~~~~~~~
|
| ^~~~~~~~~~
|
||||||
%Warning-COVERIGN: t/t_covergroup_unsup.v:178:7: Ignoring unsupported: covergroup
|
%Warning-COVERIGN: t/t_covergroup_unsup.v:181:7: Ignoring unsupported: covergroup
|
||||||
178 | covergroup extends cg_empty;
|
181 | covergroup extends cg_empty;
|
||||||
| ^~~~~~~~~~
|
| ^~~~~~~~~~
|
||||||
%Error: Exiting due to
|
%Error: Exiting due to
|
||||||
|
|
|
||||||
|
|
@ -117,10 +117,10 @@ module t (/*AUTOARG*/
|
||||||
{ bins ba[] = {a}; }
|
{ bins ba[] = {a}; }
|
||||||
{ bins ba[2] = {a}; }
|
{ bins ba[2] = {a}; }
|
||||||
|
|
||||||
{ bins ba = {a} with { b }; }
|
{ bins ba = {a} with ( b ); }
|
||||||
|
|
||||||
{ wildcard bins bwa = {a}; }
|
{ wildcard bins bwa = {a}; }
|
||||||
{ wildcard bins bwaw = {a} with { b }; }
|
{ wildcard bins bwaw = {a} with ( b ); }
|
||||||
|
|
||||||
{ bins def = default; }
|
{ bins def = default; }
|
||||||
{ bins defs = default sequence; }
|
{ bins defs = default sequence; }
|
||||||
|
|
@ -155,6 +155,9 @@ module t (/*AUTOARG*/
|
||||||
bins bin_par = (binsof(a));
|
bins bin_par = (binsof(a));
|
||||||
bins bin_and = binsof(a) && binsof(b);
|
bins bin_and = binsof(a) && binsof(b);
|
||||||
bins bin_or = binsof(a) || binsof(b);
|
bins bin_or = binsof(a) || binsof(b);
|
||||||
|
bins bin_with = binsof(a) with (a);
|
||||||
|
bins bin_or_with = binsof(a) || binsof(a) with (a);
|
||||||
|
bins bin_and_with = binsof(a) && binsof(a) with (a);
|
||||||
}
|
}
|
||||||
endgroup
|
endgroup
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue