Skip to content

Commit 1da764f

Browse files
committed
SystemVerilog: interface instantiation
1 parent e6f0621 commit 1da764f

File tree

4 files changed

+27
-9
lines changed

4 files changed

+27
-9
lines changed

regression/verilog/interface/interface1.sv

+1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ interface myInterface;
22
endinterface
33

44
module main;
5+
myInterface some_interface;
56
endmodule

src/verilog/parser.y

+24-9
Original file line numberDiff line numberDiff line change
@@ -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

987991
module_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:
28942899
gate_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

29202925
module_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;
44114426
hierarchical_parameter_identifier: hierarchical_identifier
44124427
;
44134428

4414-
interface_identifier: TOK_NON_TYPE_IDENTIFIER;
4429+
interface_identifier: TOK_INTERFACE_IDENTIFIER;
44154430

44164431
module_identifier: TOK_NON_TYPE_IDENTIFIER;
44174432

src/verilog/verilog_scope.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ unsigned verilog_scopest::identifier_token(irep_idt base_name) const
6262
case verilog_scopet::FILE: return TOK_NON_TYPE_IDENTIFIER;
6363
case verilog_scopet::PACKAGE: return TOK_PACKAGE_IDENTIFIER;
6464
case verilog_scopet::MODULE: return TOK_NON_TYPE_IDENTIFIER;
65+
case verilog_scopet::INTERFACE: return TOK_INTERFACE_IDENTIFIER;
6566
case verilog_scopet::CLASS: return TOK_CLASS_IDENTIFIER;
6667
case verilog_scopet::BLOCK: return TOK_NON_TYPE_IDENTIFIER;
6768
case verilog_scopet::ENUM_NAME: return TOK_NON_TYPE_IDENTIFIER;

src/verilog/verilog_scope.h

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ struct verilog_scopet
2222
FILE,
2323
PACKAGE,
2424
MODULE,
25+
INTERFACE,
2526
CLASS,
2627
ENUM_NAME,
2728
TASK,

0 commit comments

Comments
 (0)