Line 29... |
Line 29... |
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
|
port (
|
port (
|
clk,dpc : in std_logic;
|
clk,dpc,ena : 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 : out std_logic_vector(31 downto 0)
|
);
|
);
|
end fadd32;
|
end fadd32;
|
architecture fadd32_arch of fadd32 is
|
architecture fadd32_arch of fadd32 is
|
Line 68... |
Line 68... |
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
|
|
|
begin
|
begin
|
|
|
process (clk)
|
process (clk,ena)
|
begin
|
begin
|
if clk'event and clk='1' then
|
if clk'event and clk='1' and ena='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);
|
Line 132... |
Line 132... |
s7sign <= s6result(25);
|
s7sign <= s6result(25);
|
s7exp <= s6exp;
|
s7exp <= s6exp;
|
s7factor <= s6factor;
|
s7factor <= s6factor;
|
s7postshift <= s6postshift;
|
s7postshift <= s6postshift;
|
|
|
|
|
|
end if;
|
|
end process;
|
|
|
--! Etapa 7: Entregar el resultado.
|
--! Etapa 7: Entregar el resultado.
|
c32(31) <= s7sign;
|
c32(31) <= s7sign;
|
|
process(s7exp,s7postshift,s7factor)
|
|
begin
|
c32(30 downto 23) <= s7exp+s7factor;
|
c32(30 downto 23) <= s7exp+s7factor;
|
case s7factor(4 downto 3) is
|
case s7factor(4 downto 3) is
|
when "01" => c32(22 downto 0) <= s7postshift(14 downto 00)&x"00";
|
when "01" => c32(22 downto 0) <= s7postshift(14 downto 00)&x"00";
|
when "10" => c32(22 downto 0) <= s7postshift(06 downto 00)&x"0000";
|
when "10" => c32(22 downto 0) <= s7postshift(06 downto 00)&x"0000";
|
when others => c32(22 downto 0) <= s7postshift;
|
when others => c32(22 downto 0) <= s7postshift;
|
end case;
|
end case;
|
end if;
|
|
end process;
|
end process;
|
--! Combinatorial gremlin, Etapa 0 el corrimiento de la mantissa con menor exponente y reorganiza los operandos,\n
|
--! Combinatorial gremlin, Etapa 0 el corrimiento de la mantissa con menor exponente y reorganiza los operandos,\n
|
--! si el mayor es b, intercambia las posición si el mayor es a las posiciones la mantiene.
|
--! si el mayor es b, intercambia las posición si el mayor es a las posiciones la mantiene.
|
s0delta <= s0a(30 downto 23)-s0b(30 downto 23);
|
s0delta <= s0a(30 downto 23)-s0b(30 downto 23);
|
--! Combinatorial Gremlin, Etapa 1 Codificar el factor de corrimiento de denormalizacion y denormalizar la mantissa no fija. Signar la mantissa que se queda fija.
|
--! Combinatorial Gremlin, Etapa 1 Codificar el factor de corrimiento de denormalizacion y denormalizar la mantissa no fija. Signar la mantissa que se queda fija.
|