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

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [fpbranch/] [add/] [ema32x2.vhd] - Diff between revs 106 and 107

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

Rev 106 Rev 107
Line 59... Line 59...
        signal s0a,s0b,s1a,s1b                                                          : std_logic_vector(31 downto 0); -- Float 32 bit 
        signal s0a,s0b,s1a,s1b                                                          : std_logic_vector(31 downto 0); -- Float 32 bit 
        signal s1sma,s2sma,s2smb,s3sma,s3smb,s3ures,s4ures      : std_logic_vector(24 downto 0); -- Signed mantissas
        signal s1sma,s2sma,s2smb,s3sma,s3smb,s3ures,s4ures      : std_logic_vector(24 downto 0); -- Signed mantissas
        signal s3res                                                                            : std_logic_vector(25 downto 0); -- Signed mantissa result
        signal s3res                                                                            : std_logic_vector(25 downto 0); -- Signed mantissa result
        signal s1pS,s1pH,s1pL,s4nrmL,s4nrmH,s4nrmS                      : std_logic_vector(17 downto 0); -- Shifert Product
        signal s1pS,s1pH,s1pL,s4nrmL,s4nrmH,s4nrmS                      : std_logic_vector(17 downto 0); -- Shifert Product
        signal s0zeroa,s0zerob,s1zeroa,s1zerob,s1z,s4sgr                        : std_logic;
        signal s0zeroa,s0zerob,s1zeroa,s1zerob,s1z,s4sgr                        : std_logic;
 
        signal s2sma,s2smb                                                                      : std_logic_vector (56 downto 0);
 
 
begin
begin
 
 
        process (clk)
        process (clk)
        begin
        begin
Line 74... Line 75...
                        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);
                        s0b(22 downto 0) <= b32(22 downto 0);
                        s0b(22 downto 0) <= b32(22 downto 0);
 
 
                        --!Etapa 0,Calcular la manera en que se llevara a cabo la desnormalizacion
                        --!Etapa 0,Calcular la manera en que se llevara a cabo la desnormalizacion
 
                        s1signa         <= s0a(31);
 
                        s1signb         <= s0b(31);
                        s1dira          <= s0sdelta(7);
                        s1dira          <= s0sdelta(7);
                        s1dirb          <= not(s0sdelta(7));
 
                        s1uma           <= s0a(22 downto 0);
                        s1uma           <= s0a(22 downto 0);
                        s1umb           <= s0b(22 downto 0);
                        s1umb           <= s0b(22 downto 0);
                        if s0zeroa='0' or s0zerob='0' then
                        if sa(30 downto 23) = "00000000" or sb(30 downto 23) = "00000000" then
                                s1expb  <= s0b(30 downto 23) or s0a(30 downto 23);
                                s1expb  <= s0b(30 downto 23) or s0a(30 downto 23);
                                s1udeltaa       <= "0000";
                                s1udeltaa       <= "0000";
                                s1udeltab       <= "0000";
                                s1udeltab       <= "0000";
 
                                s1zero          <= '1';
                        else
                        else
                                s1expb  <= s0b(30 downto 23);
                                s1expb  <= s0b(30 downto 23);
                                s1udeltaa       <= s0udeltaa(3 downto 0);
                                s1udeltaa       <= s0udeltaa(3 downto 0);
                                s1udeltab       <= s1udeltab(3 downto 0);
                                s1udeltab       <= s1udeltab(3 downto 0);
 
                                s1zero  <= '0';
                        end if;
                        end if;
 
 
                        s1zeroa         <= s0zeroa;
 
                        s1zerob         <= s0zerob;
 
 
 
 
 
                        --! Etapa 1: Denormalizaci&oacute;n de las mantissas.  
                        --! Etapa 1: Denormalizaci&oacute;n de las mantissas.  
                        --! A
                        --! A
                        s2exp <= s1a(30 downto 23);
                        s2exp <= s1a(30 downto 23);
                        s2sma <= s1sma;
                        s2sma <= s1sma;
Line 215... Line 216...
        end process;
        end process;
 
 
 
 
        --! Combinatorial Gremlin, Etapa 1 Denormalizaci&oacute;n de las mantissas.
        --! Combinatorial Gremlin, Etapa 1 Denormalizaci&oacute;n de las mantissas.
        shftra:shftr
        shftra:shftr
        port    map (s1dira,s1udeltaa(2 downto 0),s1uma,
        port    map (s1dira,s1udeltaa(3 downto 0),'1'&s1uma,s1data40a);
 
        shftrb:shftr
 
        port    map (not(s1dira),s1udeltab(3 downto 0),'1'&s1umb,s1data40b);
 
 
 
        process (s1data40b,s1data40a)
 
        begin
 
 
 
                if s1dira='1' then
 
                        s1signeddata56a(55 downto 40) <= (others => '0');
 
                        s1signeddata56b(15 downto 0) <= (others => '0');
 
                        for i in 39 downto 0 loop
 
                                s1signeddata56a(i)  <= s1signa xor s1data40a(i);
 
                                s1signeddata56b(i+16) <= s1signb xor s1data40b(i);
 
                        end loop;
 
                else
 
                        s1signeddata56a(15 downto 0) <= (others => '0');
 
                        s1signeddata56b(55 downto 40) <= (others => '0');
 
                        for i in 39 downto 0 loop
 
                                s1signeddata56a(i+16)  <= s1signa xor s1data40a(i);
 
                                s1signeddata56b(i) <= s1signb xor s1data40b(i);
 
                        end loop;
 
                end if;
 
 
 
        end process;
 
 
 
 
        s1b2b1s:
        s1b2b1s:
        for i in 22 downto 0 generate
        for i in 22 downto 0 generate
                b1s(i) <= s1b(22-i);
                b1s(i) <= s1b(22-i);
        end generate s1b2b1s;
        end generate s1b2b1s;

powered by: WebSVN 2.1.0

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