diff options
author | Tristan Gingold <tgingold@free.fr> | 2022-07-20 19:43:00 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2022-07-20 20:40:57 +0200 |
commit | 8277f9c4a938c84558fd5d234e2707bd88afb770 (patch) | |
tree | 5f9f7f0215483ee9ecb36d33ab97c5b79546d4ff /src | |
parent | e5cf297021c08f3528e32784a755f168e71cf8af (diff) | |
download | ghdl-8277f9c4a938c84558fd5d234e2707bd88afb770.tar.gz ghdl-8277f9c4a938c84558fd5d234e2707bd88afb770.tar.bz2 ghdl-8277f9c4a938c84558fd5d234e2707bd88afb770.zip |
grt: add real now variable.
Diffstat (limited to 'src')
-rw-r--r-- | src/grt/grt-options.adb | 8 | ||||
-rw-r--r-- | src/grt/grt-options.ads | 4 | ||||
-rw-r--r-- | src/grt/grt-vhdl_types.ads | 4 | ||||
-rw-r--r-- | src/synth/synth-vhdl_eval.adb | 3 |
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 |