aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/libghdl/thin/vhdl/nodes.py485
-rw-r--r--src/libraries.adb34
-rw-r--r--src/vhdl/vhdl-canon.adb2
-rw-r--r--src/vhdl/vhdl-elocations.adb1
-rw-r--r--src/vhdl/vhdl-elocations.ads2
-rw-r--r--src/vhdl/vhdl-errors.adb2
-rw-r--r--src/vhdl/vhdl-nodes.adb5
-rw-r--r--src/vhdl/vhdl-nodes.ads53
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb499
-rw-r--r--src/vhdl/vhdl-parse.adb201
-rw-r--r--src/vhdl/vhdl-post_sems.adb3
-rw-r--r--src/vhdl/vhdl-sem.adb14
-rw-r--r--src/vhdl/vhdl-sem_psl.adb85
-rw-r--r--src/vhdl/vhdl-sem_psl.ads8
-rw-r--r--src/vhdl/vhdl-sem_stmts.adb2
-rw-r--r--src/vhdl/vhdl-utils.adb1
16 files changed, 792 insertions, 605 deletions
diff --git a/python/libghdl/thin/vhdl/nodes.py b/python/libghdl/thin/vhdl/nodes.py
index cd8e269c9..6c38ba503 100644
--- a/python/libghdl/thin/vhdl/nodes.py
+++ b/python/libghdl/thin/vhdl/nodes.py
@@ -45,248 +45,249 @@ class Iir_Kind:
Entity_Aspect_Entity = 30
Entity_Aspect_Configuration = 31
Entity_Aspect_Open = 32
- Block_Configuration = 33
- Block_Header = 34
- Component_Configuration = 35
- Binding_Indication = 36
- Entity_Class = 37
- Attribute_Value = 38
- Signature = 39
- Aggregate_Info = 40
- Procedure_Call = 41
- Record_Element_Constraint = 42
- Array_Element_Resolution = 43
- Record_Resolution = 44
- Record_Element_Resolution = 45
- Attribute_Specification = 46
- Disconnection_Specification = 47
- Configuration_Specification = 48
- Access_Type_Definition = 49
- Incomplete_Type_Definition = 50
- Interface_Type_Definition = 51
- File_Type_Definition = 52
- Protected_Type_Declaration = 53
- Record_Type_Definition = 54
- Array_Type_Definition = 55
- Array_Subtype_Definition = 56
- Record_Subtype_Definition = 57
- Access_Subtype_Definition = 58
- Physical_Subtype_Definition = 59
- Floating_Subtype_Definition = 60
- Integer_Subtype_Definition = 61
- Enumeration_Subtype_Definition = 62
- Enumeration_Type_Definition = 63
- Integer_Type_Definition = 64
- Floating_Type_Definition = 65
- Physical_Type_Definition = 66
- Range_Expression = 67
- Protected_Type_Body = 68
- Wildcard_Type_Definition = 69
- Subtype_Definition = 70
- Scalar_Nature_Definition = 71
- Overload_List = 72
- Entity_Declaration = 73
- Configuration_Declaration = 74
- Context_Declaration = 75
- Package_Declaration = 76
- Package_Instantiation_Declaration = 77
- Vmode_Declaration = 78
- Vprop_Declaration = 79
- Vunit_Declaration = 80
- Package_Body = 81
- Architecture_Body = 82
- Type_Declaration = 83
- Anonymous_Type_Declaration = 84
- Subtype_Declaration = 85
- Nature_Declaration = 86
- Subnature_Declaration = 87
- Package_Header = 88
- Unit_Declaration = 89
- Library_Declaration = 90
- Component_Declaration = 91
- Attribute_Declaration = 92
- Group_Template_Declaration = 93
- Group_Declaration = 94
- Element_Declaration = 95
- Non_Object_Alias_Declaration = 96
- Psl_Declaration = 97
- Psl_Endpoint_Declaration = 98
- Terminal_Declaration = 99
- Free_Quantity_Declaration = 100
- Across_Quantity_Declaration = 101
- Through_Quantity_Declaration = 102
- Enumeration_Literal = 103
- Function_Declaration = 104
- Procedure_Declaration = 105
- Function_Body = 106
- Procedure_Body = 107
- Object_Alias_Declaration = 108
- File_Declaration = 109
- Guard_Signal_Declaration = 110
- Signal_Declaration = 111
- Variable_Declaration = 112
- Constant_Declaration = 113
- Iterator_Declaration = 114
- Interface_Constant_Declaration = 115
- Interface_Variable_Declaration = 116
- Interface_Signal_Declaration = 117
- Interface_File_Declaration = 118
- Interface_Type_Declaration = 119
- Interface_Package_Declaration = 120
- Interface_Function_Declaration = 121
- Interface_Procedure_Declaration = 122
- Anonymous_Signal_Declaration = 123
- Signal_Attribute_Declaration = 124
- Identity_Operator = 125
- Negation_Operator = 126
- Absolute_Operator = 127
- Not_Operator = 128
- Implicit_Condition_Operator = 129
- Condition_Operator = 130
- Reduction_And_Operator = 131
- Reduction_Or_Operator = 132
- Reduction_Nand_Operator = 133
- Reduction_Nor_Operator = 134
- Reduction_Xor_Operator = 135
- Reduction_Xnor_Operator = 136
- And_Operator = 137
- Or_Operator = 138
- Nand_Operator = 139
- Nor_Operator = 140
- Xor_Operator = 141
- Xnor_Operator = 142
- Equality_Operator = 143
- Inequality_Operator = 144
- Less_Than_Operator = 145
- Less_Than_Or_Equal_Operator = 146
- Greater_Than_Operator = 147
- Greater_Than_Or_Equal_Operator = 148
- Match_Equality_Operator = 149
- Match_Inequality_Operator = 150
- Match_Less_Than_Operator = 151
- Match_Less_Than_Or_Equal_Operator = 152
- Match_Greater_Than_Operator = 153
- Match_Greater_Than_Or_Equal_Operator = 154
- Sll_Operator = 155
- Sla_Operator = 156
- Srl_Operator = 157
- Sra_Operator = 158
- Rol_Operator = 159
- Ror_Operator = 160
- Addition_Operator = 161
- Substraction_Operator = 162
- Concatenation_Operator = 163
- Multiplication_Operator = 164
- Division_Operator = 165
- Modulus_Operator = 166
- Remainder_Operator = 167
- Exponentiation_Operator = 168
- Function_Call = 169
- Aggregate = 170
- Parenthesis_Expression = 171
- Qualified_Expression = 172
- Type_Conversion = 173
- Allocator_By_Expression = 174
- Allocator_By_Subtype = 175
- Selected_Element = 176
- Dereference = 177
- Implicit_Dereference = 178
- Slice_Name = 179
- Indexed_Name = 180
- Psl_Expression = 181
- Sensitized_Process_Statement = 182
- Process_Statement = 183
- Concurrent_Simple_Signal_Assignment = 184
- Concurrent_Conditional_Signal_Assignment = 185
- Concurrent_Selected_Signal_Assignment = 186
- Concurrent_Assertion_Statement = 187
- Concurrent_Procedure_Call_Statement = 188
- Psl_Assert_Directive = 189
- Psl_Assume_Directive = 190
- Psl_Cover_Directive = 191
- Psl_Restrict_Directive = 192
- Block_Statement = 193
- If_Generate_Statement = 194
- Case_Generate_Statement = 195
- For_Generate_Statement = 196
- Component_Instantiation_Statement = 197
- Psl_Default_Clock = 198
- Simple_Simultaneous_Statement = 199
- Generate_Statement_Body = 200
- If_Generate_Else_Clause = 201
- Simple_Signal_Assignment_Statement = 202
- Conditional_Signal_Assignment_Statement = 203
- Selected_Waveform_Assignment_Statement = 204
- Null_Statement = 205
- Assertion_Statement = 206
- Report_Statement = 207
- Wait_Statement = 208
- Variable_Assignment_Statement = 209
- Conditional_Variable_Assignment_Statement = 210
- Return_Statement = 211
- For_Loop_Statement = 212
- While_Loop_Statement = 213
- Next_Statement = 214
- Exit_Statement = 215
- Case_Statement = 216
- Procedure_Call_Statement = 217
- If_Statement = 218
- Elsif = 219
- Character_Literal = 220
- Simple_Name = 221
- Selected_Name = 222
- Operator_Symbol = 223
- Reference_Name = 224
- External_Constant_Name = 225
- External_Signal_Name = 226
- External_Variable_Name = 227
- Selected_By_All_Name = 228
- Parenthesis_Name = 229
- Package_Pathname = 230
- Absolute_Pathname = 231
- Relative_Pathname = 232
- Pathname_Element = 233
- Base_Attribute = 234
- Subtype_Attribute = 235
- Element_Attribute = 236
- Left_Type_Attribute = 237
- Right_Type_Attribute = 238
- High_Type_Attribute = 239
- Low_Type_Attribute = 240
- Ascending_Type_Attribute = 241
- Image_Attribute = 242
- Value_Attribute = 243
- Pos_Attribute = 244
- Val_Attribute = 245
- Succ_Attribute = 246
- Pred_Attribute = 247
- Leftof_Attribute = 248
- Rightof_Attribute = 249
- Delayed_Attribute = 250
- Stable_Attribute = 251
- Quiet_Attribute = 252
- Transaction_Attribute = 253
- Event_Attribute = 254
- Active_Attribute = 255
- Last_Event_Attribute = 256
- Last_Active_Attribute = 257
- Last_Value_Attribute = 258
- Driving_Attribute = 259
- Driving_Value_Attribute = 260
- Behavior_Attribute = 261
- Structure_Attribute = 262
- Simple_Name_Attribute = 263
- Instance_Name_Attribute = 264
- Path_Name_Attribute = 265
- Left_Array_Attribute = 266
- Right_Array_Attribute = 267
- High_Array_Attribute = 268
- Low_Array_Attribute = 269
- Length_Array_Attribute = 270
- Ascending_Array_Attribute = 271
- Range_Array_Attribute = 272
- Reverse_Range_Array_Attribute = 273
- Attribute_Name = 274
+ Psl_Hierarchical_Name = 33
+ Block_Configuration = 34
+ Block_Header = 35
+ Component_Configuration = 36
+ Binding_Indication = 37
+ Entity_Class = 38
+ Attribute_Value = 39
+ Signature = 40
+ Aggregate_Info = 41
+ Procedure_Call = 42
+ Record_Element_Constraint = 43
+ Array_Element_Resolution = 44
+ Record_Resolution = 45
+ Record_Element_Resolution = 46
+ Attribute_Specification = 47
+ Disconnection_Specification = 48
+ Configuration_Specification = 49
+ Access_Type_Definition = 50
+ Incomplete_Type_Definition = 51
+ Interface_Type_Definition = 52
+ File_Type_Definition = 53
+ Protected_Type_Declaration = 54
+ Record_Type_Definition = 55
+ Array_Type_Definition = 56
+ Array_Subtype_Definition = 57
+ Record_Subtype_Definition = 58
+ Access_Subtype_Definition = 59
+ Physical_Subtype_Definition = 60
+ Floating_Subtype_Definition = 61
+ Integer_Subtype_Definition = 62
+ Enumeration_Subtype_Definition = 63
+ Enumeration_Type_Definition = 64
+ Integer_Type_Definition = 65
+ Floating_Type_Definition = 66
+ Physical_Type_Definition = 67
+ Range_Expression = 68
+ Protected_Type_Body = 69
+ Wildcard_Type_Definition = 70
+ Subtype_Definition = 71
+ Scalar_Nature_Definition = 72
+ Overload_List = 73
+ Entity_Declaration = 74
+ Configuration_Declaration = 75
+ Context_Declaration = 76
+ Package_Declaration = 77
+ Package_Instantiation_Declaration = 78
+ Vmode_Declaration = 79
+ Vprop_Declaration = 80
+ Vunit_Declaration = 81
+ Package_Body = 82
+ Architecture_Body = 83
+ Type_Declaration = 84
+ Anonymous_Type_Declaration = 85
+ Subtype_Declaration = 86
+ Nature_Declaration = 87
+ Subnature_Declaration = 88
+ Package_Header = 89
+ Unit_Declaration = 90
+ Library_Declaration = 91
+ Component_Declaration = 92
+ Attribute_Declaration = 93
+ Group_Template_Declaration = 94
+ Group_Declaration = 95
+ Element_Declaration = 96
+ Non_Object_Alias_Declaration = 97
+ Psl_Declaration = 98
+ Psl_Endpoint_Declaration = 99
+ Terminal_Declaration = 100
+ Free_Quantity_Declaration = 101
+ Across_Quantity_Declaration = 102
+ Through_Quantity_Declaration = 103
+ Enumeration_Literal = 104
+ Function_Declaration = 105
+ Procedure_Declaration = 106
+ Function_Body = 107
+ Procedure_Body = 108
+ Object_Alias_Declaration = 109
+ File_Declaration = 110
+ Guard_Signal_Declaration = 111
+ Signal_Declaration = 112
+ Variable_Declaration = 113
+ Constant_Declaration = 114
+ Iterator_Declaration = 115
+ Interface_Constant_Declaration = 116
+ Interface_Variable_Declaration = 117
+ Interface_Signal_Declaration = 118
+ Interface_File_Declaration = 119
+ Interface_Type_Declaration = 120
+ Interface_Package_Declaration = 121
+ Interface_Function_Declaration = 122
+ Interface_Procedure_Declaration = 123
+ Anonymous_Signal_Declaration = 124
+ Signal_Attribute_Declaration = 125
+ Identity_Operator = 126
+ Negation_Operator = 127
+ Absolute_Operator = 128
+ Not_Operator = 129
+ Implicit_Condition_Operator = 130
+ Condition_Operator = 131
+ Reduction_And_Operator = 132
+ Reduction_Or_Operator = 133
+ Reduction_Nand_Operator = 134
+ Reduction_Nor_Operator = 135
+ Reduction_Xor_Operator = 136
+ Reduction_Xnor_Operator = 137
+ And_Operator = 138
+ Or_Operator = 139
+ Nand_Operator = 140
+ Nor_Operator = 141
+ Xor_Operator = 142
+ Xnor_Operator = 143
+ Equality_Operator = 144
+ Inequality_Operator = 145
+ Less_Than_Operator = 146
+ Less_Than_Or_Equal_Operator = 147
+ Greater_Than_Operator = 148
+ Greater_Than_Or_Equal_Operator = 149
+ Match_Equality_Operator = 150
+ Match_Inequality_Operator = 151
+ Match_Less_Than_Operator = 152
+ Match_Less_Than_Or_Equal_Operator = 153
+ Match_Greater_Than_Operator = 154
+ Match_Greater_Than_Or_Equal_Operator = 155
+ Sll_Operator = 156
+ Sla_Operator = 157
+ Srl_Operator = 158
+ Sra_Operator = 159
+ Rol_Operator = 160
+ Ror_Operator = 161
+ Addition_Operator = 162
+ Substraction_Operator = 163
+ Concatenation_Operator = 164
+ Multiplication_Operator = 165
+ Division_Operator = 166
+ Modulus_Operator = 167
+ Remainder_Operator = 168
+ Exponentiation_Operator = 169
+ Function_Call = 170
+ Aggregate = 171
+ Parenthesis_Expression = 172
+ Qualified_Expression = 173
+ Type_Conversion = 174
+ Allocator_By_Expression = 175
+ Allocator_By_Subtype = 176
+ Selected_Element = 177
+ Dereference = 178
+ Implicit_Dereference = 179
+ Slice_Name = 180
+ Indexed_Name = 181
+ Psl_Expression = 182
+ Sensitized_Process_Statement = 183
+ Process_Statement = 184
+ Concurrent_Simple_Signal_Assignment = 185
+ Concurrent_Conditional_Signal_Assignment = 186
+ Concurrent_Selected_Signal_Assignment = 187
+ Concurrent_Assertion_Statement = 188
+ Concurrent_Procedure_Call_Statement = 189
+ Psl_Assert_Directive = 190
+ Psl_Assume_Directive = 191
+ Psl_Cover_Directive = 192
+ Psl_Restrict_Directive = 193
+ Block_Statement = 194
+ If_Generate_Statement = 195
+ Case_Generate_Statement = 196
+ For_Generate_Statement = 197
+ Component_Instantiation_Statement = 198
+ Psl_Default_Clock = 199
+ Simple_Simultaneous_Statement = 200
+ Generate_Statement_Body = 201
+ If_Generate_Else_Clause = 202
+ Simple_Signal_Assignment_Statement = 203
+ Conditional_Signal_Assignment_Statement = 204
+ Selected_Waveform_Assignment_Statement = 205
+ Null_Statement = 206
+ Assertion_Statement = 207
+ Report_Statement = 208
+ Wait_Statement = 209
+ Variable_Assignment_Statement = 210
+ Conditional_Variable_Assignment_Statement = 211
+ Return_Statement = 212
+ For_Loop_Statement = 213
+ While_Loop_Statement = 214
+ Next_Statement = 215
+ Exit_Statement = 216
+ Case_Statement = 217
+ Procedure_Call_Statement = 218
+ If_Statement = 219
+ Elsif = 220
+ Character_Literal = 221
+ Simple_Name = 222
+ Selected_Name = 223
+ Operator_Symbol = 224
+ Reference_Name = 225
+ External_Constant_Name = 226
+ External_Signal_Name = 227
+ External_Variable_Name = 228
+ Selected_By_All_Name = 229
+ Parenthesis_Name = 230
+ Package_Pathname = 231
+ Absolute_Pathname = 232
+ Relative_Pathname = 233
+ Pathname_Element = 234
+ Base_Attribute = 235
+ Subtype_Attribute = 236
+ Element_Attribute = 237
+ Left_Type_Attribute = 238
+ Right_Type_Attribute = 239
+ High_Type_Attribute = 240
+ Low_Type_Attribute = 241
+ Ascending_Type_Attribute = 242
+ Image_Attribute = 243
+ Value_Attribute = 244
+ Pos_Attribute = 245
+ Val_Attribute = 246
+ Succ_Attribute = 247
+ Pred_Attribute = 248
+ Leftof_Attribute = 249
+ Rightof_Attribute = 250
+ Delayed_Attribute = 251
+ Stable_Attribute = 252
+ Quiet_Attribute = 253
+ Transaction_Attribute = 254
+ Event_Attribute = 255
+ Active_Attribute = 256
+ Last_Event_Attribute = 257
+ Last_Active_Attribute = 258
+ Last_Value_Attribute = 259
+ Driving_Attribute = 260
+ Driving_Value_Attribute = 261
+ Behavior_Attribute = 262
+ Structure_Attribute = 263
+ Simple_Name_Attribute = 264
+ Instance_Name_Attribute = 265
+ Path_Name_Attribute = 266
+ Left_Array_Attribute = 267
+ Right_Array_Attribute = 268
+ High_Array_Attribute = 269
+ Low_Array_Attribute = 270
+ Length_Array_Attribute = 271
+ Ascending_Array_Attribute = 272
+ Range_Array_Attribute = 273
+ Reverse_Range_Array_Attribute = 274
+ Attribute_Name = 275
class Iir_Kinds:
diff --git a/src/libraries.adb b/src/libraries.adb
index 8dba5683d..cbdca93c0 100644
--- a/src/libraries.adb
+++ b/src/libraries.adb
@@ -507,21 +507,17 @@ package body Libraries is
else
Library_Unit := Create_Iir (Iir_Kind_Package_Declaration);
end if;
- when Tok_With =>
- if Library_Unit = Null_Iir
- or else
- Get_Kind (Library_Unit) /= Iir_Kind_Architecture_Body
- then
- Log_Line ("load_library: invalid use of 'with'");
- raise Internal_Error;
- end if;
- Scan_Expect (Tok_Configuration);
- Scan_Expect (Tok_Colon);
- Scan;
- goto Next_Line;
when Tok_Context =>
- Library_Unit :=
- Create_Iir (Iir_Kind_Context_Declaration);
+ Library_Unit := Create_Iir (Iir_Kind_Context_Declaration);
+ Scan;
+ when Tok_Vunit =>
+ Library_Unit := Create_Iir (Iir_Kind_Vunit_Declaration);
+ Scan;
+ when Tok_Vmode =>
+ Library_Unit := Create_Iir (Iir_Kind_Vmode_Declaration);
+ Scan;
+ when Tok_Vprop =>
+ Library_Unit := Create_Iir (Iir_Kind_Vprop_Declaration);
Scan;
when others =>
Log_Line
@@ -606,7 +602,6 @@ package body Libraries is
Last_Design_Unit := Design_Unit;
Set_Last_Design_Unit (Design_File, Design_Unit);
end if;
- << Next_Line >> null;
end loop;
Set_Date (Library, Max_Date);
@@ -1402,6 +1397,15 @@ package body Libraries is
when Iir_Kind_Context_Declaration =>
WR ("context ");
WR (Image_Identifier (Library_Unit));
+ when Iir_Kind_Vunit_Declaration =>
+ WR ("vunit ");
+ WR (Image_Identifier (Library_Unit));
+ when Iir_Kind_Vprop_Declaration =>
+ WR ("vprop ");
+ WR (Image_Identifier (Library_Unit));
+ when Iir_Kind_Vmode_Declaration =>
+ WR ("vmode ");
+ WR (Image_Identifier (Library_Unit));
when others =>
Error_Kind ("save_library", Library_Unit);
end case;
diff --git a/src/vhdl/vhdl-canon.adb b/src/vhdl/vhdl-canon.adb
index c1cd2d13f..1ee405a1f 100644
--- a/src/vhdl/vhdl-canon.adb
+++ b/src/vhdl/vhdl-canon.adb
@@ -3267,6 +3267,8 @@ package body Vhdl.Canon is
Set_Library_Unit (Unit, El);
when Iir_Kind_Context_Declaration =>
null;
+ when Iir_Kinds_Verification_Unit =>
+ null;
when others =>
Error_Kind ("canonicalize2", El);
end case;
diff --git a/src/vhdl/vhdl-elocations.adb b/src/vhdl/vhdl-elocations.adb
index a42d5e009..bd831b56f 100644
--- a/src/vhdl/vhdl-elocations.adb
+++ b/src/vhdl/vhdl-elocations.adb
@@ -231,6 +231,7 @@ package body Vhdl.Elocations is
| Iir_Kind_Entity_Aspect_Entity
| Iir_Kind_Entity_Aspect_Configuration
| Iir_Kind_Entity_Aspect_Open
+ | Iir_Kind_Psl_Hierarchical_Name
| Iir_Kind_Block_Configuration
| Iir_Kind_Component_Configuration
| Iir_Kind_Binding_Indication
diff --git a/src/vhdl/vhdl-elocations.ads b/src/vhdl/vhdl-elocations.ads
index fd2401289..80a32da90 100644
--- a/src/vhdl/vhdl-elocations.ads
+++ b/src/vhdl/vhdl-elocations.ads
@@ -79,6 +79,8 @@ package Vhdl.Elocations is
-- Iir_Kind_Entity_Aspect_Configuration (None)
+ -- Iir_Kind_Psl_Hierarchical_Name (None)
+
-- Iir_Kind_Block_Configuration (None)
-- Iir_Kind_Binding_Indication (None)
diff --git a/src/vhdl/vhdl-errors.adb b/src/vhdl/vhdl-errors.adb
index b9183fbbc..6fcdacf67 100644
--- a/src/vhdl/vhdl-errors.adb
+++ b/src/vhdl/vhdl-errors.adb
@@ -378,6 +378,8 @@ package body Vhdl.Errors is
return "configuration entity aspect";
when Iir_Kind_Entity_Aspect_Open =>
return "open entity aspect";
+ when Iir_Kind_Psl_Hierarchical_Name =>
+ return "hierarchical name";
when Iir_Kinds_Monadic_Operator
| Iir_Kinds_Dyadic_Operator =>
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb
index 5bf1e00ed..19a65af85 100644
--- a/src/vhdl/vhdl-nodes.adb
+++ b/src/vhdl/vhdl-nodes.adb
@@ -1002,6 +1002,7 @@ package body Vhdl.Nodes is
| Iir_Kind_Entity_Aspect_Entity
| Iir_Kind_Entity_Aspect_Configuration
| Iir_Kind_Entity_Aspect_Open
+ | Iir_Kind_Psl_Hierarchical_Name
| Iir_Kind_Block_Configuration
| Iir_Kind_Component_Configuration
| Iir_Kind_Entity_Class
@@ -2656,7 +2657,7 @@ package body Vhdl.Nodes is
pragma Assert (Vunit /= Null_Iir);
pragma Assert (Has_Vunit_Item_Chain (Get_Kind (Vunit)),
"no field Vunit_Item_Chain");
- return Get_Field4 (Vunit);
+ return Get_Field5 (Vunit);
end Get_Vunit_Item_Chain;
procedure Set_Vunit_Item_Chain (Vunit : Iir; Chain : Iir) is
@@ -2664,7 +2665,7 @@ package body Vhdl.Nodes is
pragma Assert (Vunit /= Null_Iir);
pragma Assert (Has_Vunit_Item_Chain (Get_Kind (Vunit)),
"no field Vunit_Item_Chain");
- Set_Field4 (Vunit, Chain);
+ Set_Field5 (Vunit, Chain);
end Set_Vunit_Item_Chain;
function Get_Block_Configuration (Target : Iir) return Iir is
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads
index 744e5c88c..79ad569fc 100644
--- a/src/vhdl/vhdl-nodes.ads
+++ b/src/vhdl/vhdl-nodes.ads
@@ -595,6 +595,12 @@ package Vhdl.Nodes is
--
-- Get/Set_Configuration_Name (Field1)
+ -- Iir_Kind_Psl_Hierarchical_Name (Short)
+ --
+ -- Get/Set_Entity_Name (Field2)
+ --
+ -- Get/Set_Architecture (Field3)
+
-- Iir_Kind_Block_Configuration (Short)
--
-- LRM08 3.4.2 Block configuration
@@ -1031,27 +1037,6 @@ package Vhdl.Nodes is
--
-- Get/Set_End_Has_Identifier (Flag9)
- -- Iir_Kind_Library_Declaration (Short)
- --
- -- Design files in the library.
- -- Get/Set_Design_File_Chain (Field1)
- --
- -- Get/Set_Chain (Field2)
- --
- -- This node is used to contain all a library. Only internaly used.
- -- Name (identifier) of the library.
- -- Get/Set_Identifier (Field3)
- --
- -- Most recent date in this library.
- -- Get/Set_Date (Field4)
- --
- -- Get/Set_Library_Directory (Field5)
- --
- -- Used to compute dependences.
- -- Get/Set_Elab_Flag (Flag3)
- --
- -- Get/Set_Visible_Flag (Flag4)
-
-- Iir_Kind_Vunit_Declaration (Short)
-- Iir_Kind_Vmode_Declaration (Short)
-- Iir_Kind_Vprop_Declaration (Short)
@@ -1065,7 +1050,7 @@ package Vhdl.Nodes is
--
-- Get/Set_Inherit_Spec_Chain (Field2)
--
- -- Get/Set_Vunit_Item_Chain (Field4)
+ -- Get/Set_Vunit_Item_Chain (Field5)
--
-- Get/Set_Visible_Flag (Flag4)
--
@@ -1077,6 +1062,27 @@ package Vhdl.Nodes is
--
-- Get/Set_Has_Begin (Flag10)
+ -- Iir_Kind_Library_Declaration (Short)
+ --
+ -- Design files in the library.
+ -- Get/Set_Design_File_Chain (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- This node is used to contain all a library. Only internaly used.
+ -- Name (identifier) of the library.
+ -- Get/Set_Identifier (Field3)
+ --
+ -- Most recent date in this library.
+ -- Get/Set_Date (Field4)
+ --
+ -- Get/Set_Library_Directory (Field5)
+ --
+ -- Used to compute dependences.
+ -- Get/Set_Elab_Flag (Flag3)
+ --
+ -- Get/Set_Visible_Flag (Flag4)
+
-- Iir_Kind_Component_Declaration (Medium)
--
-- Get/Set_Parent (Field0)
@@ -4210,6 +4216,7 @@ package Vhdl.Nodes is
Iir_Kind_Entity_Aspect_Entity,
Iir_Kind_Entity_Aspect_Configuration,
Iir_Kind_Entity_Aspect_Open,
+ Iir_Kind_Psl_Hierarchical_Name,
Iir_Kind_Block_Configuration,
Iir_Kind_Block_Header,
Iir_Kind_Component_Configuration,
@@ -6544,7 +6551,7 @@ package Vhdl.Nodes is
function Get_Inherit_Spec_Chain (Vunit : Iir) return Iir;
procedure Set_Inherit_Spec_Chain (Vunit : Iir; Chain : Iir);
- -- Field: Field4 Chain
+ -- Field: Field5 Chain
function Get_Vunit_Item_Chain (Vunit : Iir) return Iir;
procedure Set_Vunit_Item_Chain (Vunit : Iir; Chain : Iir);
diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb
index ad17a56ee..91f1608d2 100644
--- a/src/vhdl/vhdl-nodes_meta.adb
+++ b/src/vhdl/vhdl-nodes_meta.adb
@@ -1088,6 +1088,8 @@ package body Vhdl.Nodes_Meta is
return "entity_aspect_configuration";
when Iir_Kind_Entity_Aspect_Open =>
return "entity_aspect_open";
+ when Iir_Kind_Psl_Hierarchical_Name =>
+ return "psl_hierarchical_name";
when Iir_Kind_Block_Configuration =>
return "block_configuration";
when Iir_Kind_Block_Header =>
@@ -2458,6 +2460,9 @@ package body Vhdl.Nodes_Meta is
-- Iir_Kind_Entity_Aspect_Configuration
Field_Configuration_Name,
-- Iir_Kind_Entity_Aspect_Open
+ -- Iir_Kind_Psl_Hierarchical_Name
+ Field_Entity_Name,
+ Field_Architecture,
-- Iir_Kind_Block_Configuration
Field_Parent,
Field_Declaration_Chain,
@@ -4546,248 +4551,249 @@ package body Vhdl.Nodes_Meta is
Iir_Kind_Entity_Aspect_Entity => 182,
Iir_Kind_Entity_Aspect_Configuration => 183,
Iir_Kind_Entity_Aspect_Open => 183,
- Iir_Kind_Block_Configuration => 189,
- Iir_Kind_Block_Header => 193,
- Iir_Kind_Component_Configuration => 200,
- Iir_Kind_Binding_Indication => 204,
- Iir_Kind_Entity_Class => 206,
- Iir_Kind_Attribute_Value => 214,
- Iir_Kind_Signature => 217,
- Iir_Kind_Aggregate_Info => 224,
- Iir_Kind_Procedure_Call => 228,
- Iir_Kind_Record_Element_Constraint => 234,
- Iir_Kind_Array_Element_Resolution => 236,
- Iir_Kind_Record_Resolution => 237,
- Iir_Kind_Record_Element_Resolution => 240,
- Iir_Kind_Attribute_Specification => 248,
- Iir_Kind_Disconnection_Specification => 254,
- Iir_Kind_Configuration_Specification => 260,
- Iir_Kind_Access_Type_Definition => 268,
- Iir_Kind_Incomplete_Type_Definition => 276,
- Iir_Kind_Interface_Type_Definition => 283,
- Iir_Kind_File_Type_Definition => 290,
- Iir_Kind_Protected_Type_Declaration => 299,
- Iir_Kind_Record_Type_Definition => 310,
- Iir_Kind_Array_Type_Definition => 322,
- Iir_Kind_Array_Subtype_Definition => 337,
- Iir_Kind_Record_Subtype_Definition => 350,
- Iir_Kind_Access_Subtype_Definition => 358,
- Iir_Kind_Physical_Subtype_Definition => 368,
- Iir_Kind_Floating_Subtype_Definition => 379,
- Iir_Kind_Integer_Subtype_Definition => 389,
- Iir_Kind_Enumeration_Subtype_Definition => 399,
- Iir_Kind_Enumeration_Type_Definition => 410,
- Iir_Kind_Integer_Type_Definition => 418,
- Iir_Kind_Floating_Type_Definition => 426,
- Iir_Kind_Physical_Type_Definition => 437,
- Iir_Kind_Range_Expression => 445,
- Iir_Kind_Protected_Type_Body => 452,
- Iir_Kind_Wildcard_Type_Definition => 457,
- Iir_Kind_Subtype_Definition => 464,
- Iir_Kind_Scalar_Nature_Definition => 468,
- Iir_Kind_Overload_List => 469,
- Iir_Kind_Entity_Declaration => 481,
- Iir_Kind_Configuration_Declaration => 490,
- Iir_Kind_Context_Declaration => 496,
- Iir_Kind_Package_Declaration => 511,
- Iir_Kind_Package_Instantiation_Declaration => 525,
- Iir_Kind_Vmode_Declaration => 535,
- Iir_Kind_Vprop_Declaration => 545,
- Iir_Kind_Vunit_Declaration => 555,
- Iir_Kind_Package_Body => 563,
- Iir_Kind_Architecture_Body => 575,
- Iir_Kind_Type_Declaration => 582,
- Iir_Kind_Anonymous_Type_Declaration => 588,
- Iir_Kind_Subtype_Declaration => 595,
- Iir_Kind_Nature_Declaration => 601,
- Iir_Kind_Subnature_Declaration => 607,
- Iir_Kind_Package_Header => 609,
- Iir_Kind_Unit_Declaration => 618,
- Iir_Kind_Library_Declaration => 625,
- Iir_Kind_Component_Declaration => 635,
- Iir_Kind_Attribute_Declaration => 642,
- Iir_Kind_Group_Template_Declaration => 648,
- Iir_Kind_Group_Declaration => 655,
- Iir_Kind_Element_Declaration => 662,
- Iir_Kind_Non_Object_Alias_Declaration => 670,
- Iir_Kind_Psl_Declaration => 678,
- Iir_Kind_Psl_Endpoint_Declaration => 692,
- Iir_Kind_Terminal_Declaration => 699,
- Iir_Kind_Free_Quantity_Declaration => 710,
- Iir_Kind_Across_Quantity_Declaration => 722,
- Iir_Kind_Through_Quantity_Declaration => 734,
- Iir_Kind_Enumeration_Literal => 745,
- Iir_Kind_Function_Declaration => 770,
- Iir_Kind_Procedure_Declaration => 794,
- Iir_Kind_Function_Body => 804,
- Iir_Kind_Procedure_Body => 815,
- Iir_Kind_Object_Alias_Declaration => 826,
- Iir_Kind_File_Declaration => 840,
- Iir_Kind_Guard_Signal_Declaration => 853,
- Iir_Kind_Signal_Declaration => 870,
- Iir_Kind_Variable_Declaration => 883,
- Iir_Kind_Constant_Declaration => 897,
- Iir_Kind_Iterator_Declaration => 908,
- Iir_Kind_Interface_Constant_Declaration => 924,
- Iir_Kind_Interface_Variable_Declaration => 940,
- Iir_Kind_Interface_Signal_Declaration => 961,
- Iir_Kind_Interface_File_Declaration => 977,
- Iir_Kind_Interface_Type_Declaration => 987,
- Iir_Kind_Interface_Package_Declaration => 999,
- Iir_Kind_Interface_Function_Declaration => 1016,
- Iir_Kind_Interface_Procedure_Declaration => 1029,
- Iir_Kind_Anonymous_Signal_Declaration => 1038,
- Iir_Kind_Signal_Attribute_Declaration => 1041,
- Iir_Kind_Identity_Operator => 1045,
- Iir_Kind_Negation_Operator => 1049,
- Iir_Kind_Absolute_Operator => 1053,
- Iir_Kind_Not_Operator => 1057,
- Iir_Kind_Implicit_Condition_Operator => 1061,
- Iir_Kind_Condition_Operator => 1065,
- Iir_Kind_Reduction_And_Operator => 1069,
- Iir_Kind_Reduction_Or_Operator => 1073,
- Iir_Kind_Reduction_Nand_Operator => 1077,
- Iir_Kind_Reduction_Nor_Operator => 1081,
- Iir_Kind_Reduction_Xor_Operator => 1085,
- Iir_Kind_Reduction_Xnor_Operator => 1089,
- Iir_Kind_And_Operator => 1094,
- Iir_Kind_Or_Operator => 1099,
- Iir_Kind_Nand_Operator => 1104,
- Iir_Kind_Nor_Operator => 1109,
- Iir_Kind_Xor_Operator => 1114,
- Iir_Kind_Xnor_Operator => 1119,
- Iir_Kind_Equality_Operator => 1124,
- Iir_Kind_Inequality_Operator => 1129,
- Iir_Kind_Less_Than_Operator => 1134,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1139,
- Iir_Kind_Greater_Than_Operator => 1144,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1149,
- Iir_Kind_Match_Equality_Operator => 1154,
- Iir_Kind_Match_Inequality_Operator => 1159,
- Iir_Kind_Match_Less_Than_Operator => 1164,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1169,
- Iir_Kind_Match_Greater_Than_Operator => 1174,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1179,
- Iir_Kind_Sll_Operator => 1184,
- Iir_Kind_Sla_Operator => 1189,
- Iir_Kind_Srl_Operator => 1194,
- Iir_Kind_Sra_Operator => 1199,
- Iir_Kind_Rol_Operator => 1204,
- Iir_Kind_Ror_Operator => 1209,
- Iir_Kind_Addition_Operator => 1214,
- Iir_Kind_Substraction_Operator => 1219,
- Iir_Kind_Concatenation_Operator => 1224,
- Iir_Kind_Multiplication_Operator => 1229,
- Iir_Kind_Division_Operator => 1234,
- Iir_Kind_Modulus_Operator => 1239,
- Iir_Kind_Remainder_Operator => 1244,
- Iir_Kind_Exponentiation_Operator => 1249,
- Iir_Kind_Function_Call => 1257,
- Iir_Kind_Aggregate => 1264,
- Iir_Kind_Parenthesis_Expression => 1267,
- Iir_Kind_Qualified_Expression => 1271,
- Iir_Kind_Type_Conversion => 1276,
- Iir_Kind_Allocator_By_Expression => 1280,
- Iir_Kind_Allocator_By_Subtype => 1285,
- Iir_Kind_Selected_Element => 1293,
- Iir_Kind_Dereference => 1298,
- Iir_Kind_Implicit_Dereference => 1303,
- Iir_Kind_Slice_Name => 1310,
- Iir_Kind_Indexed_Name => 1316,
- Iir_Kind_Psl_Expression => 1318,
- Iir_Kind_Sensitized_Process_Statement => 1339,
- Iir_Kind_Process_Statement => 1359,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1371,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1383,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1396,
- Iir_Kind_Concurrent_Assertion_Statement => 1404,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1411,
- Iir_Kind_Psl_Assert_Directive => 1424,
- Iir_Kind_Psl_Assume_Directive => 1435,
- Iir_Kind_Psl_Cover_Directive => 1447,
- Iir_Kind_Psl_Restrict_Directive => 1458,
- Iir_Kind_Block_Statement => 1472,
- Iir_Kind_If_Generate_Statement => 1483,
- Iir_Kind_Case_Generate_Statement => 1492,
- Iir_Kind_For_Generate_Statement => 1501,
- Iir_Kind_Component_Instantiation_Statement => 1512,
- Iir_Kind_Psl_Default_Clock => 1516,
- Iir_Kind_Simple_Simultaneous_Statement => 1523,
- Iir_Kind_Generate_Statement_Body => 1534,
- Iir_Kind_If_Generate_Else_Clause => 1540,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1550,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1560,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1571,
- Iir_Kind_Null_Statement => 1575,
- Iir_Kind_Assertion_Statement => 1582,
- Iir_Kind_Report_Statement => 1588,
- Iir_Kind_Wait_Statement => 1596,
- Iir_Kind_Variable_Assignment_Statement => 1603,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1610,
- Iir_Kind_Return_Statement => 1616,
- Iir_Kind_For_Loop_Statement => 1625,
- Iir_Kind_While_Loop_Statement => 1634,
- Iir_Kind_Next_Statement => 1641,
- Iir_Kind_Exit_Statement => 1648,
- Iir_Kind_Case_Statement => 1656,
- Iir_Kind_Procedure_Call_Statement => 1662,
- Iir_Kind_If_Statement => 1672,
- Iir_Kind_Elsif => 1678,
- Iir_Kind_Character_Literal => 1686,
- Iir_Kind_Simple_Name => 1694,
- Iir_Kind_Selected_Name => 1703,
- Iir_Kind_Operator_Symbol => 1709,
- Iir_Kind_Reference_Name => 1714,
- Iir_Kind_External_Constant_Name => 1722,
- Iir_Kind_External_Signal_Name => 1730,
- Iir_Kind_External_Variable_Name => 1739,
- Iir_Kind_Selected_By_All_Name => 1745,
- Iir_Kind_Parenthesis_Name => 1750,
- Iir_Kind_Package_Pathname => 1754,
- Iir_Kind_Absolute_Pathname => 1755,
- Iir_Kind_Relative_Pathname => 1756,
- Iir_Kind_Pathname_Element => 1761,
- Iir_Kind_Base_Attribute => 1763,
- Iir_Kind_Subtype_Attribute => 1768,
- Iir_Kind_Element_Attribute => 1773,
- Iir_Kind_Left_Type_Attribute => 1778,
- Iir_Kind_Right_Type_Attribute => 1783,
- Iir_Kind_High_Type_Attribute => 1788,
- Iir_Kind_Low_Type_Attribute => 1793,
- Iir_Kind_Ascending_Type_Attribute => 1798,
- Iir_Kind_Image_Attribute => 1804,
- Iir_Kind_Value_Attribute => 1810,
- Iir_Kind_Pos_Attribute => 1816,
- Iir_Kind_Val_Attribute => 1822,
- Iir_Kind_Succ_Attribute => 1828,
- Iir_Kind_Pred_Attribute => 1834,
- Iir_Kind_Leftof_Attribute => 1840,
- Iir_Kind_Rightof_Attribute => 1846,
- Iir_Kind_Delayed_Attribute => 1855,
- Iir_Kind_Stable_Attribute => 1864,
- Iir_Kind_Quiet_Attribute => 1873,
- Iir_Kind_Transaction_Attribute => 1882,
- Iir_Kind_Event_Attribute => 1886,
- Iir_Kind_Active_Attribute => 1890,
- Iir_Kind_Last_Event_Attribute => 1894,
- Iir_Kind_Last_Active_Attribute => 1898,
- Iir_Kind_Last_Value_Attribute => 1902,
- Iir_Kind_Driving_Attribute => 1906,
- Iir_Kind_Driving_Value_Attribute => 1910,
- Iir_Kind_Behavior_Attribute => 1910,
- Iir_Kind_Structure_Attribute => 1910,
- Iir_Kind_Simple_Name_Attribute => 1917,
- Iir_Kind_Instance_Name_Attribute => 1922,
- Iir_Kind_Path_Name_Attribute => 1927,
- Iir_Kind_Left_Array_Attribute => 1934,
- Iir_Kind_Right_Array_Attribute => 1941,
- Iir_Kind_High_Array_Attribute => 1948,
- Iir_Kind_Low_Array_Attribute => 1955,
- Iir_Kind_Length_Array_Attribute => 1962,
- Iir_Kind_Ascending_Array_Attribute => 1969,
- Iir_Kind_Range_Array_Attribute => 1976,
- Iir_Kind_Reverse_Range_Array_Attribute => 1983,
- Iir_Kind_Attribute_Name => 1992
+ Iir_Kind_Psl_Hierarchical_Name => 185,
+ Iir_Kind_Block_Configuration => 191,
+ Iir_Kind_Block_Header => 195,
+ Iir_Kind_Component_Configuration => 202,
+ Iir_Kind_Binding_Indication => 206,
+ Iir_Kind_Entity_Class => 208,
+ Iir_Kind_Attribute_Value => 216,
+ Iir_Kind_Signature => 219,
+ Iir_Kind_Aggregate_Info => 226,
+ Iir_Kind_Procedure_Call => 230,
+ Iir_Kind_Record_Element_Constraint => 236,
+ Iir_Kind_Array_Element_Resolution => 238,
+ Iir_Kind_Record_Resolution => 239,
+ Iir_Kind_Record_Element_Resolution => 242,
+ Iir_Kind_Attribute_Specification => 250,
+ Iir_Kind_Disconnection_Specification => 256,
+ Iir_Kind_Configuration_Specification => 262,
+ Iir_Kind_Access_Type_Definition => 270,
+ Iir_Kind_Incomplete_Type_Definition => 278,
+ Iir_Kind_Interface_Type_Definition => 285,
+ Iir_Kind_File_Type_Definition => 292,
+ Iir_Kind_Protected_Type_Declaration => 301,
+ Iir_Kind_Record_Type_Definition => 312,
+ Iir_Kind_Array_Type_Definition => 324,
+ Iir_Kind_Array_Subtype_Definition => 339,
+ Iir_Kind_Record_Subtype_Definition => 352,
+ Iir_Kind_Access_Subtype_Definition => 360,
+ Iir_Kind_Physical_Subtype_Definition => 370,
+ Iir_Kind_Floating_Subtype_Definition => 381,
+ Iir_Kind_Integer_Subtype_Definition => 391,
+ Iir_Kind_Enumeration_Subtype_Definition => 401,
+ Iir_Kind_Enumeration_Type_Definition => 412,
+ Iir_Kind_Integer_Type_Definition => 420,
+ Iir_Kind_Floating_Type_Definition => 428,
+ Iir_Kind_Physical_Type_Definition => 439,
+ Iir_Kind_Range_Expression => 447,
+ Iir_Kind_Protected_Type_Body => 454,
+ Iir_Kind_Wildcard_Type_Definition => 459,
+ Iir_Kind_Subtype_Definition => 466,
+ Iir_Kind_Scalar_Nature_Definition => 470,
+ Iir_Kind_Overload_List => 471,
+ Iir_Kind_Entity_Declaration => 483,
+ Iir_Kind_Configuration_Declaration => 492,
+ Iir_Kind_Context_Declaration => 498,
+ Iir_Kind_Package_Declaration => 513,
+ Iir_Kind_Package_Instantiation_Declaration => 527,
+ Iir_Kind_Vmode_Declaration => 537,
+ Iir_Kind_Vprop_Declaration => 547,
+ Iir_Kind_Vunit_Declaration => 557,
+ Iir_Kind_Package_Body => 565,
+ Iir_Kind_Architecture_Body => 577,
+ Iir_Kind_Type_Declaration => 584,
+ Iir_Kind_Anonymous_Type_Declaration => 590,
+ Iir_Kind_Subtype_Declaration => 597,
+ Iir_Kind_Nature_Declaration => 603,
+ Iir_Kind_Subnature_Declaration => 609,
+ Iir_Kind_Package_Header => 611,
+ Iir_Kind_Unit_Declaration => 620,
+ Iir_Kind_Library_Declaration => 627,
+ Iir_Kind_Component_Declaration => 637,
+ Iir_Kind_Attribute_Declaration => 644,
+ Iir_Kind_Group_Template_Declaration => 650,
+ Iir_Kind_Group_Declaration => 657,
+ Iir_Kind_Element_Declaration => 664,
+ Iir_Kind_Non_Object_Alias_Declaration => 672,
+ Iir_Kind_Psl_Declaration => 680,
+ Iir_Kind_Psl_Endpoint_Declaration => 694,
+ Iir_Kind_Terminal_Declaration => 701,
+ Iir_Kind_Free_Quantity_Declaration => 712,
+ Iir_Kind_Across_Quantity_Declaration => 724,
+ Iir_Kind_Through_Quantity_Declaration => 736,
+ Iir_Kind_Enumeration_Literal => 747,
+ Iir_Kind_Function_Declaration => 772,
+ Iir_Kind_Procedure_Declaration => 796,
+ Iir_Kind_Function_Body => 806,
+ Iir_Kind_Procedure_Body => 817,
+ Iir_Kind_Object_Alias_Declaration => 828,
+ Iir_Kind_File_Declaration => 842,
+ Iir_Kind_Guard_Signal_Declaration => 855,
+ Iir_Kind_Signal_Declaration => 872,
+ Iir_Kind_Variable_Declaration => 885,
+ Iir_Kind_Constant_Declaration => 899,
+ Iir_Kind_Iterator_Declaration => 910,
+ Iir_Kind_Interface_Constant_Declaration => 926,
+ Iir_Kind_Interface_Variable_Declaration => 942,
+ Iir_Kind_Interface_Signal_Declaration => 963,
+ Iir_Kind_Interface_File_Declaration => 979,
+ Iir_Kind_Interface_Type_Declaration => 989,
+ Iir_Kind_Interface_Package_Declaration => 1001,
+ Iir_Kind_Interface_Function_Declaration => 1018,
+ Iir_Kind_Interface_Procedure_Declaration => 1031,
+ Iir_Kind_Anonymous_Signal_Declaration => 1040,
+ Iir_Kind_Signal_Attribute_Declaration => 1043,
+ Iir_Kind_Identity_Operator => 1047,
+ Iir_Kind_Negation_Operator => 1051,
+ Iir_Kind_Absolute_Operator => 1055,
+ Iir_Kind_Not_Operator => 1059,
+ Iir_Kind_Implicit_Condition_Operator => 1063,
+ Iir_Kind_Condition_Operator => 1067,
+ Iir_Kind_Reduction_And_Operator => 1071,
+ Iir_Kind_Reduction_Or_Operator => 1075,
+ Iir_Kind_Reduction_Nand_Operator => 1079,
+ Iir_Kind_Reduction_Nor_Operator => 1083,
+ Iir_Kind_Reduction_Xor_Operator => 1087,
+ Iir_Kind_Reduction_Xnor_Operator => 1091,
+ Iir_Kind_And_Operator => 1096,
+ Iir_Kind_Or_Operator => 1101,
+ Iir_Kind_Nand_Operator => 1106,
+ Iir_Kind_Nor_Operator => 1111,
+ Iir_Kind_Xor_Operator => 1116,
+ Iir_Kind_Xnor_Operator => 1121,
+ Iir_Kind_Equality_Operator => 1126,
+ Iir_Kind_Inequality_Operator => 1131,
+ Iir_Kind_Less_Than_Operator => 1136,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1141,
+ Iir_Kind_Greater_Than_Operator => 1146,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1151,
+ Iir_Kind_Match_Equality_Operator => 1156,
+ Iir_Kind_Match_Inequality_Operator => 1161,
+ Iir_Kind_Match_Less_Than_Operator => 1166,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1171,
+ Iir_Kind_Match_Greater_Than_Operator => 1176,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1181,
+ Iir_Kind_Sll_Operator => 1186,
+ Iir_Kind_Sla_Operator => 1191,
+ Iir_Kind_Srl_Operator => 1196,
+ Iir_Kind_Sra_Operator => 1201,
+ Iir_Kind_Rol_Operator => 1206,
+ Iir_Kind_Ror_Operator => 1211,
+ Iir_Kind_Addition_Operator => 1216,
+ Iir_Kind_Substraction_Operator => 1221,
+ Iir_Kind_Concatenation_Operator => 1226,
+ Iir_Kind_Multiplication_Operator => 1231,
+ Iir_Kind_Division_Operator => 1236,
+ Iir_Kind_Modulus_Operator => 1241,
+ Iir_Kind_Remainder_Operator => 1246,
+ Iir_Kind_Exponentiation_Operator => 1251,
+ Iir_Kind_Function_Call => 1259,
+ Iir_Kind_Aggregate => 1266,
+ Iir_Kind_Parenthesis_Expression => 1269,
+ Iir_Kind_Qualified_Expression => 1273,
+ Iir_Kind_Type_Conversion => 1278,
+ Iir_Kind_Allocator_By_Expression => 1282,
+ Iir_Kind_Allocator_By_Subtype => 1287,
+ Iir_Kind_Selected_Element => 1295,
+ Iir_Kind_Dereference => 1300,
+ Iir_Kind_Implicit_Dereference => 1305,
+ Iir_Kind_Slice_Name => 1312,
+ Iir_Kind_Indexed_Name => 1318,
+ Iir_Kind_Psl_Expression => 1320,
+ Iir_Kind_Sensitized_Process_Statement => 1341,
+ Iir_Kind_Process_Statement => 1361,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1373,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1385,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1398,
+ Iir_Kind_Concurrent_Assertion_Statement => 1406,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1413,
+ Iir_Kind_Psl_Assert_Directive => 1426,
+ Iir_Kind_Psl_Assume_Directive => 1437,
+ Iir_Kind_Psl_Cover_Directive => 1449,
+ Iir_Kind_Psl_Restrict_Directive => 1460,
+ Iir_Kind_Block_Statement => 1474,
+ Iir_Kind_If_Generate_Statement => 1485,
+ Iir_Kind_Case_Generate_Statement => 1494,
+ Iir_Kind_For_Generate_Statement => 1503,
+ Iir_Kind_Component_Instantiation_Statement => 1514,
+ Iir_Kind_Psl_Default_Clock => 1518,
+ Iir_Kind_Simple_Simultaneous_Statement => 1525,
+ Iir_Kind_Generate_Statement_Body => 1536,
+ Iir_Kind_If_Generate_Else_Clause => 1542,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1552,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1562,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1573,
+ Iir_Kind_Null_Statement => 1577,
+ Iir_Kind_Assertion_Statement => 1584,
+ Iir_Kind_Report_Statement => 1590,
+ Iir_Kind_Wait_Statement => 1598,
+ Iir_Kind_Variable_Assignment_Statement => 1605,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1612,
+ Iir_Kind_Return_Statement => 1618,
+ Iir_Kind_For_Loop_Statement => 1627,
+ Iir_Kind_While_Loop_Statement => 1636,
+ Iir_Kind_Next_Statement => 1643,
+ Iir_Kind_Exit_Statement => 1650,
+ Iir_Kind_Case_Statement => 1658,
+ Iir_Kind_Procedure_Call_Statement => 1664,
+ Iir_Kind_If_Statement => 1674,
+ Iir_Kind_Elsif => 1680,
+ Iir_Kind_Character_Literal => 1688,
+ Iir_Kind_Simple_Name => 1696,
+ Iir_Kind_Selected_Name => 1705,
+ Iir_Kind_Operator_Symbol => 1711,
+ Iir_Kind_Reference_Name => 1716,
+ Iir_Kind_External_Constant_Name => 1724,
+ Iir_Kind_External_Signal_Name => 1732,
+ Iir_Kind_External_Variable_Name => 1741,
+ Iir_Kind_Selected_By_All_Name => 1747,
+ Iir_Kind_Parenthesis_Name => 1752,
+ Iir_Kind_Package_Pathname => 1756,
+ Iir_Kind_Absolute_Pathname => 1757,
+ Iir_Kind_Relative_Pathname => 1758,
+ Iir_Kind_Pathname_Element => 1763,
+ Iir_Kind_Base_Attribute => 1765,
+ Iir_Kind_Subtype_Attribute => 1770,
+ Iir_Kind_Element_Attribute => 1775,
+ Iir_Kind_Left_Type_Attribute => 1780,
+ Iir_Kind_Right_Type_Attribute => 1785,
+ Iir_Kind_High_Type_Attribute => 1790,
+ Iir_Kind_Low_Type_Attribute => 1795,
+ Iir_Kind_Ascending_Type_Attribute => 1800,
+ Iir_Kind_Image_Attribute => 1806,
+ Iir_Kind_Value_Attribute => 1812,
+ Iir_Kind_Pos_Attribute => 1818,
+ Iir_Kind_Val_Attribute => 1824,
+ Iir_Kind_Succ_Attribute => 1830,
+ Iir_Kind_Pred_Attribute => 1836,
+ Iir_Kind_Leftof_Attribute => 1842,
+ Iir_Kind_Rightof_Attribute => 1848,
+ Iir_Kind_Delayed_Attribute => 1857,
+ Iir_Kind_Stable_Attribute => 1866,
+ Iir_Kind_Quiet_Attribute => 1875,
+ Iir_Kind_Transaction_Attribute => 1884,
+ Iir_Kind_Event_Attribute => 1888,
+ Iir_Kind_Active_Attribute => 1892,
+ Iir_Kind_Last_Event_Attribute => 1896,
+ Iir_Kind_Last_Active_Attribute => 1900,
+ Iir_Kind_Last_Value_Attribute => 1904,
+ Iir_Kind_Driving_Attribute => 1908,
+ Iir_Kind_Driving_Value_Attribute => 1912,
+ Iir_Kind_Behavior_Attribute => 1912,
+ Iir_Kind_Structure_Attribute => 1912,
+ Iir_Kind_Simple_Name_Attribute => 1919,
+ Iir_Kind_Instance_Name_Attribute => 1924,
+ Iir_Kind_Path_Name_Attribute => 1929,
+ Iir_Kind_Left_Array_Attribute => 1936,
+ Iir_Kind_Right_Array_Attribute => 1943,
+ Iir_Kind_High_Array_Attribute => 1950,
+ Iir_Kind_Low_Array_Attribute => 1957,
+ Iir_Kind_Length_Array_Attribute => 1964,
+ Iir_Kind_Ascending_Array_Attribute => 1971,
+ Iir_Kind_Range_Array_Attribute => 1978,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1985,
+ Iir_Kind_Attribute_Name => 1994
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -7249,7 +7255,13 @@ package body Vhdl.Nodes_Meta is
function Has_Architecture (K : Iir_Kind) return Boolean is
begin
- return K = Iir_Kind_Entity_Aspect_Entity;
+ case K is
+ when Iir_Kind_Entity_Aspect_Entity
+ | Iir_Kind_Psl_Hierarchical_Name =>
+ return True;
+ when others =>
+ return False;
+ end case;
end Has_Architecture;
function Has_Block_Specification (K : Iir_Kind) return Boolean is
@@ -7308,6 +7320,7 @@ package body Vhdl.Nodes_Meta is
begin
case K is
when Iir_Kind_Entity_Aspect_Entity
+ | Iir_Kind_Psl_Hierarchical_Name
| Iir_Kind_Configuration_Declaration
| Iir_Kind_Architecture_Body =>
return True;
diff --git a/src/vhdl/vhdl-parse.adb b/src/vhdl/vhdl-parse.adb
index cf2a1968e..95b736592 100644
--- a/src/vhdl/vhdl-parse.adb
+++ b/src/vhdl/vhdl-parse.adb
@@ -157,26 +157,6 @@ package body Vhdl.Parse is
end if;
end Expect_Scan;
- -- Transform the current token into an iir literal.
- -- The current token must be either a character or an identifier.
- function Current_Text return Iir is
- Res: Iir;
- begin
- case Current_Token is
- when Tok_Identifier =>
- Res := Create_Iir (Iir_Kind_Simple_Name);
- when Tok_Character =>
- Res := Create_Iir (Iir_Kind_Character_Literal);
- when others =>
- raise Internal_Error;
- end case;
- Set_Identifier (Res, Current_Identifier);
- Invalidate_Current_Identifier;
- Invalidate_Current_Token;
- Set_Location (Res, Get_Token_Location);
- return Res;
- end Current_Text;
-
-- Expect the identifier for node RES.
procedure Scan_Identifier (Res : Iir) is
begin
@@ -1346,6 +1326,24 @@ package body Vhdl.Parse is
return Res;
end Parse_External_Name;
+ -- LRM09 8.2 Simple names
+ -- simple_name ::= identifier
+ function Parse_Simple_Name return Iir
+ is
+ Res : Iir;
+ begin
+ Expect (Tok_Identifier);
+
+ Res := Create_Iir (Iir_Kind_Simple_Name);
+ Set_Identifier (Res, Current_Identifier);
+ Set_Location (Res);
+
+ -- Skip identifier
+ Scan;
+
+ return Res;
+ end Parse_Simple_Name;
+
-- Precond: next token (identifier, string or '<<')
-- Postcond: next token
--
@@ -1366,12 +1364,7 @@ package body Vhdl.Parse is
begin
case Current_Token is
when Tok_Identifier =>
- Res := Create_Iir (Iir_Kind_Simple_Name);
- Set_Identifier (Res, Current_Identifier);
- Set_Location (Res);
-
- -- Skip identifier
- Scan;
+ Res := Parse_Simple_Name;
when Tok_String =>
-- For operator symbol, such as: "+" (A, B).
@@ -4415,7 +4408,8 @@ package body Vhdl.Parse is
end Parse_Disconnection_Specification;
-- Parse PSL clock_declaration at 'clock'.
- function Parse_Psl_Default_Clock_Cont (Loc : Location_Type) return Iir
+ function Parse_Psl_Default_Clock_Cont
+ (Loc : Location_Type; Flag_Psl : Boolean) return Iir
is
Res : Iir;
begin
@@ -4435,7 +4429,7 @@ package body Vhdl.Parse is
Set_Psl_Boolean (Res, Parse_Psl.Parse_Psl_Boolean);
Vhdl.Scanner.Flag_Scan_In_Comment := False;
- Vhdl.Scanner.Flag_Psl := False;
+ Vhdl.Scanner.Flag_Psl := Flag_Psl;
Expect_Scan (Tok_Semi_Colon);
@@ -4444,7 +4438,7 @@ package body Vhdl.Parse is
-- 1850-2005 A.4.2 PSL declarations
-- clock_declaration ::= DEFAULT CLOCK IS clock_expression ;
- function Parse_Psl_Default_Clock return Iir
+ function Parse_Psl_Default_Clock (Flag_Psl : Boolean) return Iir
is
Loc : Location_Type;
begin
@@ -4456,7 +4450,7 @@ package body Vhdl.Parse is
-- Skip 'default'.
Scan;
- return Parse_Psl_Default_Clock_Cont (Loc);
+ return Parse_Psl_Default_Clock_Cont (Loc, Flag_Psl);
end Parse_Psl_Default_Clock;
function Parse_Psl_Declaration return Iir
@@ -5004,7 +4998,7 @@ package body Vhdl.Parse is
when others =>
Error_Kind ("parse_declarative_part", Parent);
end case;
- Decl := Parse_Psl_Default_Clock;
+ Decl := Parse_Psl_Default_Clock (False);
when Tok_Identifier =>
Error_Msg_Parse
("object class keyword such as 'variable' is expected");
@@ -5633,8 +5627,13 @@ package body Vhdl.Parse is
end if;
when Tok_Character =>
- Res := Current_Text;
+ Res := Create_Iir (Iir_Kind_Character_Literal);
+ Set_Identifier (Res, Current_Identifier);
+ Set_Location (Res);
+
+ -- Skip character.
Scan;
+
if Current_Token = Tok_Tick then
Error_Msg_Parse
("prefix of an attribute can't be a character literal");
@@ -7816,10 +7815,7 @@ package body Vhdl.Parse is
Scan;
if Current_Token = Tok_Identifier then
- Set_Architecture (Res, Current_Text);
-
- -- Skip identifier.
- Scan;
+ Set_Architecture (Res, Parse_Simple_Name);
else
Expect (Tok_Identifier, "identifier for architecture");
end if;
@@ -8553,7 +8549,8 @@ package body Vhdl.Parse is
Error_Msg_Parse (+Target, "PSL default clock is a declaration");
Current_Token := Tok_Psl_Clock;
- Res := Parse_Psl_Default_Clock_Cont (Get_Location (Target));
+ Res := Parse_Psl_Default_Clock_Cont
+ (Get_Location (Target), False);
return Res;
end if;
@@ -8581,10 +8578,11 @@ package body Vhdl.Parse is
end Parse_Concurrent_Assignment;
-- Parse end of PSL assert/cover statement.
- procedure Parse_Psl_Assert_Report_Severity (Stmt : Iir) is
+ procedure Parse_Psl_Assert_Report_Severity
+ (Stmt : Iir; Flag_Psl : Boolean) is
begin
-- No more PSL tokens after the property.
- Vhdl.Scanner.Flag_Psl := False;
+ Vhdl.Scanner.Flag_Psl := Flag_Psl;
if Current_Token = Tok_Report then
-- Skip 'report'
@@ -8605,7 +8603,7 @@ package body Vhdl.Parse is
Expect_Scan (Tok_Semi_Colon);
end Parse_Psl_Assert_Report_Severity;
- function Parse_Psl_Assert_Directive return Iir
+ function Parse_Psl_Assert_Directive (Flag_Psl : Boolean) return Iir
is
Res : Iir;
begin
@@ -8621,12 +8619,12 @@ package body Vhdl.Parse is
Set_Psl_Property (Res, Parse_Psl.Parse_Psl_Property);
- Parse_Psl_Assert_Report_Severity (Res);
+ Parse_Psl_Assert_Report_Severity (Res, Flag_Psl);
return Res;
end Parse_Psl_Assert_Directive;
- function Parse_Psl_Assume_Directive return Iir
+ function Parse_Psl_Assume_Directive (Flag_Psl : Boolean) return Iir
is
Res : Iir;
begin
@@ -8640,7 +8638,7 @@ package body Vhdl.Parse is
Set_Psl_Property (Res, Parse_Psl.Parse_Psl_Property);
- Vhdl.Scanner.Flag_Psl := False;
+ Vhdl.Scanner.Flag_Psl := Flag_Psl;
Vhdl.Scanner.Flag_Scan_In_Comment := False;
Expect_Scan (Tok_Semi_Colon);
@@ -8648,7 +8646,7 @@ package body Vhdl.Parse is
return Res;
end Parse_Psl_Assume_Directive;
- function Parse_Psl_Cover_Directive return Iir
+ function Parse_Psl_Cover_Directive (Flag_Psl : Boolean) return Iir
is
Res : Iir;
begin
@@ -8662,12 +8660,12 @@ package body Vhdl.Parse is
Set_Psl_Sequence (Res, Parse_Psl.Parse_Psl_Sequence (True));
- Parse_Psl_Assert_Report_Severity (Res);
+ Parse_Psl_Assert_Report_Severity (Res, Flag_Psl);
return Res;
end Parse_Psl_Cover_Directive;
- function Parse_Psl_Restrict_Directive return Iir
+ function Parse_Psl_Restrict_Directive (Flag_Psl : Boolean) return Iir
is
Res : Iir;
begin
@@ -8682,7 +8680,7 @@ package body Vhdl.Parse is
Set_Psl_Sequence (Res, Parse_Psl.Parse_Psl_Sequence (True));
-- No more PSL tokens after the sequence.
- Vhdl.Scanner.Flag_Psl := False;
+ Vhdl.Scanner.Flag_Psl := Flag_Psl;
Vhdl.Scanner.Flag_Scan_In_Comment := False;
Expect_Scan (Tok_Semi_Colon);
@@ -8805,7 +8803,7 @@ package body Vhdl.Parse is
if Vhdl_Std >= Vhdl_08
or else (Flag_Psl_Comment and then Flag_Scan_In_Comment)
then
- Stmt := Parse_Psl_Assert_Directive;
+ Stmt := Parse_Psl_Assert_Directive (False);
else
Stmt := Create_Iir (Iir_Kind_Concurrent_Assertion_Statement);
Parse_Assertion (Stmt);
@@ -8844,7 +8842,7 @@ package body Vhdl.Parse is
when Tok_Default =>
Postponed_Not_Allowed;
Label_Not_Allowed;
- Stmt := Parse_Psl_Default_Clock;
+ Stmt := Parse_Psl_Default_Clock (False);
when Tok_Property
| Tok_Sequence
| Tok_Psl_Endpoint =>
@@ -8853,13 +8851,13 @@ package body Vhdl.Parse is
Stmt := Parse_Psl_Declaration;
when Tok_Assume =>
Postponed_Not_Allowed;
- Stmt := Parse_Psl_Assume_Directive;
+ Stmt := Parse_Psl_Assume_Directive (False);
when Tok_Cover =>
Postponed_Not_Allowed;
- Stmt := Parse_Psl_Cover_Directive;
+ Stmt := Parse_Psl_Cover_Directive (False);
when Tok_Restrict =>
Postponed_Not_Allowed;
- Stmt := Parse_Psl_Restrict_Directive;
+ Stmt := Parse_Psl_Restrict_Directive (False);
when Tok_Wait
| Tok_Loop
| Tok_While =>
@@ -9088,9 +9086,7 @@ package body Vhdl.Parse is
when Tok_Identifier =>
Res := Create_Iir_List;
loop
- Append_Element (Res, Current_Text);
- -- Skip identifier.
- Scan;
+ Append_Element (Res, Parse_Simple_Name);
exit when Current_Token /= Tok_Comma;
@@ -9155,10 +9151,7 @@ package body Vhdl.Parse is
Scan;
if Current_Token = Tok_Identifier then
- Set_Architecture (Res, Current_Text);
-
- -- Skip identifier.
- Scan;
+ Set_Architecture (Res, Parse_Simple_Name);
else
Expect (Tok_Identifier);
end if;
@@ -9385,10 +9378,7 @@ package body Vhdl.Parse is
return Parse_Component_Configuration (Loc, Iir_Flist_Others);
when Tok_Identifier =>
- El := Current_Text;
-
- -- Skip identifier.
- Scan;
+ El := Parse_Simple_Name;
case Current_Token is
when Tok_Colon =>
@@ -9405,10 +9395,7 @@ package body Vhdl.Parse is
Scan;
if Current_Token = Tok_Identifier then
- Append_Element (List, Current_Text);
-
- -- Skip identifier.
- Scan;
+ Append_Element (List, Parse_Simple_Name);
else
Expect (Tok_Identifier);
exit;
@@ -9779,6 +9766,84 @@ package body Vhdl.Parse is
return Res;
end Parse_Package;
+ -- 1850-2005 7.2 Verification units
+ -- verification_unit ::=
+ -- vunit_type PSL_Identifier [ ( hierachical_hdl_name ) ] {
+ -- { inherit_spec }
+ -- { vunit_item }
+ -- }
+ procedure Parse_Verification_Unit (Unit : Iir_Design_Unit)
+ is
+ Kind : constant Iir_Kind := Iir_Kind_Vunit_Declaration;
+ Hier_Name : Iir;
+ Res : Iir;
+ Item, Last_Item : Iir;
+ begin
+ Res := Create_Iir (Kind);
+ Set_Parent (Res, Unit);
+
+ -- Recognize PSL keywords.
+ Vhdl.Scanner.Flag_Psl := True;
+
+ -- Skip 'vunit'.
+ Scan;
+
+ -- Identifier.
+ Scan_Identifier (Res);
+
+ -- Hierarchical hdl name.
+ if Current_Token = Tok_Left_Paren then
+ -- Skip '('.
+ Scan;
+
+ Hier_Name := Create_Iir (Iir_Kind_Psl_Hierarchical_Name);
+ Set_Location (Hier_Name);
+ Set_Entity_Name (Hier_Name, Parse_Simple_Name);
+
+ Set_Hierarchical_Name (Res, Hier_Name);
+
+ -- Skip ')'
+ Expect_Scan (Tok_Right_Paren);
+ end if;
+
+ -- Skip '{'.
+ Expect_Scan (Tok_Left_Curly);
+
+ -- TODO: inherit spec.
+
+ -- Vunit items.
+ Last_Item := Null_Iir;
+ loop
+ -- Some parse subprograms clear the mode...
+ Vhdl.Scanner.Flag_Psl := True;
+
+ case Current_Token is
+ when Tok_Default =>
+ Item := Parse_Psl_Default_Clock (True);
+ when Tok_Assert =>
+ Item := Parse_Psl_Assert_Directive (True);
+ when others =>
+ exit;
+ end case;
+
+ Set_Parent (Item, Res);
+ if Last_Item = Null_Node then
+ Set_Vunit_Item_Chain (Res, Item);
+ else
+ Set_Chain (Last_Item, Item);
+ end if;
+ Last_Item := Item;
+ end loop;
+
+ -- Skip '}'.
+ Expect_Scan (Tok_Right_Curly);
+
+ -- Normal mode.
+ Vhdl.Scanner.Flag_Psl := False;
+
+ Set_Library_Unit (Unit, Res);
+ end Parse_Verification_Unit;
+
procedure Parse_Context_Declaration_Or_Reference
(Unit : Iir_Design_Unit; Clause : out Iir);
@@ -9979,6 +10044,8 @@ package body Vhdl.Parse is
Set_Library_Unit (Res, Parse_Package (Res));
when Tok_Configuration =>
Parse_Configuration_Declaration (Res);
+ when Tok_Vunit =>
+ Parse_Verification_Unit (Res);
when Tok_Identifier =>
if Current_Identifier = Name_Context then
Error_Msg_Parse
diff --git a/src/vhdl/vhdl-post_sems.adb b/src/vhdl/vhdl-post_sems.adb
index c477ce813..28f0c54d7 100644
--- a/src/vhdl/vhdl-post_sems.adb
+++ b/src/vhdl/vhdl-post_sems.adb
@@ -39,7 +39,8 @@ package body Vhdl.Post_Sems is
-- No checks on package bodies or context declaration
case Get_Kind (Lib_Unit) is
when Iir_Kind_Package_Body
- | Iir_Kind_Context_Declaration =>
+ | Iir_Kind_Context_Declaration
+ | Iir_Kinds_Verification_Unit =>
return;
when others =>
null;
diff --git a/src/vhdl/vhdl-sem.adb b/src/vhdl/vhdl-sem.adb
index 18aefeef4..e99d7f860 100644
--- a/src/vhdl/vhdl-sem.adb
+++ b/src/vhdl/vhdl-sem.adb
@@ -15,12 +15,16 @@
-- along with GHDL; see the file COPYING. If not, write to the Free
-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-- 02111-1307, USA.
+
with Errorout; use Errorout;
+with Libraries;
+with Std_Names;
+with Flags; use Flags;
+with Str_Table;
+
with Vhdl.Errors; use Vhdl.Errors;
with Vhdl.Std_Package; use Vhdl.Std_Package;
with Vhdl.Ieee.Std_Logic_1164;
-with Libraries;
-with Std_Names;
with Vhdl.Sem_Scopes; use Vhdl.Sem_Scopes;
with Vhdl.Sem_Expr; use Vhdl.Sem_Expr;
with Vhdl.Sem_Names; use Vhdl.Sem_Names;
@@ -29,9 +33,8 @@ with Vhdl.Sem_Decls; use Vhdl.Sem_Decls;
with Vhdl.Sem_Assocs; use Vhdl.Sem_Assocs;
with Vhdl.Sem_Inst;
with Vhdl.Sem_Lib; use Vhdl.Sem_Lib;
+with Vhdl.Sem_Psl;
with Vhdl.Utils; use Vhdl.Utils;
-with Flags; use Flags;
-with Str_Table;
with Vhdl.Sem_Utils;
with Vhdl.Sem_Stmts; use Vhdl.Sem_Stmts;
with Vhdl.Nodes_Utils;
@@ -3365,8 +3368,7 @@ package body Vhdl.Sem is
when Iir_Kind_Context_Declaration =>
Sem_Context_Declaration (Library_Unit);
when Iir_Kinds_Verification_Unit =>
- -- TODO.
- raise Internal_Error;
+ Sem_Psl.Sem_Psl_Verification_Unit (Library_Unit);
end case;
end if;
diff --git a/src/vhdl/vhdl-sem_psl.adb b/src/vhdl/vhdl-sem_psl.adb
index df0c1d8a1..917f35e97 100644
--- a/src/vhdl/vhdl-sem_psl.adb
+++ b/src/vhdl/vhdl-sem_psl.adb
@@ -17,7 +17,9 @@
-- 02111-1307, USA.
with Types; use Types;
+with Std_Names;
with Errorout; use Errorout;
+
with PSL.Types; use PSL.Types;
with PSL.Nodes; use PSL.Nodes;
with PSL.Subsets;
@@ -28,7 +30,7 @@ with Vhdl.Sem_Expr;
with Vhdl.Sem_Stmts; use Vhdl.Sem_Stmts;
with Vhdl.Sem_Scopes;
with Vhdl.Sem_Names;
-with Std_Names;
+with Vhdl.Sem_Lib;
with Vhdl.Utils; use Vhdl.Utils;
with Vhdl.Evaluation; use Vhdl.Evaluation;
with Vhdl.Std_Package;
@@ -695,7 +697,8 @@ package body Vhdl.Sem_Psl is
Set_PSL_Clock (Stmt, Clk);
end Sem_Psl_Directive_Clock;
- function Sem_Psl_Assert_Directive (Stmt : Iir) return Iir
+ function Sem_Psl_Assert_Directive
+ (Stmt : Iir; Can_Rewrite : Boolean) return Iir
is
Prop : PSL_Node;
Res : Iir;
@@ -709,7 +712,7 @@ package body Vhdl.Sem_Psl is
Prop := Sem_Property (Prop, True);
Set_Psl_Property (Stmt, Prop);
- if Is_Boolean_Assertion (Prop) then
+ if Can_Rewrite and then Is_Boolean_Assertion (Prop) then
-- This is a simple assertion. Convert to a non-PSL statement, as
-- the handling is simpler (and the assertion doesn't need a clock).
Res := Rewrite_As_Concurrent_Assertion (Stmt);
@@ -884,4 +887,80 @@ package body Vhdl.Sem_Psl is
return Null_Iir;
end Sem_Psl_Name;
+ procedure Sem_Hierarchical_Name (Hier_Name : Iir; Unit : Iir)
+ is
+ Entity_Name : Iir;
+ Entity : Iir;
+ Library : Iir_Library_Declaration;
+ begin
+ Entity_Name := Get_Entity_Name (Hier_Name);
+
+ Library := Get_Library (Get_Design_File (Get_Design_Unit (Unit)));
+
+ Entity := Sem_Lib.Load_Primary_Unit
+ (Library, Get_Identifier (Entity_Name), Entity_Name);
+ if Entity = Null_Iir then
+ Error_Msg_Sem (+Entity_Name,
+ "entity %n was not analysed", +Entity_Name);
+ return;
+ end if;
+ Entity := Get_Library_Unit (Entity);
+
+ if Get_Kind (Entity) /= Iir_Kind_Entity_Declaration then
+ Error_Msg_Sem (+Entity_Name,
+ "name %i does not denote an entity", +Entity_Name);
+ return;
+ end if;
+
+ Set_Named_Entity (Entity_Name, Entity);
+ Xrefs.Xref_Ref (Entity_Name, Entity);
+ end Sem_Hierarchical_Name;
+
+ procedure Sem_Psl_Verification_Unit (Unit : Iir)
+ is
+ Hier_Name : constant Iir := Get_Hierarchical_Name (Unit);
+ Entity : Iir;
+ Item : Iir;
+ begin
+ if Hier_Name = Null_Iir then
+ -- Hierarchical name is optional.
+ -- If the unit is not bound, the names are not bound too.
+ return;
+ end if;
+ Sem_Hierarchical_Name (Hier_Name, Unit);
+
+ -- Import declarations.
+ Entity := Get_Entity_Name (Hier_Name);
+ if Entity = Null_Iir then
+ return;
+ end if;
+ Entity := Get_Named_Entity (Entity);
+ if Entity = Null_Iir then
+ return;
+ end if;
+
+ Sem_Scopes.Add_Context_Clauses (Get_Design_Unit (Entity));
+
+ Sem_Scopes.Open_Declarative_Region;
+ Set_Is_Within_Flag (Entity, True);
+ Sem_Scopes.Add_Entity_Declarations (Entity);
+
+ Item := Get_Vunit_Item_Chain (Unit);
+ while Item /= Null_Iir loop
+ case Get_Kind (Item) is
+ when Iir_Kind_Psl_Default_Clock =>
+ Sem_Psl_Default_Clock (Item);
+ when Iir_Kind_Psl_Assert_Directive =>
+ Item := Sem_Psl_Assert_Directive (Item, False);
+ when others =>
+ Error_Kind ("sem_psl_verification_unit", Item);
+ end case;
+
+ Item := Get_Chain (Item);
+ end loop;
+
+ Sem_Scopes.Close_Declarative_Region;
+ Set_Is_Within_Flag (Entity, False);
+ end Sem_Psl_Verification_Unit;
+
end Vhdl.Sem_Psl;
diff --git a/src/vhdl/vhdl-sem_psl.ads b/src/vhdl/vhdl-sem_psl.ads
index 1cd02796e..f0f239778 100644
--- a/src/vhdl/vhdl-sem_psl.ads
+++ b/src/vhdl/vhdl-sem_psl.ads
@@ -22,12 +22,16 @@ package Vhdl.Sem_Psl is
procedure Sem_Psl_Declaration (Stmt : Iir);
procedure Sem_Psl_Endpoint_Declaration (Stmt : Iir);
- -- May return a non-psl concurrent assertion statement.
- function Sem_Psl_Assert_Directive (Stmt : Iir) return Iir;
+ -- May return a non-psl concurrent assertion statement iff CAN_REWRITE is
+ -- true.
+ function Sem_Psl_Assert_Directive
+ (Stmt : Iir; Can_Rewrite : Boolean) return Iir;
procedure Sem_Psl_Assume_Directive (Stmt : Iir);
procedure Sem_Psl_Cover_Directive (Stmt : Iir);
procedure Sem_Psl_Restrict_Directive (Stmt : Iir);
procedure Sem_Psl_Default_Clock (Stmt : Iir);
function Sem_Psl_Name (Name : Iir) return Iir;
+
+ procedure Sem_Psl_Verification_Unit (Unit : Iir);
end Vhdl.Sem_Psl;
diff --git a/src/vhdl/vhdl-sem_stmts.adb b/src/vhdl/vhdl-sem_stmts.adb
index 848baeeb2..96c23ac8b 100644
--- a/src/vhdl/vhdl-sem_stmts.adb
+++ b/src/vhdl/vhdl-sem_stmts.adb
@@ -2028,7 +2028,7 @@ package body Vhdl.Sem_Stmts is
when Iir_Kind_Psl_Endpoint_Declaration =>
Sem_Psl.Sem_Psl_Endpoint_Declaration (El);
when Iir_Kind_Psl_Assert_Directive =>
- New_El := Sem_Psl.Sem_Psl_Assert_Directive (El);
+ New_El := Sem_Psl.Sem_Psl_Assert_Directive (El, True);
when Iir_Kind_Psl_Assume_Directive =>
Sem_Psl.Sem_Psl_Assume_Directive (El);
when Iir_Kind_Psl_Cover_Directive =>
diff --git a/src/vhdl/vhdl-utils.adb b/src/vhdl/vhdl-utils.adb
index 6653034a5..4269bdbf2 100644
--- a/src/vhdl/vhdl-utils.adb
+++ b/src/vhdl/vhdl-utils.adb
@@ -326,6 +326,7 @@ package body Vhdl.Utils is
| Iir_Kind_Association_Element_Subprogram
| Iir_Kinds_Choice
| Iir_Kinds_Entity_Aspect
+ | Iir_Kind_Psl_Hierarchical_Name
| Iir_Kind_If_Generate_Else_Clause
| Iir_Kind_Elsif
| Iir_Kind_Record_Element_Constraint