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

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [arithpack.vhd] - Diff between revs 50 and 52

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

Rev 50 Rev 52
Line 28... Line 28...
--use ieee.std_logic_unsigned.conv_integer;
--use ieee.std_logic_unsigned.conv_integer;
 
 
 
 
--! Biblioteca de definicion de memorias de altera
--! Biblioteca de definicion de memorias de altera
library altera_mf;
library altera_mf;
 
 
--! Paquete para manejar memorias internas tipo M9K
--! Paquete para manejar memorias internas tipo M9K
use altera_mf.all;
use altera_mf.all;
 
 
--! Biblioteca de modulos parametrizados.
--! Biblioteca de modulos parametrizados.
library lpm;
library lpm;
Line 48... Line 49...
package arithpack is
package arithpack is
 
 
        --! TestBenchState
        --! TestBenchState
        type tbState is (abcd,axb,cxd,stop);
        type tbState is (abcd,axb,cxd,stop);
 
 
        --! Constante con el nivel l—gico de reset.
        --! Constante con el nivel lógico de reset.
        constant rstMasterValue : std_logic := '1';
        constant rstMasterValue : std_logic := '1';
 
 
        --! Constante: periodo del reloj;
        --! Constante: periodo del reloj, para una frecuencia de 50 MHz 
        constant tclk : time := 20 ns;
        constant tclk : time := 20 ns;
 
 
 
        --! Constante: medio periodo de reloj.
        constant tclk2: time := tclk/2;
        constant tclk2: time := tclk/2;
 
 
 
        --! Constante: cuarto de periodo del reloj.
        constant tclk4: time := tclk/4;
        constant tclk4: time := tclk/4;
 
 
 
 
        --! Generacion de Clock y de Reset.
        --! Generacion de Clock y de Reset.
        component clock_gen
        component clock_gen
Line 103... Line 108...
        port (
        port (
                        clock0  : in std_logic ;
                        clock0  : in std_logic ;
                        address_a       : in std_logic_vector (8 downto 0);
                        address_a       : in std_logic_vector (8 downto 0);
                        q_a     : out std_logic_vector (17 downto 0)
                        q_a     : out std_logic_vector (17 downto 0)
        );
        );
        end component;  --! Entidad uf: sus siglas significan undidad funcional. La unidad funcional se encarga de realizar las diferentes operaciones vectoriales (producto cruz — producto punto). 
        end component;  --! Entidad uf: sus siglas significan undidad funcional. La unidad funcional se encarga de realizar las diferentes operaciones vectoriales (producto cruz ó producto punto). 
 
 
        component uf
        component uf
        generic (
        generic (
                        use_std_logic_signed    : string := "NO";
                        use_std_logic_signed    : string := "NO";
                        testbench_generation    : string := "NO";
                        testbench_generation    : string := "NO";
Line 119... Line 124...
                cpx,cpy,cpz,dp0,dp1 : out std_logic_vector(31 downto 0);
                cpx,cpy,cpz,dp0,dp1 : out std_logic_vector(31 downto 0);
                        clk,rst         : in std_logic
                        clk,rst         : in std_logic
        );
        );
        end component;
        end component;
 
 
        --! Entidad opcoder: opcoder decodifica la operaci—n que se va a realizar. Para tal fin coloca en la entrada de uf (unidad funcional), cuales van a ser los operandos de los multiplicadores con los que uf cuenta y adem‡s escribe en el selector de operaci—n de uf, el tipo de operaci—n a realizar.
        --! Entidad opcoder: opcoder decodifica la operación que se va a realizar. Para tal fin coloca en la entrada de uf (unidad funcional), cuales van a ser los operandos de los multiplicadores con los que uf cuenta y adem‡s escribe en el selector de operación de uf, el tipo de operación a realizar.
        component opcoder
        component opcoder
        generic (
        generic (
                width : integer := 18;
                width : integer := 18;
                structuralDescription : string:= "NO"
                structuralDescription : string:= "NO"
        );
        );
Line 145... Line 150...
                c: out std_logic_vector(width-1 downto 0)
                c: out std_logic_vector(width-1 downto 0)
        );
        );
        end component;
        end component;
 
 
 
 
        --! Esta entidad corresponde al multiplicador que se instanciar’a dentro de la unidad funcional. El multiplicador registra los operandos a la entrada y el respectivo producto de la multiplicaci—n a la salida. 
        --! Esta entidad corresponde al multiplicador que se instanciaría dentro de la unidad funcional. El multiplicador registra los operandos a la entrada y el respectivo producto de la multiplicación a la salida. 
        component lpm_mult
        component lpm_mult
        generic (
        generic (
                lpm_hint                : string;
                lpm_hint                : string;
                lpm_pipeline            : natural;
                lpm_pipeline            : natural;
                lpm_representation              : string;
                lpm_representation              : string;
Line 168... Line 173...
        end component;
        end component;
 
 
 
 
 
 
 
 
        --! cla_logic_block corresponde a un bloque de l—gica Carry look Ahead. Se instancia y utiliza dentro de un sumador cualquiera, pues sirve para calcular los carry out de la operaci—n. 
        --! cla_logic_block corresponde a un bloque de lógica Carry look Ahead. Se instancia y utiliza dentro de un sumador cualquiera, pues sirve para calcular los carry out de la operación. 
        component cla_logic_block
        component cla_logic_block
        generic ( width: integer:=4);
        generic ( width: integer:=4);
        port (
        port (
                p,g:in std_logic_vector(width-1 downto 0);
                p,g:in std_logic_vector(width-1 downto 0);
                cin:in std_logic;
                cin:in std_logic;
                c:out std_logic_vector(width downto 1)
                c:out std_logic_vector(width downto 1)
        );
        );
        end component;
        end component;
 
 
        --! rca_logic_block corresponde a un bloque de l—gica Ripple Carry Adder. Se instancia y utiliza dentro de un sumador cualquiera, pues sirve para calcular los carry out de la operaci—n.
        --! rca_logic_block corresponde a un bloque de lógica Ripple Carry Adder. Se instancia y utiliza dentro de un sumador cualquiera, pues sirve para calcular los carry out de la operación.
        component rca_logic_block
        component rca_logic_block
        generic ( width : integer := 4);
        generic ( width : integer := 4);
        port (
        port (
                p,g: in std_logic_vector(width-1 downto 0);
                p,g: in std_logic_vector(width-1 downto 0);
                cin: in std_logic;
                cin: in std_logic;
Line 203... Line 208...
                result  :       out std_logic_vector (width-1 downto 0);
                result  :       out std_logic_vector (width-1 downto 0);
                cout    :       out std_logic
                cout    :       out std_logic
        );
        );
        end component;
        end component;
 
 
 
        --! Procedimiento para escribir std_logic_vectors en formato hexadecimal.
        procedure hexwrite_0(l:inout line; h: in std_logic_vector);
        procedure hexwrite_0(l:inout line; h: in std_logic_vector);
 
 
end package;
end package;
 
 
package body arithpack is
 
        --! Funciones utilitarias, relacionadas sobre todo con el testbench
        --! Funciones utilitarias, relacionadas sobre todo con el testbench
 
package body arithpack is
 
 
        constant hexchars : string (1 to 16) := "0123456789ABCDEF";
        constant hexchars : string (1 to 16) := "0123456789ABCDEF";
 
 
        procedure hexwrite_0(l:inout line;h:in std_logic_vector) is
        procedure hexwrite_0(l:inout line;h:in std_logic_vector) is
                variable index_high,index_low,highone : integer;
                variable index_high,index_low,highone : integer;
 
 

powered by: WebSVN 2.1.0

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