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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp/] [dpc.vhd] - Diff between revs 153 and 158

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

Rev 153 Rev 158
Line 20... Line 20...
--     You should have received a copy of the GNU General Public License
--     You should have received a copy of the GNU General Public License
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.
 
 
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_1164.all;
 
 
use work.arithpack.all;
use work.arithpack.all;
 
 
 
 
entity dpc is
entity dpc is
 
 
        port (
        port (
                clk,rst                                 : in    std_logic;
                clk,rst                                 : in    std_logic;
                paraminput                              : in    std_logic_vector ((12*floatwidth)-1 downto 0);   --! Vectores A,B,C,D
                paraminput                              : in    vectorblock12;                                                                  --! Vectores A,B,C,D
                prd32blko                               : in    std_logic_vector ((06*floatwidth)-1 downto 0);   --! Salidas de los 6 multiplicadores.
                prd32blko                               : in    vectorblock06;  --! Salidas de los 6 multiplicadores.
                add32blko                               : in    std_logic_vector ((04*floatwidth)-1 downto 0);   --! Salidas de los 4 sumadores.
                add32blko                               : in    vectorblock04;  --! Salidas de los 4 sumadores.
                sqr32blko,inv32blko             : in    std_logic_vector (floatwidth-1 downto 0);                --! Salidas de la raiz cuadradas y el inversor.
                sqr32blko,inv32blko             : in    std_logic_vector (floatwidth-1 downto 0);                --! Salidas de la raiz cuadradas y el inversor.
                fifo32x23_q                             : in    std_logic_vector (03*floatwidth-1 downto 0);             --! Salida de la cola intermedia.
                fifo32x23_q                             : in    std_logic_vector (03*floatwidth-1 downto 0);             --! Salida de la cola intermedia.
                fifo32x09_q                             : in    std_logic_vector (02*floatwidth-1 downto 0);     --! Salida de las colas de producto punto. 
                fifo32x09_q                             : in    std_logic_vector (02*floatwidth-1 downto 0);     --! Salida de las colas de producto punto. 
                unary,crossprod,addsub  : in    std_logic;                                                                      --! Bit con el identificador del bloque AB vs CD e identificador del sub bloque (A/B) o (C/D). 
                unary,crossprod,addsub  : in    std_logic;                                                                      --! Bit con el identificador del bloque AB vs CD e identificador del sub bloque (A/B) o (C/D). 
                sync_chain_0                    : in    std_logic;                                                                      --! Se&ntilde;al de dato valido que se va por toda la cadena de sincronizacion.
                sync_chain_0                    : in    std_logic;                                                                      --! Se&ntilde;al de dato valido que se va por toda la cadena de sincronizacion.
                eoi_int                                 : in    std_logic;                                                                      --! Se&ntilde;al de interrupci&oacute;n de final de instrucci&oacute;n.
                eoi_int                                 : in    std_logic;                                                                      --! Se&ntilde;al de interrupci&oacute;n de final de instrucci&oacute;n.
                eoi_demuxed_int                 : out   std_logic_vector (3 downto 0);                           --! Se&ntilde;al de interrupci&oacute;n de final de instrucci&oacute;n pero esta vez va asociada a la instrucc&oacute;n UCA.
                eoi_demuxed_int                 : out   std_logic_vector (3 downto 0);                           --! Se&ntilde;al de interrupci&oacute;n de final de instrucci&oacute;n pero esta vez va asociada a la instrucc&oacute;n UCA.
                sqr32blki,inv32blki             : out   std_logic_vector (floatwidth-1 downto 0);                --! Salidas de las 2 raices cuadradas y los 2 inversores.
                sqr32blki,inv32blki             : out   std_logic_vector (floatwidth-1 downto 0);                --! Salidas de las 2 raices cuadradas y los 2 inversores.
                fifo32x26_d                             : out   std_logic_vector (03*floatwidth-1 downto 0);             --! Entrada a la cola intermedia para la normalizaci&oacute;n.
                fifo32x26_d                             : out   std_logic_vector (03*floatwidth-1 downto 0);             --! Entrada a la cola intermedia para la normalizaci&oacute;n.
                fifo32x09_d                             : out   std_logic_vector (02*floatwidth-1 downto 0);             --! Entrada a las colas intermedias del producto punto.         
                fifo32x09_d                             : out   std_logic_vector (02*floatwidth-1 downto 0);             --! Entrada a las colas intermedias del producto punto.         
                prd32blki                               : out   std_logic_vector ((12*floatwidth)-1 downto 0);   --! Entrada de los 12 factores en el bloque de multiplicaci&oacute;n respectivamente.
                prd32blki                               : out   vectorblock12;  --! Entrada de los 12 factores en el bloque de multiplicaci&oacute;n respectivamente.
                add32blki                               : out   std_logic_vector ((08*floatwidth)-1 downto 0);   --! Entrada de los 8 sumandos del bloque de 4 sumadores.  
                add32blki                               : out   vectorblock08;  --! Entrada de los 8 sumandos del bloque de 4 sumadores.  
                resw                                    : out   std_logic_vector (4 downto 0);                           --! Salidas de escritura y lectura en las colas de resultados.
                resw                                    : out   std_logic_vector (4 downto 0);                           --! Salidas de escritura y lectura en las colas de resultados.
                fifo32x09_w                             : out   std_logic;
                fifo32x09_w                             : out   std_logic;
                fifo32x23_w,fifo32x09_r : out   std_logic;
                fifo32x23_w,fifo32x09_r : out   std_logic;
                fifo32x23_r                             : out   std_logic;
                fifo32x23_r                             : out   std_logic;
                resf_vector                             : in    std_logic_vector (3 downto 0);                           --! Entradas de la se&ntilde;al de full de las colas de resultados. 
                resf_vector                             : in    std_logic_vector (3 downto 0);                           --! Entradas de la se&ntilde;al de full de las colas de resultados. 
                resf_event                              : out   std_logic;                                                                      --! Salida decodificada que indica que la cola de resultados de la operaci&oacute;n que est&aacute; en curso.
                resf_event                              : out   std_logic;                                                                      --! Salida decodificada que indica que la cola de resultados de la operaci&oacute;n que est&aacute; en curso.
                resultoutput                    : out   std_logic_vector ((08*floatwidth)-1 downto 0)    --! 8 salidas de resultados, pues lo m&aacute;ximo que podr&aacute; calcularse por cada clock son 2 vectores. 
                resultoutput                    : out   vectorblock08 --! 8 salidas de resultados, pues lo m&aacute;ximo que podr&aacute; calcularse por cada clock son 2 vectores. 
        );
        );
