aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/vhdl-std_package.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhdl/vhdl-std_package.adb')
-rw-r--r--src/vhdl/vhdl-std_package.adb84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/vhdl/vhdl-std_package.adb b/src/vhdl/vhdl-std_package.adb
index ed68c4ae9..d080327ff 100644
--- a/src/vhdl/vhdl-std_package.adb
+++ b/src/vhdl/vhdl-std_package.adb
@@ -964,6 +964,69 @@ package body Vhdl.Std_Package is
end if;
end;
+ -- AMS-VHDL:
+ -- type DOMAIN_TYPE is
+ -- (QUIESCENT_DOMAIN, TIME_DOMAIN, FREQUENCY_DOMAIN);
+ if AMS_Vhdl then
+ Domain_Type_Type_Definition :=
+ Create_Std_Iir (Iir_Kind_Enumeration_Type_Definition);
+ Set_Base_Type (Domain_Type_Type_Definition,
+ Domain_Type_Type_Definition);
+ Set_Enumeration_Literal_List
+ (Domain_Type_Type_Definition, Create_Iir_Flist (3));
+
+ Domain_Type_Quiescent_Domain := Create_Std_Literal
+ (Name_Quiescent_Domain, 0, Domain_Type_Type_Definition);
+ Domain_Type_Time_Domain := Create_Std_Literal
+ (Name_Time_Domain, 1, Domain_Type_Type_Definition);
+ Domain_Type_Frequency_Domain := Create_Std_Literal
+ (Name_Frequency_Domain, 2, Domain_Type_Type_Definition);
+ Set_Type_Staticness (Domain_Type_Type_Definition, Locally);
+ Set_Signal_Type_Flag (Domain_Type_Type_Definition, True);
+ Set_Has_Signal_Flag (Domain_Type_Type_Definition, True);
+
+ -- type domain_type is
+ Create_Std_Type
+ (Domain_Type_Type_Declaration, Domain_Type_Type_Definition,
+ Name_Domain_Type);
+
+ Utils.Create_Range_Constraint_For_Enumeration_Type
+ (Domain_Type_Type_Definition);
+ Add_Implicit_Operations (Domain_Type_Type_Declaration);
+
+ -- signal DOMAIN : DOMAIN_TYPE := QUIESCENT_DOMAIN;
+ declare
+ Init : Iir;
+ begin
+ Domain_Signal := Create_Std_Decl (Iir_Kind_Signal_Declaration);
+ Set_Std_Identifier (Domain_Signal, Std_Names.Name_Domain);
+ Set_Type (Domain_Signal, Domain_Type_Type_Definition);
+ Set_Subtype_Indication
+ (Domain_Signal,
+ Create_Std_Type_Mark (Domain_Type_Type_Declaration));
+ Set_Expr_Staticness (Domain_Signal, None);
+ Set_Name_Staticness (Domain_Signal, Locally);
+
+ Init := Create_Std_Iir (Iir_Kind_Simple_Name);
+ Set_Identifier (Init, Name_Quiescent_Domain);
+ Set_Named_Entity (Init, Domain_Type_Quiescent_Domain);
+ Set_Type (Init, Domain_Type_Type_Definition);
+ Set_Expr_Staticness (Init, Locally);
+ Set_Name_Staticness (Init, Locally);
+
+ Set_Default_Value (Domain_Signal, Init);
+
+ Add_Decl (Domain_Signal);
+ end;
+ else
+ Domain_Type_Type_Declaration := Null_Iir;
+ Domain_Type_Type_Definition := Null_Iir;
+ Domain_Type_Quiescent_Domain := Null_Iir;
+ Domain_Type_Time_Domain := Null_Iir;
+ Domain_Type_Frequency_Domain := Null_Iir;
+ Domain_Signal := Null_Iir;
+ end if;
+
-- VHDL87:
-- function NOW return TIME
--
@@ -988,6 +1051,23 @@ package body Vhdl.Std_Package is
Add_Decl (Function_Now);
end;
+ -- AMS-LRM17 16.3
+ -- impure function NOW return REAL;
+ if AMS_Vhdl then
+ declare
+ Function_Now : Iir_Function_Declaration;
+ begin
+ Function_Now := Create_Std_Decl (Iir_Kind_Function_Declaration);
+ Set_Std_Identifier (Function_Now, Std_Names.Name_Now);
+ Set_Return_Type (Function_Now, Real_Subtype_Definition);
+ Set_Pure_Flag (Function_Now, False);
+ Set_Implicit_Definition
+ (Function_Now, Iir_Predefined_Real_Now_Function);
+ Vhdl.Sem_Utils.Compute_Subprogram_Hash (Function_Now);
+ Add_Decl (Function_Now);
+ end;
+ end if;
+
-- natural subtype
declare
Constraint : Iir_Range_Expression;
@@ -1117,12 +1197,16 @@ package body Vhdl.Std_Package is
Create_Array_Type
(Integer_Vector_Type_Definition, Integer_Vector_Type_Declaration,
Integer_Subtype_Declaration, Name_Integer_Vector);
+ end if;
+ if Vhdl_Std >= Vhdl_08 or else AMS_Vhdl then
-- type Real_vector is array (natural range <>) of Real;
Create_Array_Type
(Real_Vector_Type_Definition, Real_Vector_Type_Declaration,
Real_Subtype_Declaration, Name_Real_Vector);
+ end if;
+ if Vhdl_Std >= Vhdl_08 then
-- type Time_vector is array (natural range <>) of Time;
Create_Array_Type
(Time_Vector_Type_Definition, Time_Vector_Type_Declaration,