aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-07-20 19:43:00 +0200
committerTristan Gingold <tgingold@free.fr>2022-07-20 20:40:57 +0200
commit8277f9c4a938c84558fd5d234e2707bd88afb770 (patch)
tree5f9f7f0215483ee9ecb36d33ab97c5b79546d4ff
parente5cf297021c08f3528e32784a755f168e71cf8af (diff)
downloadghdl-8277f9c4a938c84558fd5d234e2707bd88afb770.tar.gz
ghdl-8277f9c4a938c84558fd5d234e2707bd88afb770.tar.bz2
ghdl-8277f9c4a938c84558fd5d234e2707bd88afb770.zip
grt: add real now variable.
-rw-r--r--src/grt/grt-options.adb8
-rw-r--r--src/grt/grt-options.ads4
-rw-r--r--src/grt/grt-vhdl_types.ads4
-rw-r--r--src/synth/synth-vhdl_eval.adb3
4 files changed, 19 insertions, 0 deletions
diff --git a/src/grt/grt-options.adb b/src/grt/grt-options.adb
index bf29c1a5e..2b07278b1 100644
--- a/src/grt/grt-options.adb
+++ b/src/grt/grt-options.adb
@@ -49,6 +49,14 @@ package body Grt.Options is
when others =>
Error ("unhandled time resolution");
end case;
+
+ -- For AMS.
+ -- (Don't use **, as it requires the runtime).
+ Time_Real_To_Phys := 1.0;
+ for I in 1 .. Time_Resolution_Scale loop
+ Time_Real_To_Phys := Time_Real_To_Phys * 1000.0;
+ end loop;
+ Time_Phys_To_Real := 1.0 / Time_Real_To_Phys;
end Set_Time_Resolution;
procedure Help
diff --git a/src/grt/grt-options.ads b/src/grt/grt-options.ads
index fa29cc85f..d9ea57bc5 100644
--- a/src/grt/grt-options.ads
+++ b/src/grt/grt-options.ads
@@ -64,6 +64,10 @@ package Grt.Options is
subtype Natural_Time_Scale is Natural range 0 .. 5;
Time_Resolution_Scale : Natural_Time_Scale;
+ -- For AMS, conversion factors.
+ Time_Phys_To_Real : Ghdl_F64;
+ Time_Real_To_Phys : Ghdl_F64;
+
-- Set Time_Resolution_Scale from Flag_String.
procedure Set_Time_Resolution;
diff --git a/src/grt/grt-vhdl_types.ads b/src/grt/grt-vhdl_types.ads
index 42db6b9dd..34366161e 100644
--- a/src/grt/grt-vhdl_types.ads
+++ b/src/grt/grt-vhdl_types.ads
@@ -158,6 +158,10 @@ package Grt.Vhdl_Types is
Current_Time : Std_Time;
-- The current delta cycle number.
Current_Delta : Integer;
+
+ -- For AMS
+ Current_Time_AMS : Ghdl_F64;
private
pragma Export (C, Current_Time, "__ghdl_now");
+ pragma Export (C, Current_Time_AMS, "__ghdl_now_ams");
end Grt.Vhdl_Types;
diff --git a/src/synth/synth-vhdl_eval.adb b/src/synth/synth-vhdl_eval.adb
index ab1304190..5282473d2 100644
--- a/src/synth/synth-vhdl_eval.adb
+++ b/src/synth/synth-vhdl_eval.adb
@@ -2005,6 +2005,9 @@ package body Synth.Vhdl_Eval is
when Iir_Predefined_Now_Function =>
return Create_Memory_Discrete
(Int64 (Grt.Vhdl_Types.Current_Time), Res_Typ);
+ when Iir_Predefined_Real_Now_Function =>
+ return Create_Memory_Fp64
+ (Fp64 (Grt.Vhdl_Types.Current_Time_AMS), Res_Typ);
when Iir_Predefined_Endfile =>
declare