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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp/] [dpc.vhd] - Diff between revs 151 and 152

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

Rev 151 Rev 152
Line 23... Line 23...
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
        generic (
 
                width : integer := 32
 
                --!external_readable_widthad    : integer := integer(ceil(log(real(external_readable_blocks),2.0))))                    
 
        );
 
        port (
        port (
                clk,rst                                 : in    std_logic;
                clk,rst                                 : in    std_logic;
                paraminput                              : in    std_logic_vector ((12*width)-1 downto 0);        --! Vectores A,B,C,D
                paraminput                              : in    std_logic_vector ((12*floatwidth)-1 downto 0);   --! Vectores A,B,C,D
                prd32blko                               : in    std_logic_vector ((06*width)-1 downto 0);        --! Salidas de los 6 multiplicadores.
                prd32blko                               : in    std_logic_vector ((06*floatwidth)-1 downto 0);   --! Salidas de los 6 multiplicadores.
                add32blko                               : in    std_logic_vector ((04*width)-1 downto 0);        --! Salidas de los 4 sumadores.
                add32blko                               : in    std_logic_vector ((04*floatwidth)-1 downto 0);   --! Salidas de los 4 sumadores.
                sqr32blko,inv32blko             : in    std_logic_vector (width-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*width-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*width-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ñal de dato valido que se va por toda la cadena de sincronizacion.
                sync_chain_0                    : in    std_logic;                                                                      --! Señal de dato valido que se va por toda la cadena de sincronizacion.
                eoi_int                                 : in    std_logic;                                                                      --! Sennal de interrupción de final de instrucción.
                eoi_int                                 : in    std_logic;                                                                      --! Señal de interrupción de final de instrucción.
                eoi_demuxed_int                 : out   std_logic_vector (3 downto 0);                           --! Señal de interrupción de final de instrucción pero esta vez va asociada a la instruccón UCA.
                eoi_demuxed_int                 : out   std_logic_vector (3 downto 0);                           --! Señal de interrupción de final de instrucción pero esta vez va asociada a la instruccón UCA.
                sqr32blki,inv32blki             : out   std_logic_vector (width-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*width-1 downto 0);          --! Entrada a la cola intermedia para la normalización.
                fifo32x26_d                             : out   std_logic_vector (03*floatwidth-1 downto 0);             --! Entrada a la cola intermedia para la normalización.
                fifo32x09_d                             : out   std_logic_vector (02*width-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*width)-1 downto 0);        --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
                prd32blki                               : out   std_logic_vector ((12*floatwidth)-1 downto 0);   --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
                add32blki                               : out   std_logic_vector ((08*width)-1 downto 0);        --! Entrada de los 8 sumandos del bloque de 4 sumadores.  
                add32blki                               : out   std_logic_vector ((08*floatwidth)-1 downto 0);   --! 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ñal de full de las colas de resultados. 
                resf_vector                             : in    std_logic_vector (3 downto 0);                           --! Entradas de la señ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ón que está en curso.
                resf_event                              : out   std_logic;                                                                      --! Salida decodificada que indica que la cola de resultados de la operación que está en curso.
                resultoutput                    : out   std_logic_vector ((08*width)-1 downto 0)         --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores. 
                resultoutput                    : out   std_logic_vector ((08*floatwidth)-1 downto 0)    --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores. 
        );
        );
end dpc;
end dpc;
 
 
architecture dpc_arch of dpc is
architecture dpc_arch of dpc is
 
 
Line 70... Line 67...
 
 
        constant dpfifoab : integer := 00;
        constant dpfifoab : integer := 00;
        constant dpfifocd : integer := 01;
        constant dpfifocd : integer := 01;
 
 
 
 
        type    vectorblock12 is array (11 downto 0) of std_logic_vector(width-1 downto 0);
 
        type    vectorblock08 is array (07 downto 0) of std_logic_vector(width-1 downto 0);
 
        type    vectorblock06 is array (05 downto 0) of std_logic_vector(width-1 downto 0);
 
        type    vectorblock04 is array (03 downto 0) of std_logic_vector(width-1 downto 0);
 
        type    vectorblock03 is array (02 downto 0) of std_logic_vector(width-1 downto 0);
 
        type    vectorblock02 is array (01 downto 0) of std_logic_vector(width-1 downto 0);
 
 
 
 
 
 
 
        signal sparaminput,sfactor                      : vectorblock12;
        signal sparaminput,sfactor                      : vectorblock12;
        signal ssumando,sresult                         : vectorblock08;
        signal ssumando,sresult                         : vectorblock08;
        signal sprd32blk                                        : vectorblock06;
        signal sprd32blk                                        : vectorblock06;
        signal sadd32blk                                        : vectorblock04;
        signal sadd32blk                                        : vectorblock04;
        signal snormfifo_q,snormfifo_d          : vectorblock03;
        signal snormfifo_q,snormfifo_d          : vectorblock03;
        signal sdpfifo_q                                        : vectorblock02;
        signal sdpfifo_q                                        : vectorblock02;
        signal ssqr32blk,sinv32blk                      : std_logic_vector(width-1 downto 0);
        signal ssqr32blk,sinv32blk                      : std_logic_vector(floatwidth-1 downto 0);
        signal ssync_chain                                      : std_logic_vector(28 downto 0);
        signal ssync_chain                                      : std_logic_vector(28 downto 0);
        signal ssync_chain_d                            : std_logic;
        signal ssync_chain_d                            : std_logic;
        signal sres567w,sres123w,sres2w         : std_logic;
        signal sres567w,sres123w,sres2w         : std_logic;
        signal sres0w,sres4w                            : std_logic;
        signal sres0w,sres4w                            : std_logic;
        signal sres567f,sres123f                        : std_logic; --! Entradas de la señal de full de las colas de resultados. 
        signal sres567f,sres123f                        : std_logic; --! Entradas de la señal de full de las colas de resultados. 
