@@ -541,6 +541,7 @@ int yyverilogerror(const char *error)
541541%token TOK_ENDOFFILE
542542%token TOK_NON_TYPE_IDENTIFIER
543543%token TOK_CLASS_IDENTIFIER
544+ %token TOK_INTERFACE_IDENTIFIER
544545%token TOK_PACKAGE_IDENTIFIER
545546%token TOK_TYPE_IDENTIFIER
546547%token TOK_NUMBER // number , any base
@@ -741,17 +742,20 @@ interface_nonansi_header:
741742 attribute_instance_brace
742743 TOK_INTERFACE
743744 lifetime_opt
744- interface_identifier
745+ any_identifier
745746 {
746747 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);
748751 }
749752 package_import_declaration_brace
750753 parameter_port_list_opt
751754 list_of_ports_opt
752755 ' ;'
753756 {
754757 $$ = $5 ;
758+ pop_scope ();
755759 }
756760 ;
757761
@@ -986,6 +990,7 @@ port_direction:
986990
987991module_common_item:
988992 module_or_generate_item_declaration
993+ | interface_instantiation
989994 | assertion_item
990995 | bind_directive
991996 | continuous_assign
@@ -2894,7 +2899,7 @@ pass_switchtype:
28942899gate_instance_brace:
28952900 gate_instance
28962901 { init ($$); mto ($$, $1 ); }
2897- | gate_instance_brace ' ,' module_instance
2902+ | gate_instance_brace ' ,' hierarchical_instance
28982903 { $$=$1 ; mto ($$, $3 ); }
28992904 ;
29002905
@@ -2918,7 +2923,7 @@ name_of_gate_instance: TOK_NON_TYPE_IDENTIFIER;
29182923// A.4.1.1 Module instantiation
29192924
29202925module_instantiation:
2921- module_identifier parameter_value_assignment_opt module_instance_brace ' ;'
2926+ module_identifier parameter_value_assignment_opt hierarchical_instance_brace ' ;'
29222927 { init ($$, ID_inst);
29232928 addswap ($$, ID_module, $1 );
29242929 addswap ($$, ID_parameter_assignments, $2 );
@@ -2968,14 +2973,14 @@ named_parameter_assignment:
29682973 }
29692974 ;
29702975
2971- module_instance_brace :
2972- module_instance
2976+ hierarchical_instance_brace :
2977+ hierarchical_instance
29732978 { init ($$); mto ($$, $1 ); }
2974- | module_instance_brace ' ,' module_instance
2979+ | hierarchical_instance_brace ' ,' hierarchical_instance
29752980 { $$=$1 ; mto ($$, $3 ); }
29762981 ;
29772982
2978- module_instance :
2983+ hierarchical_instance :
29792984 name_of_instance ' (' list_of_module_connections_opt ' )'
29802985 { init ($$, ID_inst); addswap ($$, ID_base_name, $1 ); swapop ($$, $3 ); }
29812986 ;
@@ -3021,6 +3026,16 @@ named_port_connection:
30213026 mto ($$, $4 ); }
30223027 ;
30233028
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+
30243039// System Verilog standard 1800-2017
30253040// A.4.2 Generated instantiation
30263041
@@ -4411,7 +4426,7 @@ genvar_identifier: identifier;
44114426hierarchical_parameter_identifier: hierarchical_identifier
44124427 ;
44134428
4414- interface_identifier: TOK_NON_TYPE_IDENTIFIER ;
4429+ interface_identifier: TOK_INTERFACE_IDENTIFIER ;
44154430
44164431module_identifier: TOK_NON_TYPE_IDENTIFIER;
44174432
0 commit comments