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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp_sgdma/] [arithpack.vhd] - Diff between revs 213 and 219

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

Rev 213 Rev 219
Line 17... Line 17...
 
 
 
 
package arithpack is
package arithpack is
 
 
        --!Constantes usadas por los RTLs
        --!Constantes usadas por los RTLs
        constant qz : integer := 00;constant qy : integer := 01;constant qx : integer := 02;constant sc : integer := 03;
        constant qz : integer := 00;constant qy : integer := 01;constant qx : integer := 02;constant qsc: integer := 03;
        constant az : integer := 00;constant ay : integer := 01;constant ax : integer := 02;constant bz : integer := 03;constant by : integer := 04;constant bx : integer := 05;
        constant az : integer := 00;constant ay : integer := 01;constant ax : integer := 02;constant bz : integer := 03;constant by : integer := 04;constant bx : integer := 05;
        constant f0     : integer := 00;constant f1 : integer := 01;constant f2 : integer := 02;constant f3 : integer := 03;constant f4 : integer := 04;constant f5 : integer := 05;
        constant f0     : integer := 00;constant f1 : integer := 01;constant f2 : integer := 02;constant f3 : integer := 03;constant f4 : integer := 04;constant f5 : integer := 05;
        constant f6     : integer := 06;constant f7 : integer := 07;constant f8 : integer := 08;constant f9 : integer := 09;constant f10: integer := 10;constant f11: integer := 11;
        constant f6     : integer := 06;constant f7 : integer := 07;constant f8 : integer := 08;constant f9 : integer := 09;constant f10: integer := 10;constant f11: integer := 11;
        constant s0     : integer := 00;constant s1 : integer := 01;constant s2 : integer := 02;constant s3 : integer := 03;constant s4 : integer := 04;constant s5 : integer := 05;
        constant s0     : integer := 00;constant s1 : integer := 01;constant s2 : integer := 02;constant s3 : integer := 03;constant s4 : integer := 04;constant s5 : integer := 05;
        constant a0     : integer := 00;constant a1 : integer := 01;constant a2 : integer := 02;
        constant a0     : integer := 00;constant a1 : integer := 01;constant a2 : integer := 02;
        constant p0     : integer := 00;constant p1 : integer := 01;constant p2 : integer := 02;constant p3 : integer := 03;constant p4 : integer := 04;constant p5 : integer := 05;
        constant p0     : integer := 00;constant p1 : integer := 01;constant p2 : integer := 02;constant p3 : integer := 03;constant p4 : integer := 04;constant p5 : integer := 05;
 
 
        constant index_control_register : integer := 00;
 
        constant index_start_address_r  : integer := 01;
 
        constant index_end_address_r    : integer := 02;
 
        constant index_start_address_w  : integer := 03;
 
        constant index_end_address_w    : integer := 04;
 
        constant index_scratch_register : integer := 05;
 
 
 
        --! Máquina de estados.
 
 
 
 
 
        --! Control de tamaños de memoria.
 
        constant widthadmemblock : integer := 9;
 
 
 
        subtype xfloat32 is std_logic_vector(31 downto 0);
        subtype xfloat32 is std_logic_vector(31 downto 0);
        type    v3f     is array(02 downto 0) of xfloat32;
        type    v3f     is array(02 downto 0) of xfloat32;
 
 
        --! Constantes para definir bloques de valores de 32 bits single float
        --! Constantes para definir bloques de valores de 32 bits single float