end entity;
end entity;
 
 
architecture dpc_arch of dpc is
architecture dpc_arch of dpc is
 
 
Line 136... Line 138...
                end if;
                end if;
        end process sync_chain_comb;
        end process sync_chain_comb;
 
 
 
 
        --! El siguiente c&oacute;digo sirve para conectar arreglos a se&ntilde;ales std_logic_1164, simplemente son abstracciones a nivel de c&oacute;digo y no representar&aacute; cambios en la s&iacute;ntesis.
        --! El siguiente c&oacute;digo sirve para conectar arreglos a se&ntilde;ales std_logic_1164, simplemente son abstracciones a nivel de c&oacute;digo y no representar&aacute; cambios en la s&iacute;ntesis.
        stuff12:
        sparaminput     <= paraminput;
        for i in 11 downto 0 generate
        prd32blki       <= sfactor;
                sparaminput(i) <= paraminput(i*floatwidth+floatwidth-1 downto i*floatwidth);
        add32blki       <= ssumando;
                prd32blki(i*floatwidth+floatwidth-1 downto i*floatwidth) <= sfactor(i);
        resultoutput<= sresult;
        end generate stuff12;
 
        stuff08:
 
        for i in 07 downto 0 generate
 
                add32blki(i*floatwidth+floatwidth-1 downto i*floatwidth) <= ssumando(i);
 
                resultoutput(i*floatwidth+floatwidth-1 downto i*floatwidth) <= sresult(i);
 
        end generate stuff08;
 
        stuff04:
        stuff04:
        for i in 02 downto 1 generate
        for i in 02 downto 1 generate
                sadd32blk(i)  <= add32blko(i*floatwidth+floatwidth-1 downto i*floatwidth);
                sadd32blk(i)  <= add32blko(i);
        end generate stuff04;
        end generate stuff04;
 
 
 
 
        stuff03:
        stuff03:
        for i in 02 downto 0 generate
        for i in 02 downto 0 generate
Line 168... Line 166...
        --! El siguiente c&oacute;digo sirve para conectar arreglos a se&ntilde;ales std_logic_1164, son abstracciones de c&oacute;digo tambi&eacute;n, sin embargo se realizan a trav&eacute;s de registros. 
        --! El siguiente c&oacute;digo sirve para conectar arreglos a se&ntilde;ales std_logic_1164, son abstracciones de c&oacute;digo tambi&eacute;n, sin embargo se realizan a trav&eacute;s de registros. 
        register_products_outputs:
        register_products_outputs:
        process (clk)
        process (clk)
        begin
        begin
                if clk'event and clk='1' then
                if clk'event and clk='1' then
                        for i in 05 downto 0 loop
                        sprd32blk  <= prd32blko;
                                sprd32blk(i)  <= prd32blko(i*floatwidth+floatwidth-1 downto i*floatwidth);
 
                        end loop;
 
                end if;
                end if;
        end process;
        end process;
        --! Los productos del multiplicador 2 y 3, ya registrados dentro de dpc van a la cola intermedia del producto punto (fifo32x09_d)
        --! Los productos del multiplicador 2 y 3, ya registrados dentro de dpc van a la cola intermedia del producto punto (fifo32x09_d)
        --! Los unicos resultados de sumandos que de nuevo entran al DataPathControl (observar la pesta&ntilde;a del documento de excel) 
        --! Los unicos resultados de sumandos que de nuevo entran al DataPathControl (observar la pesta&ntilde;a del documento de excel) 
 
 
        fifo32x09_d <= sprd32blk(p3)&sprd32blk(p2);
        fifo32x09_d <= sprd32blk(p3)&sprd32blk(p2);
        register_adder0_and_inversor_output:
        register_adder0_and_inversor_output:
        process (clk)
        process (clk)
        begin
        begin
                if clk'event and clk='1' then
                if clk'event and clk='1' then
                        sadd32blk(a0) <= add32blko(a0*floatwidth+floatwidth-1 downto a0*floatwidth);
                        sadd32blk(a0) <= add32blko(a0);
                        sadd32blk(aa) <= add32blko(aa*floatwidth+floatwidth-1 downto aa*floatwidth);
                        sadd32blk(aa) <= add32blko(aa);
                        sinv32blk <= inv32blko;
                        sinv32blk <= inv32blko;
                end if;
                end if;
        end process;
        end process;
 
 
 
 

powered by: WebSVN 2.1.0

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