OpenCores
URL https://opencores.org/ocsvn/raytrac/raytrac/trunk

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp/] [fadd32.vhd] - Diff between revs 121 and 137

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 121 Rev 137
Line 29... Line 29...
use lpm.all;
use lpm.all;
--! Esta entidad recibe dos n&uacutemeros 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&uacutemeros 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&oacute;n si el mayor es a las posiciones la mantiene. 
        --! si el mayor es b, intercambia las posici&oacute;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.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.