Line 58... Line 46...
        constant tclk   : time := 20 ns;
        constant tclk   : time := 20 ns;
        constant tclk_2 : time := tclk/2;
        constant tclk_2 : time := tclk/2;
        constant tclk_4 : time := tclk/4;
        constant tclk_4 : time := tclk/4;
 
 
 
 
        component raytrac
 
        port (
 
 
 
                clk : in std_logic;
 
                rst : in std_logic;
 
                --! Interface Avalon Master
 
                address_master  : out   std_logic_vector(31 downto 0);
 
                begintransfer   : out   std_logic;
 
                read_master             : out   std_logic;
 
                readdata_master : in    std_logic_vector (31 downto 0);
 
                write_master    : out   std_logic;
 
                writedata_master: out   std_logic_vector (31 downto 0);
 
                waitrequest             : in    std_logic_vector;
 
                readdatavalid_m : in    std_logic_vector;
 
                --! Interface Avalon Slave
 
                address_slave   : in    std_logic_vector(3 downto 0);
 
                read_slave              : in    std_logic;
 
                readdata_slave  : in    std_logic_vector(31 downto 0);
 
                write_slave             : in    std_logic;
 
                writedata_slave : in    std_logic_vector(31 downto 0);
 
                readdatavalid_s : out   std_logic;
 
                --! Interface Interrupt Sender
 
                irq     : out std_logic
 
        );
 
        end component;
 
 
 
        component raytrac_control
 
        port (
 
 
 
                --! Señales normales de secuencia.
 
                clk:                    in std_logic;
 
                rst:                    in std_logic;
 
 
 
                --! Interface Avalon Master
 
                begintransfer   : out   std_logic;
 
                address_master  : out   std_logic_vector(31 downto 0);
 
                read_master             : out   std_logic;
 
                write_master    : out   std_logic;
 
                waitrequest             : in    std_logic;
 
                readdatavalid_m : in    std_logic;
 
 
 
                --! Interface Avalon Slave
 
                address_slave   : in    std_logic_vector(3 downto 0);
 
                read_slave              : in    std_logic;
 
                readdata_slave  : out   std_logic_vector(31 downto 0);
 
                write_slave             : in    std_logic;
 
                writedata_slave : in    std_logic_vector(31 downto 0);
 
                readdatavalid_s : out   std_logic;
 
 
 
                --! Interface Interrupt Sender
 
                irq     : out std_logic;
 
 
 
                --! Señales de Control (Memblock)
 
                go                      : out std_logic;
 
                comb            : out std_logic;
 
                load            : out std_logic;
 
                load_chain      : out std_logic_vector(1 downto 0);
 
                qparams_e       : in std_logic;
 
                qresult_e       : in std_logic_vector(3 downto 0);
 
 
 
                --! Señles de Control de Datapath (DPC)
 
                qparams_q       : in  xfloat32;
 
                d                       : out std_logic;
 
                c                       : out std_logic;
 
                s                       : out std_logic;
 
                qresult_sel     : out std_logic_vector(1 downto 0)
 
        );
 
        end component;
 
 
 
        --! Bloque de memorias
 
        component memblock
 
        port (
 
 
 
                --!Entradas de Control
 
                clk             : in std_logic;
 
                rst             : in std_logic;
 
                go                      : in std_logic;
 
                comb            : in std_logic;
 
                load            : in std_logic;
 
                load_chain      : in std_logic_vector(1 downto 0);
 
 
 
 
 
                --! Cola de parámetros 
 
                readdatavalid   : in std_logic;
 
                readdata_master : in xfloat32;
 
                qparams_r               : in std_logic;
 
                qparams_e               : out std_logic;
 
 
 
                --! Cola de resultados          
 
                qresult_d       : in vectorblock04;
 
                qresult_q       : out vectorblock04;
 
 
 
                --! Registro de parámetros
 
                paraminput      : out vectorblock06;
 
 
 
                --! Cadena de sincronización
 
                sync_chain_0    : out std_logic;
 
 
 
                --! señales de colas vacias
 
                qresult_e       : out std_logic_vector(3 downto 0);
 
 
 
 
 
 
 
                --! Colas de resultados
 
                qresult_w               : in std_logic_vector(3 downto 0);
 
                qresult_rdec    : in std_logic_vector(3 downto 0)
 
 
 
        );
 
        end component;
 
        --! Bloque decodificacion DataPath Control.
 
        component dpc
 
        port (
 
                clk                                             : in    std_logic;
 
                rst                                             : in    std_logic;
 
 
 
                paraminput                              : in    vectorblock06;  --! Vectores A,B
 
 
 
                prd32blko                               : in    vectorblock06;  --! Salidas de los 6 multiplicadores.
 
                add32blko                               : in    vectorblock03;  --! Salidas de los 3 sumadores.
 
                inv32blko                               : in    xfloat32;               --! Salidas de la raiz cuadradas y el inversor.
 
                sqr32blko                               : in    xfloat32;               --! Salidas de la raiz cuadradas y el inversor.
 
 
 
 
 
                d,c,s                                   : 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.
 
 
 
                qresult_q                               : in    vectorblock04;  --! Salida de las colas de resultados
 
                qresult_sel                             : in    std_logic_vector (1 downto 0); --! Direccion con el resultado de la
 
                qresult_rdec                    : out   std_logic_vector (3 downto 0); --!Señales de escritura decodificadas
 
                qresult_w                               : out   std_logic_vector (3 downto 0);                           --! Salidas de escritura y lectura en las colas de resultados.
 
                qresult_d                               : out   vectorblock04; --! 4 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores. 
 
 
 
                dataread                                : in    std_logic;
 
 
 
 
 
                prd32blki                               : out   vectorblock12;  --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
 
                add32blki                               : out   vectorblock06;  --! Entrada de los 6 sumandos del bloque de 3 sumadores.  
 
 
 
                dataout                                 : out   xfloat32
 
 
 
        );
 
        end component;
 
        --! Bloque Aritmetico de Sumadores y Multiplicadores (madd)
 
        component arithblock
 
        port (
 
 
 
                clk     : in std_logic;
 
                rst : in std_logic;
 
 
 
                sign            : in std_logic;
 
 
 
                prd32blki       : in vectorblock12;
 
                add32blki       : in vectorblock06;
 
 
 
                add32blko       : out vectorblock03;
 
                prd32blko       : out vectorblock06;
 
 
 
                sq32o           : out xfloat32;
 
                inv32o          : out xfloat32
 
 
 
        );
 
        end component;
 
        --! Componentes Aritméticos
 
        component fadd32
 
        port (
 
                clk : in std_logic;
 
                dpc : in std_logic;
 
                a32 : in xfloat32;
 
                b32 : in xfloat32;
 
                c32 : out xfloat32
 
        );
 
        end component;
 
        component fmul32
 
        port (
 
                clk : in std_logic;
 
                a32 : in xfloat32;
 
                b32 : in xfloat32;
 
                p32 : out xfloat32
 
        );
 
        end component;
 
        --! Bloque de Raiz Cuadrada
 
        component sqrt32
 
        port (
 
 
 
                clk     : in std_logic;
 
                rd32: in xfloat32;
 
                sq32: out xfloat32
 
        );
 
        end component;
 
        --! Bloque de Inversores.
 
        component invr32
 
        port (
 
 
 
                clk             : in std_logic;
 
                dvd32   : in xfloat32;
 
                qout32  : out xfloat32
 
        );
 
        end component;
 
        --! Contadores para la máquina de estados.
 
 
 
        component customCounter
 
        port (
 
                clk                             : in std_logic;
 
                rst                             : in std_logic;
 
                stateTrans                      : in std_logic;
 
                waitrequest_n   : in std_logic;
 
                endaddress              : in std_logic_vector (31 downto 2); --! Los 5 bits de arriba.
 
                startaddress    : in std_logic_vector(31 downto 0);
 
                endaddressfetch : out std_logic;
 
                address_master  : out std_logic_vector (31 downto 0)
 
        );
 
        end component;
 
 
 
        --! LPM_MULTIPLIER
 
        component lpm_mult
 
        generic (
 
                lpm_hint                        : string;
 
                lpm_pipeline            : natural;
 
                lpm_representation      : string;
 
                lpm_type                        : string;
 
                lpm_widtha                      : natural;
 
                lpm_widthb                      : natural;
 
                lpm_widthp                      : natural
 
        );
 
        port (
 
                dataa   : in std_logic_vector ( lpm_widtha-1 downto 0 );
 
                datab   : in std_logic_vector ( lpm_widthb-1 downto 0 );
 
                result  : out std_logic_vector( lpm_widthp-1 downto 0 )
 
        );
 
        end component;
 
        --! LPM Memory Compiler.
 
--      component scfifo
 
--      generic (
 
--              add_ram_output_register :string;
 
--              allow_rwcycle_when_full :string;
 
--              intended_device_family  :string;
 
--              lpm_hint                                :string;
 
--              lpm_numwords                    :natural;
 
--              lpm_showahead                   :string;
 
--              lpm_type                                :string;
 
--              lpm_width                               :natural;
 
--              overflow_checking               :string;
 
--              underflow_checking              :string;
 
--              use_eab                                 :string 
 
--      );
 
--      port(
 
--              rdreq           : in std_logic;
 
--              aclr            : in std_logic;
 
--              empty           : out std_logic;
 
--              clock           : in std_logic;
 
--              q                       : out std_logic_vector(lpm_width-1 downto 0);
 
--              wrreq           : in std_logic;
 
--              data            : in std_logic_vector(lpm_width-1 downto 0);
 
--              almost_full : out std_logic;
 
--              full            : out std_logic
 
--      );
 
--      end component;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        type apCamera is record
        type apCamera is record
                resx,resy : integer;
                resx,resy : integer;
                width,height : real;
                width,height : real;

powered by: WebSVN 2.1.0

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