aboutsummaryrefslogtreecommitdiffstats
path: root/src/psl/psl-nodes.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/psl/psl-nodes.ads')
-rw-r--r--src/psl/psl-nodes.ads563
1 files changed, 563 insertions, 0 deletions
diff --git a/src/psl/psl-nodes.ads b/src/psl/psl-nodes.ads
new file mode 100644
index 000000000..241091805
--- /dev/null
+++ b/src/psl/psl-nodes.ads
@@ -0,0 +1,563 @@
+with Types; use Types;
+
+package PSL.Nodes is
+ type Nkind is
+ (
+ N_Error,
+
+ N_Vmode,
+ N_Vunit,
+ N_Vprop,
+
+ N_Hdl_Mod_Name,
+
+ N_Assert_Directive,
+ N_Property_Declaration,
+ N_Sequence_Declaration,
+ N_Endpoint_Declaration,
+
+ -- Formal parameters
+ N_Const_Parameter,
+ N_Boolean_Parameter,
+ N_Property_Parameter,
+ N_Sequence_Parameter,
+
+ N_Sequence_Instance,
+ N_Endpoint_Instance,
+ N_Property_Instance,
+ N_Actual,
+
+ N_Clock_Event,
+
+ -- Properties
+ N_Always,
+ N_Never,
+ N_Eventually,
+ N_Strong, -- !
+ N_Imp_Seq, -- |=>
+ N_Overlap_Imp_Seq, -- |->
+ N_Log_Imp_Prop, -- ->
+ N_Next,
+ N_Next_A,
+ N_Next_E,
+ N_Next_Event,
+ N_Next_Event_A,
+ N_Next_Event_E,
+ N_Abort,
+ N_Until,
+ N_Before,
+ N_Or_Prop,
+ N_And_Prop,
+
+ -- Sequences/SERE.
+ N_Braced_SERE,
+ N_Concat_SERE,
+ N_Fusion_SERE,
+ N_Within_SERE,
+
+ N_Match_And_Seq, -- &&
+ N_And_Seq,
+ N_Or_Seq,
+
+ N_Star_Repeat_Seq,
+ N_Goto_Repeat_Seq,
+ N_Plus_Repeat_Seq, -- [+]
+ N_Equal_Repeat_Seq,
+
+ -- Boolean layer.
+ N_Not_Bool,
+ N_And_Bool,
+ N_Or_Bool,
+ N_Imp_Bool, -- ->
+ N_HDL_Expr,
+ N_False,
+ N_True,
+ N_EOS,
+
+ N_Name,
+ N_Name_Decl,
+ N_Number
+ );
+ for Nkind'Size use 8;
+
+ subtype N_Booleans is Nkind range N_Not_Bool .. N_True;
+ subtype N_Sequences is Nkind range N_Braced_SERE .. N_Equal_Repeat_Seq;
+
+ type PSL_Types is
+ (
+ Type_Unknown,
+ Type_Boolean,
+ Type_Bit,
+ Type_Bitvector,
+ Type_Numeric,
+ Type_String,
+ Type_Sequence,
+ Type_Property
+ );
+
+ -- Within CSE, it is useful to know which sub-expression already compose
+ -- an expression.
+ -- Eg: suppose we want to build A and B.
+ -- Each sub-expressions of B is marked either as Present_Pos or
+ -- Present_Neg.
+ -- If A is already present, return either B or FALSE.
+ -- Otherwise, build the node.
+ type PSL_Presence_Kind is
+ (
+ Present_Unknown,
+ Present_Pos,
+ Present_Neg
+ );
+
+ -- Start of nodes:
+
+ -- N_Error (Short)
+
+ -- N_Vmode (Short)
+ -- N_Vunit (Short)
+ -- N_Vprop (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_Instance (Field3)
+ --
+ -- Get/Set_Item_Chain (Field4)
+
+ -- N_Hdl_Mod_Name (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Prefix (Field2)
+
+ -- N_Assert_Directive (Short)
+ --
+ -- Get/Set_Label (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_String (Field3)
+ --
+ -- Get/Set_Property (Field4)
+ --
+ -- Get/Set_NFA (Field5)
+
+ -- N_Property_Declaration (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_Global_Clock (Field3)
+ --
+ -- Get/Set_Property (Field4)
+ --
+ -- Get/Set_Parameter_List (Field5)
+
+ -- N_Sequence_Declaration (Short)
+ -- N_Endpoint_Declaration (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_Sequence (Field3)
+ --
+ -- Get/Set_Parameter_List (Field5)
+
+ -- N_Const_Parameter (Short)
+ -- N_Boolean_Parameter (Short)
+ -- N_Property_Parameter (Short)
+ -- N_Sequence_Parameter (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- -- Current actual parameter.
+ -- Get/Set_Actual (Field3)
+
+ -- N_Sequence_Instance (Short)
+ -- N_Endpoint_Instance (Short)
+ -- N_Property_Instance (Short)
+ --
+ -- Get/Set_Declaration (Field1) [Flat]
+ --
+ -- Get/Set_Association_Chain (Field2)
+
+ -- N_Actual (Short)
+ --
+ -- Get/Set_Chain (Field2)
+ --
+ -- Get/Set_Actual (Field3)
+ --
+ -- Get/Set_Formal (Field4)
+
+ -- N_Clock_Event (Short)
+ --
+ -- Get/Set_Property (Field4)
+ --
+ -- Get/Set_Boolean (Field3)
+
+ -- N_Always (Short)
+ -- N_Never (Short)
+ -- N_Eventually (Short)
+ -- N_Strong (Short)
+ --
+ -- Get/Set_Property (Field4)
+
+ -- N_Next (Short)
+ --
+ -- Get/Set_Strong_Flag (Flag1)
+ --
+ -- Get/Set_Number (Field1)
+ --
+ -- Get/Set_Property (Field4)
+
+ -- N_Name (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Decl (Field2)
+
+ -- N_Name_Decl (Short)
+ --
+ -- Get/Set_Identifier (Field1)
+ --
+ -- Get/Set_Chain (Field2)
+
+ -- N_Number (Short)
+ --
+ -- Get/Set_Value (Field1)
+
+ -- N_Braced_SERE (Short)
+ --
+ -- Get/Set_SERE (Field1)
+
+ -- N_Concat_SERE (Short)
+ -- N_Fusion_SERE (Short)
+ -- N_Within_SERE (Short)
+ --
+ -- Get/Set_Left (Field1)
+ --
+ -- Get/Set_Right (Field2)
+
+ -- N_Star_Repeat_Seq (Short)
+ -- N_Goto_Repeat_Seq (Short)
+ -- N_Equal_Repeat_Seq (Short)
+ --
+ -- Note: can be null_node for star_repeat_seq.
+ -- Get/Set_Sequence (Field3)
+ --
+ -- Get/Set_Low_Bound (Field1)
+ --
+ -- Get/Set_High_Bound (Field2)
+
+ -- N_Plus_Repeat_Seq (Short)
+ --
+ -- Note: can be null_node.
+ -- Get/Set_Sequence (Field3)
+
+ -- N_Match_And_Seq (Short)
+ -- N_And_Seq (Short)
+ -- N_Or_Seq (Short)
+ --
+ -- Get/Set_Left (Field1)
+ --
+ -- Get/Set_Right (Field2)
+
+ -- N_Imp_Seq (Short)
+ -- N_Overlap_Imp_Seq (Short)
+ --
+ -- Get/Set_Sequence (Field3)
+ --
+ -- Get/Set_Property (Field4)
+
+ -- N_Log_Imp_Prop (Short)
+ --
+ -- Get/Set_Left (Field1)
+ --
+ -- Get/Set_Right (Field2)
+
+ -- N_Next_A (Short)
+ -- N_Next_E (Short)
+ --
+ -- Get/Set_Strong_Flag (Flag1)
+ --
+ -- Get/Set_Low_Bound (Field1)
+ --
+ -- Get/Set_High_Bound (Field2)
+ --
+ -- Get/Set_Property (Field4)
+
+ -- N_Next_Event (Short)
+ --
+ -- Get/Set_Strong_Flag (Flag1)
+ --
+ -- Get/Set_Number (Field1)
+ --
+ -- Get/Set_Property (Field4)
+ --
+ -- Get/Set_Boolean (Field3)
+
+ -- N_Or_Prop (Short)
+ -- N_And_Prop (Short)
+ --
+ -- Get/Set_Left (Field1)
+ --
+ -- Get/Set_Right (Field2)
+
+ -- N_Until (Short)
+ -- N_Before (Short)
+ --
+ -- Get/Set_Strong_Flag (Flag1)
+ --
+ -- Get/Set_Inclusive_Flag (Flag2)
+ --
+ -- Get/Set_Left (Field1)
+ --
+ -- Get/Set_Right (Field2)
+
+ -- N_Next_Event_A (Short)
+ -- N_Next_Event_E (Short)
+ --
+ -- Get/Set_Strong_Flag (Flag1)
+ --
+ -- Get/Set_Low_Bound (Field1)
+ --
+ -- Get/Set_High_Bound (Field2)
+ --
+ -- Get/Set_Property (Field4)
+ --
+ -- Get/Set_Boolean (Field3)
+
+ -- N_Abort (Short)
+ --
+ -- Get/Set_Property (Field4)
+ --
+ -- Get/Set_Boolean (Field3)
+
+
+ -- N_HDL_Expr (Short)
+ --
+ -- Get/Set_Presence (State1)
+ --
+ -- Get/Set_HDL_Node (Field1)
+ --
+ -- Get/Set_HDL_Index (Field2)
+ --
+ -- Get/Set_Hash (Field5)
+ --
+ -- Get/Set_Hash_Link (Field6)
+
+ -- N_Not_Bool (Short)
+ --
+ -- Get/Set_Presence (State1)
+ --
+ -- Get/Set_Boolean (Field3)
+ --
+ -- Get/Set_Hash (Field5)
+ --
+ -- Get/Set_Hash_Link (Field6)
+
+ -- N_And_Bool (Short)
+ -- N_Or_Bool (Short)
+ -- N_Imp_Bool (Short)
+ --
+ -- Get/Set_Presence (State1)
+ --
+ -- Get/Set_Left (Field1)
+ --
+ -- Get/Set_Right (Field2)
+ --
+ -- Get/Set_Hash (Field5)
+ --
+ -- Get/Set_Hash_Link (Field6)
+
+ -- N_True (Short)
+ -- N_False (Short)
+
+ -- N_EOS (Short)
+ -- End of simulation.
+ --
+ -- Get/Set_HDL_Index (Field2)
+ --
+ -- Get/Set_Hash (Field5)
+ --
+ -- Get/Set_Hash_Link (Field6)
+
+ -- End of nodes.
+
+ subtype Node is Types.PSL_Node;
+
+ Null_Node : constant Node := 0;
+ False_Node : constant Node := 1;
+ True_Node : constant Node := 2;
+ One_Node : constant Node := 3;
+ EOS_Node : constant Node := 4;
+
+ subtype NFA is Types.PSL_NFA;
+
+ subtype HDL_Node is Types.Int32;
+ HDL_Null : constant HDL_Node := 0;
+
+ procedure Init;
+
+ -- Get the number of the last node.
+ -- To be used to size lateral tables.
+ function Get_Last_Node return Node;
+
+ -- subtype Regs_Type_Node is Node range Reg_Type_Node .. Time_Type_Node;
+
+ function Create_Node (Kind : Nkind) return Node;
+ procedure Free_Node (N : Node);
+
+ -- Return the type of a node.
+ function Get_Psl_Type (N : Node) return PSL_Types;
+
+ -- Field: Location
+ function Get_Location (N : Node) return Location_Type;
+ procedure Set_Location (N : Node; Loc : Location_Type);
+
+ function Get_Kind (N : Node) return Nkind;
+ pragma Inline (Get_Kind);
+
+-- -- Disp: None
+-- -- Field: Field6
+-- function Get_Parent (N : Node) return Node;
+-- procedure Set_Parent (N : Node; Parent : Node);
+
+ -- Disp: Special
+ -- Field: Field1 (conv)
+ function Get_Identifier (N : Node) return Name_Id;
+ procedure Set_Identifier (N : Node; Id : Name_Id);
+
+ -- Disp: Special
+ -- Field: Field1 (conv)
+ function Get_Label (N : Node) return Name_Id;
+ procedure Set_Label (N : Node; Id : Name_Id);
+
+ -- Disp: Chain
+ -- Field: Field2 (conv)
+ function Get_Chain (N : Node) return Node;
+ procedure Set_Chain (N : Node; Chain : Node);
+
+ -- Field: Field3 (conv)
+ function Get_Instance (N : Node) return Node;
+ procedure Set_Instance (N : Node; Instance : Node);
+
+ -- Field: Field2 (conv)
+ function Get_Prefix (N : Node) return Node;
+ procedure Set_Prefix (N : Node; Prefix : Node);
+
+ -- Field: Field4 (conv)
+ function Get_Item_Chain (N : Node) return Node;
+ procedure Set_Item_Chain (N : Node; Item : Node);
+
+ -- Field: Field4 (conv)
+ function Get_Property (N : Node) return Node;
+ procedure Set_Property (N : Node; Property : Node);
+
+ -- Field: Field3 (conv)
+ function Get_String (N : Node) return Node;
+ procedure Set_String (N : Node; Str : Node);
+
+ -- Field: Field1 (conv)
+ function Get_SERE (N : Node) return Node;
+ procedure Set_SERE (N : Node; S : Node);
+
+ -- Field: Field1 (conv)
+ function Get_Left (N : Node) return Node;
+ procedure Set_Left (N : Node; S : Node);
+
+ -- Field: Field2 (conv)
+ function Get_Right (N : Node) return Node;
+ procedure Set_Right (N : Node; S : Node);
+
+ -- Field: Field3 (conv)
+ function Get_Sequence (N : Node) return Node;
+ procedure Set_Sequence (N : Node; S : Node);
+
+ -- Field: Flag1
+ function Get_Strong_Flag (N : Node) return Boolean;
+ procedure Set_Strong_Flag (N : Node; B : Boolean);
+
+ -- Field: Flag2
+ function Get_Inclusive_Flag (N : Node) return Boolean;
+ procedure Set_Inclusive_Flag (N : Node; B : Boolean);
+
+ -- Field: Field1 (conv)
+ function Get_Low_Bound (N : Node) return Node;
+ procedure Set_Low_Bound (N : Node; S : Node);
+
+ -- Field: Field2 (conv)
+ function Get_High_Bound (N : Node) return Node;
+ procedure Set_High_Bound (N : Node; S : Node);
+
+ -- Field: Field1 (conv)
+ function Get_Number (N : Node) return Node;
+ procedure Set_Number (N : Node; S : Node);
+
+ -- Field: Field1 (uc)
+ function Get_Value (N : Node) return Uns32;
+ procedure Set_Value (N : Node; Val : Uns32);
+
+ -- Field: Field3 (conv)
+ function Get_Boolean (N : Node) return Node;
+ procedure Set_Boolean (N : Node; B : Node);
+
+ -- Field: Field2 (conv)
+ function Get_Decl (N : Node) return Node;
+ procedure Set_Decl (N : Node; D : Node);
+
+ -- Field: Field1 (conv)
+ function Get_HDL_Node (N : Node) return HDL_Node;
+ procedure Set_HDL_Node (N : Node; H : HDL_Node);
+
+ -- Field: Field5 (uc)
+ function Get_Hash (N : Node) return Uns32;
+ procedure Set_Hash (N : Node; E : Uns32);
+ pragma Inline (Get_Hash);
+
+ -- Field: Field6 (conv)
+ function Get_Hash_Link (N : Node) return Node;
+ procedure Set_Hash_Link (N : Node; E : Node);
+ pragma Inline (Get_Hash_Link);
+
+ -- Field: Field2
+ function Get_HDL_Index (N : Node) return Int32;
+ procedure Set_HDL_Index (N : Node; Idx : Int32);
+
+ -- Field: State1 (pos)
+ function Get_Presence (N : Node) return PSL_Presence_Kind;
+ procedure Set_Presence (N : Node; P : PSL_Presence_Kind);
+
+ -- Field: Field5 (uc)
+ function Get_NFA (N : Node) return NFA;
+ procedure Set_NFA (N : Node; P : NFA);
+
+ -- Field: Field5 (conv)
+ function Get_Parameter_List (N : Node) return Node;
+ procedure Set_Parameter_List (N : Node; E : Node);
+
+ -- Field: Field3 (conv)
+ function Get_Actual (N : Node) return Node;
+ procedure Set_Actual (N : Node; E : Node);
+
+ -- Field: Field4 (conv)
+ function Get_Formal (N : Node) return Node;
+ procedure Set_Formal (N : Node; E : Node);
+
+ -- Field: Field1 (conv)
+ function Get_Declaration (N : Node) return Node;
+ procedure Set_Declaration (N : Node; Decl : Node);
+
+ -- Field: Field2 (conv)
+ function Get_Association_Chain (N : Node) return Node;
+ procedure Set_Association_Chain (N : Node; Chain : Node);
+
+ -- Field: Field3 (conv)
+ function Get_Global_Clock (N : Node) return Node;
+ procedure Set_Global_Clock (N : Node; Clock : Node);
+end PSL.Nodes;