diff --git a/IEEE754Adder.xise b/IEEE754Adder.xise index 9490c6c..8f99884 100644 --- a/IEEE754Adder.xise +++ b/IEEE754Adder.xise @@ -98,19 +98,19 @@ - - + + - - + + - + @@ -139,6 +139,16 @@ + + + + + + + + + + @@ -259,9 +269,9 @@ - - - + + + @@ -330,7 +340,7 @@ - + @@ -345,10 +355,10 @@ - - - - + + + + @@ -397,8 +407,8 @@ - - + + @@ -417,7 +427,7 @@ - + @@ -473,7 +483,7 @@ - + diff --git a/OutputSelector.vhd b/OutputSelector.vhd new file mode 100644 index 0000000..e335a05 --- /dev/null +++ b/OutputSelector.vhd @@ -0,0 +1,34 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +entity OutputSelector is + + port( + IS_NAN : in std_logic; + IS_ZERO : in std_logic; + IEEE_754_SUM : in std_logic_vector(31 downto 0); + RESULT : out std_logic_vector(31 downto 0) + ); + +end OutputSelector; + +architecture OutputSelectorArch of OutputSelector is + + signal NAN_OUT : std_logic_vector(31 downto 0); + +begin + + NAN_OUT <= "0" & "11111111" & "10000000000000000000000"; + + SELECT_PROCESS : process (IS_NAN, IS_ZERO, IEEE_754_SUM, NAN_OUT) + + begin + + for i in 31 downto 0 loop + RESULT(i) <= (not(IS_NAN) and not(IS_ZERO) and IEEE_754_SUM(i)) or (IS_NAN and NAN_OUT(i)); + end loop; + + end process; + +end OutputSelectorArch; + diff --git a/OutputSelectorTest.vhd b/OutputSelectorTest.vhd new file mode 100644 index 0000000..4d0e1d5 --- /dev/null +++ b/OutputSelectorTest.vhd @@ -0,0 +1,88 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +ENTITY OutputSelectorTest IS +END OutputSelectorTest; + +ARCHITECTURE behavior OF OutputSelectorTest IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT OutputSelector + PORT( + IS_NAN : IN std_logic; + IS_ZERO : IN std_logic; + IEEE_754_SUM : IN std_logic_vector(31 downto 0); + RESULT : OUT std_logic_vector(31 downto 0) + ); + END COMPONENT; + + + --Inputs + signal IS_NAN : std_logic := '0'; + signal IS_ZERO : std_logic := '0'; + signal IEEE_754_SUM : std_logic_vector(31 downto 0) := (others => '0'); + + --Outputs + signal RESULT : std_logic_vector(31 downto 0); + signal clock : std_logic; + + constant clock_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: OutputSelector PORT MAP ( + IS_NAN => IS_NAN, + IS_ZERO => IS_ZERO, + IEEE_754_SUM => IEEE_754_SUM, + RESULT => RESULT + ); + + -- Clock process definitions + clock_process :process + begin + clock <= '0'; + wait for clock_period/2; + clock <= '1'; + wait for clock_period/2; + end process; + + + test_proc: process + begin + IS_NAN <= '0'; + IS_ZERO <= '0'; + IEEE_754_SUM <= "0" & "00111000" & "00000100100010110000110"; + wait for clock_period; + IS_NAN <= '0'; + IS_ZERO <= '0'; + IEEE_754_SUM <= "1" & "11000010" & "00000011110010111000000"; + wait for clock_period; + IS_NAN <= '0'; + IS_ZERO <= '1'; + IEEE_754_SUM <= "0" & "00100111" & "01111111100000000000000"; + wait for clock_period; + IS_NAN <= '0'; + IS_ZERO <= '1'; + IEEE_754_SUM <= "1" & "00000010" & "01110000000000000000111"; + wait for clock_period; + IS_NAN <= '1'; + IS_ZERO <= '0'; + IEEE_754_SUM <= "0" & "11111111" & "00000000000000000000000"; + wait for clock_period; + IS_NAN <= '1'; + IS_ZERO <= '0'; + IEEE_754_SUM <= "1" & "00001111" & "10000000000000111100000"; + wait for clock_period; + IS_NAN <= '1'; + IS_ZERO <= '1'; + IEEE_754_SUM <= "0" & "00110000" & "00000000111000000000011"; + wait for clock_period; + IS_NAN <= '1'; + IS_ZERO <= '1'; + IEEE_754_SUM <= "1" & "11111111" & "00110011001100110011100"; + wait for clock_period; + end process; + +END; diff --git a/OutputSelectorTest_isim_beh.exe b/OutputSelectorTest_isim_beh.exe new file mode 100644 index 0000000..11ae4f7 Binary files /dev/null and b/OutputSelectorTest_isim_beh.exe differ diff --git a/OutputSelectorTest_isim_beh.wdb b/OutputSelectorTest_isim_beh.wdb new file mode 100644 index 0000000..42eb521 Binary files /dev/null and b/OutputSelectorTest_isim_beh.wdb differ diff --git a/PrepareForShiftTest_isim_beh.wdb b/PrepareForShiftTest_isim_beh.wdb deleted file mode 100644 index fcf26c1..0000000 Binary files a/PrepareForShiftTest_isim_beh.wdb and /dev/null differ diff --git a/SpecialCasesTest_isim_beh.exe b/SpecialCasesTest_isim_beh.exe index 3209988..11ae4f7 100755 Binary files a/SpecialCasesTest_isim_beh.exe and b/SpecialCasesTest_isim_beh.exe differ diff --git a/SumDataAdapter.vhd b/SumDataAdapter.vhd index c77bbaa..0201fa3 100644 --- a/SumDataAdapter.vhd +++ b/SumDataAdapter.vhd @@ -32,19 +32,34 @@ begin FILL <= (others => '0'); - X_Y_FST_BIT_PROCESS : process (X_IN, Y_IN) + X_FST_BIT_PROCESS : process (X_IN) - variable X_FST_TMP : std_logic := '0'; - variable Y_FST_TMP : std_logic := '0'; + variable X_FST_TMP : std_logic; begin + X_FST_TMP := '0'; + for i in 30 downto 23 loop X_FST_TMP := X_FST_TMP or X_IN(i); - Y_FST_TMP := Y_FST_TMP or Y_IN(i); end loop; X_FST_BIT <= X_FST_TMP; + + end process; + + Y_FST_BIT_PROCESS : process (Y_IN) + + variable Y_FST_TMP : std_logic; + + begin + + Y_FST_TMP := '0'; + + for i in 30 downto 23 loop + Y_FST_TMP := Y_FST_TMP or Y_IN(i); + end loop; + Y_FST_BIT <= Y_FST_TMP; end process; @@ -54,7 +69,7 @@ begin SHIFTER : ShiftRight48 port map (N => N, PLACES => DIFF_EXP, RESULT => Y_OUT); - --X_OUT <= X_FST_BIT & X_IN(22 downto 0) & FILL; + X_OUT <= X_FST_BIT & X_IN(22 downto 0) & FILL; end SumDataAdapterArch; diff --git a/SumDataAdapterTest.vhd b/SumDataAdapterTest.vhd index 3ee3dc4..746539f 100644 --- a/SumDataAdapterTest.vhd +++ b/SumDataAdapterTest.vhd @@ -67,36 +67,36 @@ BEGIN test_process :process begin - X_IN <= "111111110000010001000100000000"; - Y_IN <= "001001000000000010001000000000"; + X_IN <= "1111111100000100010001000000000"; + Y_IN <= "0010010000000000100010000000000"; DIFF_EXP <= "000000000"; --0 wait for clock_period; - X_IN <= "000000000000100000000001000000"; - Y_IN <= "000000000000001111111000000000"; + X_IN <= "0000000000001000000000010000000"; + Y_IN <= "0000000000000011111110000000000"; DIFF_EXP <= "000001000"; --8 wait for clock_period; - X_IN <= "000000000000000000111000000000"; - Y_IN <= "000010000000000000000000000111"; + X_IN <= "0000000000000000001110000000000"; + Y_IN <= "0000100000000000000000000001111"; DIFF_EXP <= "010011100"; --156 wait for clock_period; - X_IN <= "000000100000000000000000000000"; - Y_IN <= "000000001000000001111111111111"; + X_IN <= "0000001000000000000000000000000"; + Y_IN <= "0000000010000000011111111111111"; DIFF_EXP <= "000110000"; --48 wait for clock_period; - X_IN <= "000000000000000000000000010000"; - Y_IN <= "000000000000000000011100000000"; + X_IN <= "0000000000000000000000000100000"; + Y_IN <= "0000000000000000000111000000000"; DIFF_EXP <= "111111111"; --511 wait for clock_period; - X_IN <= "000000000000000000000000000000"; - Y_IN <= "000000000000011100000000000000"; + X_IN <= "0000000000000000000000000000000"; + Y_IN <= "0000000000000111000000000000000"; DIFF_EXP <= "000100100"; --36 wait for clock_period; - X_IN <= "000000000000000000000000000000"; - Y_IN <= "000000000000000000000000000000"; + X_IN <= "0000000000000000000000000000000"; + Y_IN <= "0000000000000000000000000000000"; DIFF_EXP <= "000001101"; --13 wait for clock_period; - X_IN <= "000000000000000001110001100100"; - Y_IN <= "000000000000000000000011110000"; + X_IN <= "0000000000000000011100011001000"; + Y_IN <= "0000000000000000000000111100000"; DIFF_EXP <= "000011111"; --31 wait for clock_period; end process; diff --git a/SumDataAdapterTest_isim_beh.exe b/SumDataAdapterTest_isim_beh.exe new file mode 100644 index 0000000..11ae4f7 Binary files /dev/null and b/SumDataAdapterTest_isim_beh.exe differ diff --git a/fuse.log b/fuse.log index 7286430..6e4d842 100644 --- a/fuse.log +++ b/fuse.log @@ -1,11 +1,21 @@ -Running: /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/fuse -intstyle ise -incremental -lib secureip -o /home/ise/gianni/IEEE754Adder/SumDataAdapterTest_isim_beh.exe -prj /home/ise/gianni/IEEE754Adder/SumDataAdapterTest_beh.prj work.SumDataAdapterTest +Running: /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/fuse -intstyle ise -incremental -lib secureip -o /home/ise/gianni/IEEE754Adder/OutputSelectorTest_isim_beh.exe -prj /home/ise/gianni/IEEE754Adder/OutputSelectorTest_beh.prj work.OutputSelectorTest ISim P.20160913 (signature 0xfbc00daa) Number of CPUs detected in this system: 1 Turning on mult-threading, number of parallel sub-compilation jobs: 0 Determining compilation order of HDL files -Parsing VHDL file "/home/ise/gianni/IEEE754Adder/ShiftRight.vhd" into library work -Parsing VHDL file "/home/ise/gianni/IEEE754Adder/SumDataAdapter.vhd" into library work -Parsing VHDL file "/home/ise/gianni/IEEE754Adder/SumDataAdapterTest.vhd" into library work +Parsing VHDL file "/home/ise/gianni/IEEE754Adder/OutputSelector.vhd" into library work +Parsing VHDL file "/home/ise/gianni/IEEE754Adder/OutputSelectorTest.vhd" into library work Starting static elaboration -ERROR:HDLCompiler:410 - "/home/ise/gianni/IEEE754Adder/SumDataAdapterTest.vhd" Line 74: Expression has 30 elements ; expected 31 -ERROR:Simulator:777 - Static elaboration of top level VHDL design unit sumdataadaptertest in library work failed +Completed static elaboration +Fuse Memory Usage: 95300 KB +Fuse CPU Usage: 2310 ms +Compiling package standard +Compiling package std_logic_1164 +Compiling architecture outputselectorarch of entity OutputSelector [outputselector_default] +Compiling architecture behavior of entity outputselectortest +Time Resolution for simulation is 1ps. +Compiled 5 VHDL Units +Built simulation executable /home/ise/gianni/IEEE754Adder/OutputSelectorTest_isim_beh.exe +Fuse Memory Usage: 103948 KB +Fuse CPU Usage: 2410 ms +GCC CPU Usage: 550 ms diff --git a/fuse.xmsgs b/fuse.xmsgs index ed9858d..f84336a 100644 --- a/fuse.xmsgs +++ b/fuse.xmsgs @@ -5,11 +5,5 @@ behavior or data corruption. It is strongly advised that users do not edit the contents of this file. --> -"/home/ise/gianni/IEEE754Adder/SumDataAdapterTest.vhd" Line 74: Expression has 30 elements ; expected 31 - - -Static elaboration of top level VHDL design unit sumdataadaptertest in library work failed - - diff --git a/fuseRelaunch.cmd b/fuseRelaunch.cmd index 609200b..27fca25 100644 --- a/fuseRelaunch.cmd +++ b/fuseRelaunch.cmd @@ -1 +1 @@ --intstyle "ise" -incremental -lib "secureip" -o "/home/ise/gianni/IEEE754Adder/SumDataAdapterTest_isim_beh.exe" -prj "/home/ise/gianni/IEEE754Adder/SumDataAdapterTest_beh.prj" "work.SumDataAdapterTest" +-intstyle "ise" -incremental -lib "secureip" -o "/home/ise/gianni/IEEE754Adder/OutputSelectorTest_isim_beh.exe" -prj "/home/ise/gianni/IEEE754Adder/OutputSelectorTest_beh.prj" "work.OutputSelectorTest"