diff --git a/src/verilog.y b/src/verilog.y index 741b9d41b..25f65230b 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -1263,7 +1263,7 @@ package_or_generate_item_declaration: // ==IEEE: package_or_generate_i | function_declaration { $$ = $1; } //UNSUP checker_declaration { $$ = $1; } | dpi_import_export { $$ = $1; } - //UNSUP extern_constraint_declaration { $$ = $1; } + | extern_constraint_declaration { $$ = $1; } | class_declaration { $$ = $1; } // // class_constructor_declaration is part of function_declaration // // local_parameter_declaration under parameter_declaration @@ -6877,9 +6877,10 @@ dist_item: // ==IEEE: dist_item + dist_weight | value_range yP_COLONDIV expr { $$ = $1; /*UNSUP-no-UVM*/ } ; -//UNSUPextern_constraint_declaration: // ==IEEE: extern_constraint_declaration -//UNSUP constraintStaticE yCONSTRAINT class_scope_id constraint_block { } -//UNSUP ; +extern_constraint_declaration: // ==IEEE: extern_constraint_declaration + constraintStaticE yCONSTRAINT packageClassScopeE idAny + { $$ = nullptr; BBUNSUP($2, "Unsupported: extern constraint"); } + ; constraintStaticE: // IEEE: part of extern_constraint_declaration /* empty */ { $$ = false; } diff --git a/test_regress/t/t_randomize.out b/test_regress/t/t_randomize.out index e46ab03c5..334f02e8a 100644 --- a/test_regress/t/t_randomize.out +++ b/test_regress/t/t_randomize.out @@ -8,4 +8,10 @@ %Error-UNSUPPORTED: t/t_randomize.v:32:9: Unsupported: dist 32 | x dist { [100:102] :/ 1, 200 := 2, 300 := 5, 400}; | ^~~~ +%Error-UNSUPPORTED: t/t_randomize.v:37:1: Unsupported: extern constraint + 37 | constraint Packet::ex { header > 0 }; + | ^~~~~~~~~~ +%Error: t/t_randomize.v:37:23: syntax error, unexpected '{' + 37 | constraint Packet::ex { header > 0 }; + | ^ %Error: Exiting due to diff --git a/test_regress/t/t_randomize.v b/test_regress/t/t_randomize.v index 9c3d9bf5e..30634b113 100644 --- a/test_regress/t/t_randomize.v +++ b/test_regress/t/t_randomize.v @@ -16,14 +16,14 @@ class Packet; header < (64'h1 << length); } } - constraint b { + constraint c { header >= length - 10; header <= length; } - constraint c { + constraint d { foreach (in_use[i]) { !(start_offset <= in_use[i].Xend_offsetX && - start_offset + len - 1 >= in_use[i].Xstart_offsetX); + start_offset + length - 1 >= in_use[i].Xstart_offsetX); } } constraint order { solve length before header; } @@ -34,6 +34,8 @@ class Packet; endclass +constraint Packet::ex { header > 0 }; + module t (/*AUTOARG*/); Packet p;