Line 28... |
Line 28... |
library lpm;
|
library lpm;
|
use lpm.all;
|
use lpm.all;
|
--! Esta entidad recibe dos números en formato punto flotante IEEE 754, de precision simple y devuelve las mantissas signadas y corridas, y el exponente correspondiente al resultado antes de normalizarlo al formato float.
|
--! Esta entidad recibe dos números en formato punto flotante IEEE 754, de precision simple y devuelve las mantissas signadas y corridas, y el exponente correspondiente al resultado antes de normalizarlo al formato float.
|
--!\nLas 2 mantissas y el exponente entran despues a la entidad add2 que suma las mantissas y entrega el resultado en formato IEEE 754.
|
--!\nLas 2 mantissas y el exponente entran despues a la entidad add2 que suma las mantissas y entrega el resultado en formato IEEE 754.
|
entity fadd32 is
|
entity fadd32 is
|
|
generic (
|
|
propagation_chain : string := "ON"
|
|
);
|
port (
|
port (
|
clk,dpc,ena : in std_logic;
|
clk,dpc,prop_in : in std_logic;
|
a32,b32 : in std_logic_vector (31 downto 0);
|
a32,b32 : in std_logic_vector (31 downto 0);
|
c32 : out std_logic_vector(31 downto 0)
|
c32,prop_out : out std_logic_vector(31 downto 0)
|
);
|
);
|
end fadd32;
|
end fadd32;
|
architecture fadd32_arch of fadd32 is
|
architecture fadd32_arch of fadd32 is
|
|
|
component lpm_mult
|
component lpm_mult
|
Line 65... |
Line 68... |
signal s5factorhot24 : std_logic_vector(23 downto 0);
|
signal s5factorhot24 : std_logic_vector(23 downto 0);
|
signal s2umantshift,s2mantfixed,s3mantfixed,s3mantshift,s4xorslab : std_logic_vector(24 downto 0);
|
signal s2umantshift,s2mantfixed,s3mantfixed,s3mantshift,s4xorslab : std_logic_vector(24 downto 0);
|
signal s4sresult,s5result,s6result : std_logic_vector(25 downto 0); -- Signed mantissa result
|
signal s4sresult,s5result,s6result : std_logic_vector(25 downto 0); -- Signed mantissa result
|
signal s1ph,s6ph : std_logic_vector(26 downto 0);
|
signal s1ph,s6ph : std_logic_vector(26 downto 0);
|
signal s0a,s0b : std_logic_vector(31 downto 0); -- Float 32 bit
|
signal s0a,s0b : std_logic_vector(31 downto 0); -- Float 32 bit
|
|
signal sxprop : std_logic_vector(7 downto 0);
|
|
|
begin
|
begin
|
|
propagation:
|
process (clk,ena)
|
if propagation_chain="ON" generate
|
|
prop_out <= sxprop(7);
|
|
process (clk)
|
|
begin
|
|
if clk'event and clk='1' then
|
|
for i in 7 downto 1 loop
|
|
sxprop(i) <= sxprop(i-1);
|
|
end loop;
|
|
sxprop(0) <= prop_in;
|
|
end if;
|
|
end process;
|
|
end generate propagation ;
|
|
process (clk)
|
begin
|
begin
|
if clk'event and clk='1' and ena='1' then
|
if clk'event and clk='1' then
|
|
|
--!Registro de entrada
|
--!Registro de entrada
|
s0a <= a32;
|
s0a <= a32;
|
s0b(31) <= dpc xor b32(31); --! Importante: Integrar el signo en el operando B
|
s0b(31) <= dpc xor b32(31); --! Importante: Integrar el signo en el operando B
|
s0b(30 downto 0) <= b32(30 downto 0);
|
s0b(30 downto 0) <= b32(30 downto 0);
|