aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna/issue1924/test_float_to_sfixed.vhdl
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/gna/issue1924/test_float_to_sfixed.vhdl')
-rw-r--r--testsuite/gna/issue1924/test_float_to_sfixed.vhdl67
1 files changed, 67 insertions, 0 deletions
diff --git a/testsuite/gna/issue1924/test_float_to_sfixed.vhdl b/testsuite/gna/issue1924/test_float_to_sfixed.vhdl
new file mode 100644
index 000000000..ce68af85d
--- /dev/null
+++ b/testsuite/gna/issue1924/test_float_to_sfixed.vhdl
@@ -0,0 +1,67 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use ieee.fixed_float_types.all;
+
+use work.Package_Float32.all;
+use work.Package_Fixed.all;
+
+entity test_Float_To_sFixed is
+end entity test_Float_To_sFixed;
+
+architecture RTL of test_Float_To_sFixed is
+
+procedure compute_and_show(sign : in std_logic; exponent : in Integer; fraction : in std_logic_vector(23-1 downto 0)) is
+ variable s : std_logic_vector(32-1 downto 0);
+ variable f : float32;
+ variable sf : sFixed(4-1 downto -2);
+ variable r : Real;
+begin
+ s := sign & std_logic_vector(to_unsigned(exponent, 8)) & fraction;
+ f := to_float(s, f);
+ sf := to_sFixed(f, sf, round_style => fixed_truncate);
+ r := to_real(f);
+
+ report "s : " & to_string(sign) & "."
+ & to_string(to_unsigned(exponent, 8)) & "."
+ & to_string(fraction)
+ & " -> " & to_string(r);
+ report "sf : " & to_string(sf);
+ report "";
+end compute_and_show;
+
+
+begin
+
+ process
+ begin
+ compute_and_show('0', 0, "00000000000000000000000"); -- 0
+ compute_and_show('0', 123, "00000000000000000000000"); -- 0.0625
+ compute_and_show('0', 124, "00000000000000000000000"); -- 0.125
+ compute_and_show('0', 125, "00000000000000000000000"); -- 0.25
+ compute_and_show('0', 126, "00000000000000000000000"); -- 0.5
+ compute_and_show('0', 127, "00000000000000000000000"); -- 1
+ compute_and_show('0', 127, "10000000000000000000000"); -- 1.5
+ compute_and_show('0', 127, "11000000000000000000000"); -- 1.75
+ compute_and_show('0', 127, "11100000000000000000000"); -- 1.875
+ compute_and_show('0', 127, "11110000000000000000000"); -- 1.875
+ report "------";
+ report "";
+ compute_and_show('1', 0, "00000000000000000000000"); -- -0
+ compute_and_show('1', 123, "00000000000000000000000"); -- -0.0625
+ compute_and_show('1', 124, "00000000000000000000000"); -- -0.125
+ compute_and_show('1', 125, "00000000000000000000000"); -- -0.25
+ compute_and_show('1', 126, "00000000000000000000000"); -- -0.5
+ compute_and_show('1', 127, "00000000000000000000000"); -- -1
+ compute_and_show('1', 127, "10000000000000000000000"); -- -1.5
+ compute_and_show('1', 127, "11000000000000000000000"); -- -1.75
+ compute_and_show('1', 127, "11100000000000000000000"); -- -1.875
+ compute_and_show('1', 127, "11110000000000000000000"); -- -1.9375
+ compute_and_show('1', 127, "11111000000000000000000"); -- -1.9375
+ compute_and_show('1', 127, "11111100000000000000000"); -- -1.9375
+ compute_and_show('1', 127, "11111110000000000000000"); -- -1.9375
+ compute_and_show('1', 127, "11111111000000000000000"); -- -1.9375
+ wait;
+ end process;
+
+end architecture RTL;