aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/iirs.ads2
-rw-r--r--src/vhdl/nodes_meta.adb164
-rw-r--r--src/vhdl/parse.adb5
-rw-r--r--src/vhdl/sem_psl.adb13
4 files changed, 100 insertions, 84 deletions
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index 403f63fd1..87b25804f 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -2577,6 +2577,8 @@ package Iirs is
-- True if at least one of the NFA edge has the EOS flag.
-- Get/Set_PSL_EOS_Flag (Flag1)
--
+ -- Get/Set_Postponed_Flag (Flag3)
+ --
-- Get/Set_Visible_Flag (Flag4)
-- Iir_Kind_Component_Instantiation_Statement (Medium)
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index ed62794cb..8145a986d 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -3507,6 +3507,7 @@ package body Nodes_Meta is
Field_PSL_NFA,
Field_PSL_Nbr_States,
Field_PSL_EOS_Flag,
+ Field_Postponed_Flag,
Field_Visible_Flag,
Field_PSL_Clock_Sensitivity,
Field_Chain,
@@ -3520,6 +3521,7 @@ package body Nodes_Meta is
Field_PSL_NFA,
Field_PSL_Nbr_States,
Field_PSL_EOS_Flag,
+ Field_Postponed_Flag,
Field_Visible_Flag,
Field_PSL_Clock_Sensitivity,
Field_Chain,
@@ -4270,86 +4272,86 @@ package body Nodes_Meta is
Iir_Kind_Concurrent_Selected_Signal_Assignment => 1228,
Iir_Kind_Concurrent_Assertion_Statement => 1236,
Iir_Kind_Psl_Default_Clock => 1240,
- Iir_Kind_Psl_Assert_Statement => 1252,
- Iir_Kind_Psl_Cover_Statement => 1264,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1271,
- Iir_Kind_Block_Statement => 1284,
- Iir_Kind_If_Generate_Statement => 1294,
- Iir_Kind_Case_Generate_Statement => 1303,
- Iir_Kind_For_Generate_Statement => 1312,
- Iir_Kind_Component_Instantiation_Statement => 1322,
- Iir_Kind_Simple_Simultaneous_Statement => 1329,
- Iir_Kind_Generate_Statement_Body => 1340,
- Iir_Kind_If_Generate_Else_Clause => 1345,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1354,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1363,
- Iir_Kind_Null_Statement => 1367,
- Iir_Kind_Assertion_Statement => 1374,
- Iir_Kind_Report_Statement => 1380,
- Iir_Kind_Wait_Statement => 1387,
- Iir_Kind_Variable_Assignment_Statement => 1393,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1399,
- Iir_Kind_Return_Statement => 1405,
- Iir_Kind_For_Loop_Statement => 1414,
- Iir_Kind_While_Loop_Statement => 1422,
- Iir_Kind_Next_Statement => 1428,
- Iir_Kind_Exit_Statement => 1434,
- Iir_Kind_Case_Statement => 1442,
- Iir_Kind_Procedure_Call_Statement => 1448,
- Iir_Kind_If_Statement => 1457,
- Iir_Kind_Elsif => 1462,
- Iir_Kind_Character_Literal => 1469,
- Iir_Kind_Simple_Name => 1476,
- Iir_Kind_Selected_Name => 1484,
- Iir_Kind_Operator_Symbol => 1489,
- Iir_Kind_Selected_By_All_Name => 1494,
- Iir_Kind_Parenthesis_Name => 1498,
- Iir_Kind_External_Constant_Name => 1507,
- Iir_Kind_External_Signal_Name => 1516,
- Iir_Kind_External_Variable_Name => 1525,
- Iir_Kind_Package_Pathname => 1528,
- Iir_Kind_Absolute_Pathname => 1529,
- Iir_Kind_Relative_Pathname => 1530,
- Iir_Kind_Pathname_Element => 1534,
- Iir_Kind_Base_Attribute => 1536,
- Iir_Kind_Left_Type_Attribute => 1541,
- Iir_Kind_Right_Type_Attribute => 1546,
- Iir_Kind_High_Type_Attribute => 1551,
- Iir_Kind_Low_Type_Attribute => 1556,
- Iir_Kind_Ascending_Type_Attribute => 1561,
- Iir_Kind_Image_Attribute => 1567,
- Iir_Kind_Value_Attribute => 1573,
- Iir_Kind_Pos_Attribute => 1579,
- Iir_Kind_Val_Attribute => 1585,
- Iir_Kind_Succ_Attribute => 1591,
- Iir_Kind_Pred_Attribute => 1597,
- Iir_Kind_Leftof_Attribute => 1603,
- Iir_Kind_Rightof_Attribute => 1609,
- Iir_Kind_Delayed_Attribute => 1617,
- Iir_Kind_Stable_Attribute => 1625,
- Iir_Kind_Quiet_Attribute => 1633,
- Iir_Kind_Transaction_Attribute => 1641,
- Iir_Kind_Event_Attribute => 1645,
- Iir_Kind_Active_Attribute => 1649,
- Iir_Kind_Last_Event_Attribute => 1653,
- Iir_Kind_Last_Active_Attribute => 1657,
- Iir_Kind_Last_Value_Attribute => 1661,
- Iir_Kind_Driving_Attribute => 1665,
- Iir_Kind_Driving_Value_Attribute => 1669,
- Iir_Kind_Behavior_Attribute => 1669,
- Iir_Kind_Structure_Attribute => 1669,
- Iir_Kind_Simple_Name_Attribute => 1676,
- Iir_Kind_Instance_Name_Attribute => 1681,
- Iir_Kind_Path_Name_Attribute => 1686,
- Iir_Kind_Left_Array_Attribute => 1693,
- Iir_Kind_Right_Array_Attribute => 1700,
- Iir_Kind_High_Array_Attribute => 1707,
- Iir_Kind_Low_Array_Attribute => 1714,
- Iir_Kind_Length_Array_Attribute => 1721,
- Iir_Kind_Ascending_Array_Attribute => 1728,
- Iir_Kind_Range_Array_Attribute => 1735,
- Iir_Kind_Reverse_Range_Array_Attribute => 1742,
- Iir_Kind_Attribute_Name => 1750
+ Iir_Kind_Psl_Assert_Statement => 1253,
+ Iir_Kind_Psl_Cover_Statement => 1266,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1273,
+ Iir_Kind_Block_Statement => 1286,
+ Iir_Kind_If_Generate_Statement => 1296,
+ Iir_Kind_Case_Generate_Statement => 1305,
+ Iir_Kind_For_Generate_Statement => 1314,
+ Iir_Kind_Component_Instantiation_Statement => 1324,
+ Iir_Kind_Simple_Simultaneous_Statement => 1331,
+ Iir_Kind_Generate_Statement_Body => 1342,
+ Iir_Kind_If_Generate_Else_Clause => 1347,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1356,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1365,
+ Iir_Kind_Null_Statement => 1369,
+ Iir_Kind_Assertion_Statement => 1376,
+ Iir_Kind_Report_Statement => 1382,
+ Iir_Kind_Wait_Statement => 1389,
+ Iir_Kind_Variable_Assignment_Statement => 1395,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1401,
+ Iir_Kind_Return_Statement => 1407,
+ Iir_Kind_For_Loop_Statement => 1416,
+ Iir_Kind_While_Loop_Statement => 1424,
+ Iir_Kind_Next_Statement => 1430,
+ Iir_Kind_Exit_Statement => 1436,
+ Iir_Kind_Case_Statement => 1444,
+ Iir_Kind_Procedure_Call_Statement => 1450,
+ Iir_Kind_If_Statement => 1459,
+ Iir_Kind_Elsif => 1464,
+ Iir_Kind_Character_Literal => 1471,
+ Iir_Kind_Simple_Name => 1478,
+ Iir_Kind_Selected_Name => 1486,
+ Iir_Kind_Operator_Symbol => 1491,
+ Iir_Kind_Selected_By_All_Name => 1496,
+ Iir_Kind_Parenthesis_Name => 1500,
+ Iir_Kind_External_Constant_Name => 1509,
+ Iir_Kind_External_Signal_Name => 1518,
+ Iir_Kind_External_Variable_Name => 1527,
+ Iir_Kind_Package_Pathname => 1530,
+ Iir_Kind_Absolute_Pathname => 1531,
+ Iir_Kind_Relative_Pathname => 1532,
+ Iir_Kind_Pathname_Element => 1536,
+ Iir_Kind_Base_Attribute => 1538,
+ Iir_Kind_Left_Type_Attribute => 1543,
+ Iir_Kind_Right_Type_Attribute => 1548,
+ Iir_Kind_High_Type_Attribute => 1553,
+ Iir_Kind_Low_Type_Attribute => 1558,
+ Iir_Kind_Ascending_Type_Attribute => 1563,
+ Iir_Kind_Image_Attribute => 1569,
+ Iir_Kind_Value_Attribute => 1575,
+ Iir_Kind_Pos_Attribute => 1581,
+ Iir_Kind_Val_Attribute => 1587,
+ Iir_Kind_Succ_Attribute => 1593,
+ Iir_Kind_Pred_Attribute => 1599,
+ Iir_Kind_Leftof_Attribute => 1605,
+ Iir_Kind_Rightof_Attribute => 1611,
+ Iir_Kind_Delayed_Attribute => 1619,
+ Iir_Kind_Stable_Attribute => 1627,
+ Iir_Kind_Quiet_Attribute => 1635,
+ Iir_Kind_Transaction_Attribute => 1643,
+ Iir_Kind_Event_Attribute => 1647,
+ Iir_Kind_Active_Attribute => 1651,
+ Iir_Kind_Last_Event_Attribute => 1655,
+ Iir_Kind_Last_Active_Attribute => 1659,
+ Iir_Kind_Last_Value_Attribute => 1663,
+ Iir_Kind_Driving_Attribute => 1667,
+ Iir_Kind_Driving_Value_Attribute => 1671,
+ Iir_Kind_Behavior_Attribute => 1671,
+ Iir_Kind_Structure_Attribute => 1671,
+ Iir_Kind_Simple_Name_Attribute => 1678,
+ Iir_Kind_Instance_Name_Attribute => 1683,
+ Iir_Kind_Path_Name_Attribute => 1688,
+ Iir_Kind_Left_Array_Attribute => 1695,
+ Iir_Kind_Right_Array_Attribute => 1702,
+ Iir_Kind_High_Array_Attribute => 1709,
+ Iir_Kind_Low_Array_Attribute => 1716,
+ Iir_Kind_Length_Array_Attribute => 1723,
+ Iir_Kind_Ascending_Array_Attribute => 1730,
+ Iir_Kind_Range_Array_Attribute => 1737,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1744,
+ Iir_Kind_Attribute_Name => 1752
);
function Get_Fields (K : Iir_Kind) return Fields_Array
@@ -8104,6 +8106,8 @@ package body Nodes_Meta is
| Iir_Kind_Concurrent_Conditional_Signal_Assignment
| Iir_Kind_Concurrent_Selected_Signal_Assignment
| Iir_Kind_Concurrent_Assertion_Statement
+ | Iir_Kind_Psl_Assert_Statement
+ | Iir_Kind_Psl_Cover_Statement
| Iir_Kind_Concurrent_Procedure_Call_Statement =>
return True;
when others =>
diff --git a/src/vhdl/parse.adb b/src/vhdl/parse.adb
index aeed1c507..a3b9a52b0 100644
--- a/src/vhdl/parse.adb
+++ b/src/vhdl/parse.adb
@@ -7155,6 +7155,11 @@ package body Parse is
begin
Res := Create_Iir (Iir_Kind_Psl_Assert_Statement);
+ -- Accept PSL tokens
+ if Flags.Vhdl_Std >= Vhdl_08 then
+ Scanner.Flag_Psl := True;
+ end if;
+
-- Skip 'assert'
Scan;
diff --git a/src/vhdl/sem_psl.adb b/src/vhdl/sem_psl.adb
index e537dc8a6..5e5b3d3c5 100644
--- a/src/vhdl/sem_psl.adb
+++ b/src/vhdl/sem_psl.adb
@@ -579,7 +579,7 @@ package body Sem_Psl is
Set_Label (Res, Get_Label (Stmt));
Set_Severity_Expression (Res, Get_Severity_Expression (Stmt));
Set_Report_Expression (Res, Get_Report_Expression (Stmt));
- Set_Postponed_Flag (Res, False);
+ Set_Postponed_Flag (Res, Get_Postponed_Flag (Stmt));
return Res;
end Rewrite_As_Concurrent_Assertion;
@@ -617,6 +617,8 @@ package body Sem_Psl is
Prop : Node;
Res : Iir;
begin
+ pragma Assert (Get_Kind (Stmt) = Iir_Kind_Psl_Assert_Statement);
+
-- Sem report and severity expressions.
Sem_Report_Statement (Stmt);
@@ -624,9 +626,7 @@ package body Sem_Psl is
Prop := Sem_Property (Prop, True);
Set_Psl_Property (Stmt, Prop);
- if Get_Kind (Stmt) = Iir_Kind_Psl_Assert_Statement
- and then Is_Boolean_Assertion (Prop)
- then
+ if 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);
@@ -634,6 +634,11 @@ package body Sem_Psl is
return Res;
end if;
+ if Get_Postponed_Flag (Stmt) then
+ Error_Msg_Sem (+Stmt, "PSL assertions cannot be postponed");
+ Set_Postponed_Flag (Stmt, False);
+ end if;
+
-- Properties must be clocked.
Sem_Psl_Directive_Clock (Stmt, Prop);
Set_Psl_Property (Stmt, Prop);