Line 146... Line 138...
 
 
 
 
        --! El siguiente código sirve para conectar arreglos a señales std_logic_1164, simplemente son abstracciones a nivel de código y no representará cambios en la síntesis.
        --! El siguiente código sirve para conectar arreglos a señales std_logic_1164, simplemente son abstracciones a nivel de código y no representará cambios en la síntesis.
        stuff12:
        stuff12:
        for i in 11 downto 0 generate
        for i in 11 downto 0 generate
                sparaminput(i) <= paraminput(i*width+width-1 downto i*width);
                sparaminput(i) <= paraminput(i*floatwidth+floatwidth-1 downto i*floatwidth);
                prd32blki(i*width+width-1 downto i*width) <= sfactor(i);
                prd32blki(i*floatwidth+floatwidth-1 downto i*floatwidth) <= sfactor(i);
        end generate stuff12;
        end generate stuff12;
        stuff08:
        stuff08:
        for i in 07 downto 0 generate
        for i in 07 downto 0 generate
                add32blki(i*width+width-1 downto i*width) <= ssumando(i);
                add32blki(i*floatwidth+floatwidth-1 downto i*floatwidth) <= ssumando(i);
                resultoutput(i*width+width-1 downto i*width) <= sresult(i);
                resultoutput(i*floatwidth+floatwidth-1 downto i*floatwidth) <= sresult(i);
        end generate stuff08;
        end generate stuff08;
        stuff04:
        stuff04:
        for i in 02 downto 1 generate
        for i in 02 downto 1 generate
                sadd32blk(i)  <= add32blko(i*width+width-1 downto i*width);
                sadd32blk(i)  <= add32blko(i*floatwidth+floatwidth-1 downto i*floatwidth);
        end generate stuff04;
        end generate stuff04;
 
 
 
 
        stuff03:
        stuff03:
        for i in 02 downto 0 generate
        for i in 02 downto 0 generate
                snormfifo_q(i) <= fifo32x23_q(i*width+width-1 downto i*width);
                snormfifo_q(i) <= fifo32x23_q(i*floatwidth+floatwidth-1 downto i*floatwidth);
                fifo32x26_d(i*width+width-1 downto i*width) <= snormfifo_d(i);
                fifo32x26_d(i*floatwidth+floatwidth-1 downto i*floatwidth) <= snormfifo_d(i);
        end generate stuff03;
        end generate stuff03;
 
 
        stuff02:
        stuff02:
        for i in 01 downto 0 generate
        for i in 01 downto 0 generate
                sdpfifo_q(i)  <= fifo32x09_q(i*width+width-1 downto i*width);
                sdpfifo_q(i)  <= fifo32x09_q(i*floatwidth+floatwidth-1 downto i*floatwidth);
        end generate stuff02;
        end generate stuff02;
 
 
        --! 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
                        for i in 05 downto 0 loop
                                sprd32blk(i)  <= prd32blko(i*width+width-1 downto i*width);
                                sprd32blk(i)  <= prd32blko(i*floatwidth+floatwidth-1 downto i*floatwidth);
                        end loop;
                        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) 
Line 189... Line 181...
        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*width+width-1 downto a0*width);
                        sadd32blk(a0) <= add32blko(a0*floatwidth+floatwidth-1 downto a0*floatwidth);
                        sadd32blk(aa) <= add32blko(aa*width+width-1 downto aa*width);
                        sadd32blk(aa) <= add32blko(aa*floatwidth+floatwidth-1 downto aa*floatwidth);
                        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.