From e669bf61068a516e54e6547490164a54728d81aa Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 4 Jul 2019 18:20:07 +0200 Subject: vhdl: parse and analyze restrict directive. --- src/vhdl/vhdl-nodes_meta.adb | 210 +++++++++++++++++++++++++------------------ 1 file changed, 121 insertions(+), 89 deletions(-) (limited to 'src/vhdl/vhdl-nodes_meta.adb') diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index eea011a3f..712d0fa81 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -1392,6 +1392,8 @@ package body Vhdl.Nodes_Meta is return "psl_assert_statement"; when Iir_Kind_Psl_Cover_Statement => return "psl_cover_statement"; + when Iir_Kind_Psl_Restrict_Directive => + return "psl_restrict_directive"; when Iir_Kind_Block_Statement => return "block_statement"; when Iir_Kind_If_Generate_Statement => @@ -3821,6 +3823,18 @@ package body Vhdl.Nodes_Meta is Field_Severity_Expression, Field_Report_Expression, Field_PSL_Clock_Sensitivity, + -- Iir_Kind_Psl_Restrict_Directive + Field_Psl_Sequence, + Field_Label, + Field_PSL_Clock, + Field_PSL_NFA, + Field_PSL_Nbr_States, + Field_PSL_EOS_Flag, + Field_Postponed_Flag, + Field_Visible_Flag, + Field_Parent, + Field_Chain, + Field_PSL_Clock_Sensitivity, -- Iir_Kind_Block_Statement Field_Label, Field_Visible_Flag, @@ -4628,88 +4642,89 @@ package body Vhdl.Nodes_Meta is Iir_Kind_Concurrent_Procedure_Call_Statement => 1385, Iir_Kind_Psl_Assert_Statement => 1398, Iir_Kind_Psl_Cover_Statement => 1411, - Iir_Kind_Block_Statement => 1425, - Iir_Kind_If_Generate_Statement => 1436, - Iir_Kind_Case_Generate_Statement => 1445, - Iir_Kind_For_Generate_Statement => 1454, - Iir_Kind_Component_Instantiation_Statement => 1465, - Iir_Kind_Psl_Default_Clock => 1469, - Iir_Kind_Simple_Simultaneous_Statement => 1476, - Iir_Kind_Generate_Statement_Body => 1487, - Iir_Kind_If_Generate_Else_Clause => 1493, - Iir_Kind_Simple_Signal_Assignment_Statement => 1503, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1513, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1524, - Iir_Kind_Null_Statement => 1528, - Iir_Kind_Assertion_Statement => 1535, - Iir_Kind_Report_Statement => 1541, - Iir_Kind_Wait_Statement => 1549, - Iir_Kind_Variable_Assignment_Statement => 1556, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1563, - Iir_Kind_Return_Statement => 1569, - Iir_Kind_For_Loop_Statement => 1578, - Iir_Kind_While_Loop_Statement => 1587, - Iir_Kind_Next_Statement => 1594, - Iir_Kind_Exit_Statement => 1601, - Iir_Kind_Case_Statement => 1609, - Iir_Kind_Procedure_Call_Statement => 1615, - Iir_Kind_If_Statement => 1625, - Iir_Kind_Elsif => 1631, - Iir_Kind_Character_Literal => 1639, - Iir_Kind_Simple_Name => 1647, - Iir_Kind_Selected_Name => 1656, - Iir_Kind_Operator_Symbol => 1662, - Iir_Kind_Reference_Name => 1666, - Iir_Kind_External_Constant_Name => 1674, - Iir_Kind_External_Signal_Name => 1682, - Iir_Kind_External_Variable_Name => 1691, - Iir_Kind_Selected_By_All_Name => 1697, - Iir_Kind_Parenthesis_Name => 1702, - Iir_Kind_Package_Pathname => 1706, - Iir_Kind_Absolute_Pathname => 1707, - Iir_Kind_Relative_Pathname => 1708, - Iir_Kind_Pathname_Element => 1713, - Iir_Kind_Base_Attribute => 1715, - Iir_Kind_Subtype_Attribute => 1720, - Iir_Kind_Element_Attribute => 1725, - Iir_Kind_Left_Type_Attribute => 1730, - Iir_Kind_Right_Type_Attribute => 1735, - Iir_Kind_High_Type_Attribute => 1740, - Iir_Kind_Low_Type_Attribute => 1745, - Iir_Kind_Ascending_Type_Attribute => 1750, - Iir_Kind_Image_Attribute => 1756, - Iir_Kind_Value_Attribute => 1762, - Iir_Kind_Pos_Attribute => 1768, - Iir_Kind_Val_Attribute => 1774, - Iir_Kind_Succ_Attribute => 1780, - Iir_Kind_Pred_Attribute => 1786, - Iir_Kind_Leftof_Attribute => 1792, - Iir_Kind_Rightof_Attribute => 1798, - Iir_Kind_Delayed_Attribute => 1807, - Iir_Kind_Stable_Attribute => 1816, - Iir_Kind_Quiet_Attribute => 1825, - Iir_Kind_Transaction_Attribute => 1834, - Iir_Kind_Event_Attribute => 1838, - Iir_Kind_Active_Attribute => 1842, - Iir_Kind_Last_Event_Attribute => 1846, - Iir_Kind_Last_Active_Attribute => 1850, - Iir_Kind_Last_Value_Attribute => 1854, - Iir_Kind_Driving_Attribute => 1858, - Iir_Kind_Driving_Value_Attribute => 1862, - Iir_Kind_Behavior_Attribute => 1862, - Iir_Kind_Structure_Attribute => 1862, - Iir_Kind_Simple_Name_Attribute => 1869, - Iir_Kind_Instance_Name_Attribute => 1874, - Iir_Kind_Path_Name_Attribute => 1879, - Iir_Kind_Left_Array_Attribute => 1886, - Iir_Kind_Right_Array_Attribute => 1893, - Iir_Kind_High_Array_Attribute => 1900, - Iir_Kind_Low_Array_Attribute => 1907, - Iir_Kind_Length_Array_Attribute => 1914, - Iir_Kind_Ascending_Array_Attribute => 1921, - Iir_Kind_Range_Array_Attribute => 1928, - Iir_Kind_Reverse_Range_Array_Attribute => 1935, - Iir_Kind_Attribute_Name => 1944 + Iir_Kind_Psl_Restrict_Directive => 1422, + Iir_Kind_Block_Statement => 1436, + Iir_Kind_If_Generate_Statement => 1447, + Iir_Kind_Case_Generate_Statement => 1456, + Iir_Kind_For_Generate_Statement => 1465, + Iir_Kind_Component_Instantiation_Statement => 1476, + Iir_Kind_Psl_Default_Clock => 1480, + Iir_Kind_Simple_Simultaneous_Statement => 1487, + Iir_Kind_Generate_Statement_Body => 1498, + Iir_Kind_If_Generate_Else_Clause => 1504, + Iir_Kind_Simple_Signal_Assignment_Statement => 1514, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1524, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1535, + Iir_Kind_Null_Statement => 1539, + Iir_Kind_Assertion_Statement => 1546, + Iir_Kind_Report_Statement => 1552, + Iir_Kind_Wait_Statement => 1560, + Iir_Kind_Variable_Assignment_Statement => 1567, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1574, + Iir_Kind_Return_Statement => 1580, + Iir_Kind_For_Loop_Statement => 1589, + Iir_Kind_While_Loop_Statement => 1598, + Iir_Kind_Next_Statement => 1605, + Iir_Kind_Exit_Statement => 1612, + Iir_Kind_Case_Statement => 1620, + Iir_Kind_Procedure_Call_Statement => 1626, + Iir_Kind_If_Statement => 1636, + Iir_Kind_Elsif => 1642, + Iir_Kind_Character_Literal => 1650, + Iir_Kind_Simple_Name => 1658, + Iir_Kind_Selected_Name => 1667, + Iir_Kind_Operator_Symbol => 1673, + Iir_Kind_Reference_Name => 1677, + Iir_Kind_External_Constant_Name => 1685, + Iir_Kind_External_Signal_Name => 1693, + Iir_Kind_External_Variable_Name => 1702, + Iir_Kind_Selected_By_All_Name => 1708, + Iir_Kind_Parenthesis_Name => 1713, + Iir_Kind_Package_Pathname => 1717, + Iir_Kind_Absolute_Pathname => 1718, + Iir_Kind_Relative_Pathname => 1719, + Iir_Kind_Pathname_Element => 1724, + Iir_Kind_Base_Attribute => 1726, + Iir_Kind_Subtype_Attribute => 1731, + Iir_Kind_Element_Attribute => 1736, + Iir_Kind_Left_Type_Attribute => 1741, + Iir_Kind_Right_Type_Attribute => 1746, + Iir_Kind_High_Type_Attribute => 1751, + Iir_Kind_Low_Type_Attribute => 1756, + Iir_Kind_Ascending_Type_Attribute => 1761, + Iir_Kind_Image_Attribute => 1767, + Iir_Kind_Value_Attribute => 1773, + Iir_Kind_Pos_Attribute => 1779, + Iir_Kind_Val_Attribute => 1785, + Iir_Kind_Succ_Attribute => 1791, + Iir_Kind_Pred_Attribute => 1797, + Iir_Kind_Leftof_Attribute => 1803, + Iir_Kind_Rightof_Attribute => 1809, + Iir_Kind_Delayed_Attribute => 1818, + Iir_Kind_Stable_Attribute => 1827, + Iir_Kind_Quiet_Attribute => 1836, + Iir_Kind_Transaction_Attribute => 1845, + Iir_Kind_Event_Attribute => 1849, + Iir_Kind_Active_Attribute => 1853, + Iir_Kind_Last_Event_Attribute => 1857, + Iir_Kind_Last_Active_Attribute => 1861, + Iir_Kind_Last_Value_Attribute => 1865, + Iir_Kind_Driving_Attribute => 1869, + Iir_Kind_Driving_Value_Attribute => 1873, + Iir_Kind_Behavior_Attribute => 1873, + Iir_Kind_Structure_Attribute => 1873, + Iir_Kind_Simple_Name_Attribute => 1880, + Iir_Kind_Instance_Name_Attribute => 1885, + Iir_Kind_Path_Name_Attribute => 1890, + Iir_Kind_Left_Array_Attribute => 1897, + Iir_Kind_Right_Array_Attribute => 1904, + Iir_Kind_High_Array_Attribute => 1911, + Iir_Kind_Low_Array_Attribute => 1918, + Iir_Kind_Length_Array_Attribute => 1925, + Iir_Kind_Ascending_Array_Attribute => 1932, + Iir_Kind_Range_Array_Attribute => 1939, + Iir_Kind_Reverse_Range_Array_Attribute => 1946, + Iir_Kind_Attribute_Name => 1955 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -7380,6 +7395,7 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Concurrent_Procedure_Call_Statement | Iir_Kind_Psl_Assert_Statement | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive | Iir_Kind_Block_Statement | Iir_Kind_If_Generate_Statement | Iir_Kind_Case_Generate_Statement @@ -8158,6 +8174,7 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Concurrent_Procedure_Call_Statement | Iir_Kind_Psl_Assert_Statement | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive | Iir_Kind_Block_Statement | Iir_Kind_If_Generate_Statement | Iir_Kind_Case_Generate_Statement @@ -8208,6 +8225,7 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Concurrent_Procedure_Call_Statement | Iir_Kind_Psl_Assert_Statement | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive | Iir_Kind_Block_Statement | Iir_Kind_If_Generate_Statement | Iir_Kind_Case_Generate_Statement @@ -8293,6 +8311,7 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Concurrent_Procedure_Call_Statement | Iir_Kind_Psl_Assert_Statement | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive | Iir_Kind_Block_Statement | Iir_Kind_If_Generate_Statement | Iir_Kind_Case_Generate_Statement @@ -8759,7 +8778,8 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Concurrent_Assertion_Statement | Iir_Kind_Concurrent_Procedure_Call_Statement | Iir_Kind_Psl_Assert_Statement - | Iir_Kind_Psl_Cover_Statement => + | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => return True; when others => return False; @@ -9375,6 +9395,7 @@ package body Vhdl.Nodes_Meta is | Iir_Kind_Concurrent_Procedure_Call_Statement | Iir_Kind_Psl_Assert_Statement | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive | Iir_Kind_Block_Statement | Iir_Kind_If_Generate_Statement | Iir_Kind_Case_Generate_Statement @@ -10731,7 +10752,13 @@ package body Vhdl.Nodes_Meta is function Has_Psl_Sequence (K : Iir_Kind) return Boolean is begin - return K = Iir_Kind_Psl_Cover_Statement; + case K is + when Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => + return True; + when others => + return False; + end case; end Has_Psl_Sequence; function Has_Psl_Declaration (K : Iir_Kind) return Boolean is @@ -10761,7 +10788,8 @@ package body Vhdl.Nodes_Meta is when Iir_Kind_Psl_Declaration | Iir_Kind_Psl_Endpoint_Declaration | Iir_Kind_Psl_Assert_Statement - | Iir_Kind_Psl_Cover_Statement => + | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => return True; when others => return False; @@ -10774,7 +10802,8 @@ package body Vhdl.Nodes_Meta is when Iir_Kind_Psl_Declaration | Iir_Kind_Psl_Endpoint_Declaration | Iir_Kind_Psl_Assert_Statement - | Iir_Kind_Psl_Cover_Statement => + | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => return True; when others => return False; @@ -10786,7 +10815,8 @@ package body Vhdl.Nodes_Meta is case K is when Iir_Kind_Psl_Endpoint_Declaration | Iir_Kind_Psl_Assert_Statement - | Iir_Kind_Psl_Cover_Statement => + | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => return True; when others => return False; @@ -10798,7 +10828,8 @@ package body Vhdl.Nodes_Meta is case K is when Iir_Kind_Psl_Endpoint_Declaration | Iir_Kind_Psl_Assert_Statement - | Iir_Kind_Psl_Cover_Statement => + | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => return True; when others => return False; @@ -10810,7 +10841,8 @@ package body Vhdl.Nodes_Meta is case K is when Iir_Kind_Psl_Endpoint_Declaration | Iir_Kind_Psl_Assert_Statement - | Iir_Kind_Psl_Cover_Statement => + | Iir_Kind_Psl_Cover_Statement + | Iir_Kind_Psl_Restrict_Directive => return True; when others => return False; -- cgit v1.2.3