@@ -541,6 +541,7 @@ int yyverilogerror(const char *error)
541
541
%token TOK_ENDOFFILE
542
542
%token TOK_NON_TYPE_IDENTIFIER
543
543
%token TOK_CLASS_IDENTIFIER
544
+ %token TOK_INTERFACE_IDENTIFIER
544
545
%token TOK_PACKAGE_IDENTIFIER
545
546
%token TOK_TYPE_IDENTIFIER
546
547
%token TOK_NUMBER // number , any base
@@ -741,17 +742,20 @@ interface_nonansi_header:
741
742
attribute_instance_brace
742
743
TOK_INTERFACE
743
744
lifetime_opt
744
- interface_identifier
745
+ any_identifier
745
746
{
746
747
init ($$, ID_verilog_interface);
747
- stack_expr ($$).set (ID_base_name, stack_expr ($4 ).id ());
748
+ auto base_name = stack_expr ($4 ).id ();
749
+ stack_expr ($$).set (ID_base_name, base_name);
750
+ push_scope (base_name, " ." , verilog_scopet::INTERFACE);
748
751
}
749
752
package_import_declaration_brace
750
753
parameter_port_list_opt
751
754
list_of_ports_opt
752
755
' ;'
753
756
{
754
757
$$ = $5 ;
758
+ pop_scope ();
755
759
}
756
760
;
757
761
@@ -986,6 +990,7 @@ port_direction:
986
990
987
991
module_common_item:
988
992
module_or_generate_item_declaration
993
+ | interface_instantiation
989
994
| assertion_item
990
995
| bind_directive
991
996
| continuous_assign
@@ -2894,7 +2899,7 @@ pass_switchtype:
2894
2899
gate_instance_brace:
2895
2900
gate_instance
2896
2901
{ init ($$); mto ($$, $1 ); }
2897
- | gate_instance_brace ' ,' module_instance
2902
+ | gate_instance_brace ' ,' hierarchical_instance
2898
2903
{ $$=$1 ; mto ($$, $3 ); }
2899
2904
;
2900
2905
@@ -2918,7 +2923,7 @@ name_of_gate_instance: TOK_NON_TYPE_IDENTIFIER;
2918
2923
// A.4.1.1 Module instantiation
2919
2924
2920
2925
module_instantiation:
2921
- module_identifier parameter_value_assignment_opt module_instance_brace ' ;'
2926
+ module_identifier parameter_value_assignment_opt hierarchical_instance_brace ' ;'
2922
2927
{ init ($$, ID_inst);
2923
2928
addswap ($$, ID_module, $1 );
2924
2929
addswap ($$, ID_parameter_assignments, $2 );
@@ -2968,14 +2973,14 @@ named_parameter_assignment:
2968
2973
}
2969
2974
;
2970
2975
2971
- module_instance_brace :
2972
- module_instance
2976
+ hierarchical_instance_brace :
2977
+ hierarchical_instance
2973
2978
{ init ($$); mto ($$, $1 ); }
2974
- | module_instance_brace ' ,' module_instance
2979
+ | hierarchical_instance_brace ' ,' hierarchical_instance
2975
2980
{ $$=$1 ; mto ($$, $3 ); }
2976
2981
;
2977
2982
2978
- module_instance :
2983
+ hierarchical_instance :
2979
2984
name_of_instance ' (' list_of_module_connections_opt ' )'
2980
2985
{ init ($$, ID_inst); addswap ($$, ID_base_name, $1 ); swapop ($$, $3 ); }
2981
2986
;
@@ -3021,6 +3026,16 @@ named_port_connection:
3021
3026
mto ($$, $4 ); }
3022
3027
;
3023
3028
3029
+ hierarchical_instance: name_of_instance
3030
+ ;
3031
+
3032
+ // System Verilog standard 1800-2017
3033
+ // A.4.1.2 Interface instantiation
3034
+
3035
+ interface_instantiation:
3036
+ interface_identifier hierarchical_instance ' ;'
3037
+ ;
3038
+
3024
3039
// System Verilog standard 1800-2017
3025
3040
// A.4.2 Generated instantiation
3026
3041
@@ -4411,7 +4426,7 @@ genvar_identifier: identifier;
4411
4426
hierarchical_parameter_identifier: hierarchical_identifier
4412
4427
;
4413
4428
4414
- interface_identifier: TOK_NON_TYPE_IDENTIFIER ;
4429
+ interface_identifier: TOK_INTERFACE_IDENTIFIER ;
4415
4430
4416
4431
module_identifier: TOK_NON_TYPE_IDENTIFIER;
4417
4432
0 commit comments