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

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [arithpack.vhd] - Blame information for rev 27

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 23 jguarin200
--! @file arithpack.vhd
2
--! @author Juli‡n AndrŽs Guar’n Reyes
3
--! @brief Este package contiene la descripc’on de los parametros y los puertos de las entidades: uf, opcoder, multiplicador, sumador, cla_logic_block y rca_logic_block.
4 16 jguarin200
-- RAYTRAC
5
-- Author Julian Andres Guarin
6
-- arithpack.vhd
7
-- This file is part of raytrac.
8
-- 
9
--     raytrac is free software: you can redistribute it and/or modify
10
--     it under the terms of the GNU General Public License as published by
11
--     the Free Software Foundation, either version 3 of the License, or
12
--     (at your option) any later version.
13
-- 
14
--     raytrac is distributed in the hope that it will be useful,
15
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
16
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
--     GNU General Public License for more details.
18
-- 
19
--     You should have received a copy of the GNU General Public License
20
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.library ieee;
21
 
22
 
23 23 jguarin200
--! Biblioteca de definicion de senales y tipos estandares, comportamiento de operadores aritmeticos y logicos. 
24 22 jguarin200
library ieee;
25 23 jguarin200
--! Paquete de definicion estandard de logica.
26 2 jguarin200
use ieee.std_logic_1164.all;
27
 
28 8 jguarin200
 
29
 
30 23 jguarin200
--! Package con las definiciones de constantes y entidades, que conformar’an el Rt Engine.
31 8 jguarin200
 
32 23 jguarin200
--! En general el package cuenta con entidades para instanciar, multiplicadores, sumadores/restadores y un decodificador de operaciones. 
33 2 jguarin200
package arithpack is
34 10 jguarin200
 
35 23 jguarin200
        --! Constante con el nivel l—gico de reset.
36 15 jguarin200
        constant rstMasterValue : std_logic := '1';
37 8 jguarin200
 
38 23 jguarin200
        --! Entidad uf: sus siglas significan undidad funcional. La unidad funcional se encarga de realizar las diferentes operaciones vectoriales (producto cruz — producto punto). 
39 8 jguarin200
        component uf
40 27 jguarin200
        generic (
41
                        use_std_logic_signed    : string := "NO"
42
        );
43 8 jguarin200
        port (
44
                opcode          : in std_logic;
45 12 jguarin200
                m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : in std_logic_vector(17 downto 0);
46 13 jguarin200
                cpx,cpy,cpz,dp0,dp1 : out std_logic_vector(31 downto 0);
47 8 jguarin200
                clk,rst         : in std_logic
48
        );
49
        end component;
50
 
51 23 jguarin200
        --! 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.
52 8 jguarin200
        component opcoder
53 25 jguarin200
        generic (
54
                width : integer := 18;
55
                structuralDescription : string:= "NO"
56 26 jguarin200
        );
57 8 jguarin200
        port (
58
                Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,Az,Bz,Cz,Dz : in std_logic_vector (17 downto 0);
59 14 jguarin200
                m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : out std_logic_vector (17 downto 0);
60 8 jguarin200
                opcode,addcode : in std_logic
61
        );
62
        end component;
63 24 jguarin200
 
64
        --! Multiplexor estructural.
65 26 jguarin200
        component fastmux is
66 24 jguarin200
        generic (
67
                width : integer := 18
68 26 jguarin200
        );
69 24 jguarin200
        port (
70 26 jguarin200
                a,b:in std_logic_vector(width-1 downto 0);
71 24 jguarin200
                s:in std_logic;
72 26 jguarin200
                c: out std_logic_vector(width-1 downto 0)
73
        );
74
        end component;
75 23 jguarin200
        --! 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. 
76 2 jguarin200
        component r_a18_b18_smul_c32_r
77
        port (
78
                aclr,clock:in std_logic;
79
                dataa,datab:in std_logic_vector (17 downto 0);
80
                result: out std_logic_vector(31 downto 0)
81
        );
82
        end component;
83 23 jguarin200
 
84
        --! 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. 
85 2 jguarin200
        component cla_logic_block
86 27 jguarin200
        generic ( width: integer:=4);
87 2 jguarin200
        port (
88 27 jguarin200
                p,g:in std_logic_vector(width-1 downto 0);
89 2 jguarin200
                cin:in std_logic;
90 27 jguarin200
                c:out std_logic_vector(width downto 1)
91 2 jguarin200
        );
92
        end component;
93 23 jguarin200
 
94
        --! 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.
95 2 jguarin200
        component rca_logic_block
96 27 jguarin200
        generic ( width : integer := 4);
97 2 jguarin200
        port (
98 27 jguarin200
                p,g: in std_logic_vector(width-1 downto 0);
99 2 jguarin200
                cin: in std_logic;
100 27 jguarin200
                c: out std_logic_vector(width downto 1)
101 2 jguarin200
        );
102
        end component;
103 23 jguarin200
 
104
        --! Entidad sumador. Esta entidad tiene un proposito bien claro: sumar. Es altamente parametrizable. Hay 3 cosas que se pueden parametrizar: el ancho del sumador, el tipo de circuito que queremos realice la suma y si el sumador estar‡ en capacidad de realizar mediante un selector restas.
105 2 jguarin200
        component adder
106
        generic (
107 27 jguarin200
                width                                   : integer := 4;
108 14 jguarin200
                carry_logic                             : string := "CLA";
109
                substractor_selector    : string := "YES"
110 2 jguarin200
        );
111
        port (
112 27 jguarin200
                a,b             :       in std_logic_vector (width-1 downto 0);
113 2 jguarin200
                s,ci    :       in      std_logic;
114 27 jguarin200
                result  :       out std_logic_vector (width-1 downto 0);
115 2 jguarin200
                cout    :       out std_logic
116
        );
117
        end component;
118
 
119
end package;

powered by: WebSVN 2.1.0

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