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

Subversion Repositories raytrac

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

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

Line No. Rev Author Line
1 23 jguarin200
--! @file arithpack.vhd
2 43 jguarin200
--! @author Julian Andres Guarin Reyes
3
--! @brief Este package contiene la descripcion 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 43 jguarin200
--! Biblioteca de definicion de memorias de altera
29
library altera_mf;
30 8 jguarin200
 
31 43 jguarin200
--! Paquete para manejar memorias internas tipo M9K
32 8 jguarin200
 
33 43 jguarin200
--! Package con las definiciones de constantes y entidades, que conformaran el Rt Engine. Tambien con algunas descripciones para realizar test bench.
34 8 jguarin200
 
35 23 jguarin200
--! En general el package cuenta con entidades para instanciar, multiplicadores, sumadores/restadores y un decodificador de operaciones. 
36 2 jguarin200
package arithpack is
37 10 jguarin200
 
38 45 jguarin200
        --! TestBenchState
39
        type tbState is (abcd,axb,cxd,stop);
40
 
41 23 jguarin200
        --! Constante con el nivel l—gico de reset.
42 15 jguarin200
        constant rstMasterValue : std_logic := '1';
43 40 jguarin200
 
44 42 jguarin200
        --! Generacion de Clock y de Reset.
45
        component clock_gen
46
                generic (tclk : time := 20 ns);
47
                port    (clk,rst : out std_logic);
48
        end component;
49
 
50 44 jguarin200
        --! Ray Trac: Implementacion del Rt Engine
51
        component raytrac
52
        generic (
53
 
54
                registered : string := "NO" --! Este parametro, por defecto "YES", indica si se registran o cargan en registros los vectores A,B,C,D y los codigos de operacion opcode y addcode en vez de ser conectados directamente al circuito combinatorio. \n This parameter, by default "YES", indicates if vectors A,B,C,D and operation code inputs opcode are to be loaded into a register at the beginning of the pipe rather than just connecting them to the operations decoder (opcoder). 
55
        );
56
        port (
57
                A,B,C,D                 : in std_logic_vector(18*3-1 downto 0); --! Vectores de entrada A,B,C,D, cada uno de tamano fijo: 3 componentes x 18 bits. \n Input vectors A,B,C,D, each one of fixed size: 3 components x 18 bits. 
58
                opcode,addcode  : in std_logic;                                                 --! Opcode and addcode input bits, opcode selects what operation is going to perform one of the entities included in the design and addcode what operands are going to be involved in such. \n Opcode & addcode, opcode selecciona que operacion se va a llevar a cabo dentro de una de las entidades referenciadas dentro de la descripcion, mientras que addcode decide cuales van a ser los operandos que realizaran tal. 
59
                clk,rst,ena                     : in std_logic;                                                 --! Las senales de control usual. The usual control signals.
60
                CPX,CPY,CPZ,DP0,DP1 : out std_logic_vector(31 downto 0)  --! Salidas que representan los resultados del RayTrac: pueden ser dos resultados, de dos operaciones de producto punto, o un producto cruz. Por favor revisar el documento de especificacion del dispositivo para tener mas claridad.\n  Outputs representing the result of the RayTrac entity: can be the results of two parallel dot product operations or the result of a single cross product, in order to clarify refere to the entity specification documentation.
61
 
62
 
63
        );
64
        end component;
65 42 jguarin200
 
66 44 jguarin200
        --! Componente memoria instanciado mediante la biblioteca de altera
67 43 jguarin200
        component altsyncram
68 40 jguarin200
        generic (
69 43 jguarin200
                address_aclr_a          : string;
70
                clock_enable_input_a            : string;
71
                clock_enable_output_a           : string;
72
                init_file               : string;
73
                intended_device_family          : string;
74
                lpm_hint                : string;
75
                lpm_type                : string;
76
                numwords_a              : natural;
77
                operation_mode          : string;
78
                outdata_aclr_a          : string;
79
                outdata_reg_a           : string;
80
                ram_block_type          : string;
81
                widthad_a               : natural;
82
                width_a         : natural;
83
                width_byteena_a         : natural
84 40 jguarin200
        );
85 43 jguarin200
        port (
86
                        clock0  : in std_logic ;
87
                        address_a       : in std_logic_vector (8 downto 0);
88
                        q_a     : out std_logic_vector (17 downto 0)
89
        );
90
        end component;  --! Entidad uf: sus siglas significan undidad funcional. La unidad funcional se encarga de realizar las diferentes operaciones vectoriales (producto cruz — producto punto). 
91
 
92 8 jguarin200
        component uf
93 27 jguarin200
        generic (
94 32 jguarin200
                        use_std_logic_signed    : string := "NO";
95
                        carry_logic     : string := "CLA"
96 27 jguarin200
        );
97 8 jguarin200
        port (
98
                opcode          : in std_logic;
99 12 jguarin200
                m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : in std_logic_vector(17 downto 0);
100 13 jguarin200
                cpx,cpy,cpz,dp0,dp1 : out std_logic_vector(31 downto 0);
101 40 jguarin200
                        clk,rst         : in std_logic
102 8 jguarin200
        );
103
        end component;
104
 
105 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.
106 8 jguarin200
        component opcoder
107 25 jguarin200
        generic (
108
                width : integer := 18;
109
                structuralDescription : string:= "NO"
110 26 jguarin200
        );
111 8 jguarin200
        port (
112
                Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,Az,Bz,Cz,Dz : in std_logic_vector (17 downto 0);
113 14 jguarin200
                m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : out std_logic_vector (17 downto 0);
114 8 jguarin200
                opcode,addcode : in std_logic
115
        );
116
        end component;
117 24 jguarin200
 
118
        --! Multiplexor estructural.
119 26 jguarin200
        component fastmux is
120 24 jguarin200
        generic (
121
                width : integer := 18
122 26 jguarin200
        );
123 24 jguarin200
        port (
124 26 jguarin200
                a,b:in std_logic_vector(width-1 downto 0);
125 24 jguarin200
                s:in std_logic;
126 26 jguarin200
                c: out std_logic_vector(width-1 downto 0)
127
        );
128
        end component;
129 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. 
130 2 jguarin200
        component r_a18_b18_smul_c32_r
131
        port (
132
                aclr,clock:in std_logic;
133
                dataa,datab:in std_logic_vector (17 downto 0);
134
                result: out std_logic_vector(31 downto 0)
135
        );
136
        end component;
137 23 jguarin200
 
138
        --! 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. 
139 2 jguarin200
        component cla_logic_block
140 27 jguarin200
        generic ( width: integer:=4);
141 2 jguarin200
        port (
142 27 jguarin200
                p,g:in std_logic_vector(width-1 downto 0);
143 2 jguarin200
                cin:in std_logic;
144 27 jguarin200
                c:out std_logic_vector(width downto 1)
145 2 jguarin200
        );
146
        end component;
147 23 jguarin200
 
148
        --! 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.
149 2 jguarin200
        component rca_logic_block
150 27 jguarin200
        generic ( width : integer := 4);
151 2 jguarin200
        port (
152 27 jguarin200
                p,g: in std_logic_vector(width-1 downto 0);
153 2 jguarin200
                cin: in std_logic;
154 27 jguarin200
                c: out std_logic_vector(width downto 1)
155 2 jguarin200
        );
156
        end component;
157 23 jguarin200
 
158
        --! 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.
159 2 jguarin200
        component adder
160
        generic (
161 27 jguarin200
                width                                   : integer := 4;
162 14 jguarin200
                carry_logic                             : string := "CLA";
163
                substractor_selector    : string := "YES"
164 2 jguarin200
        );
165
        port (
166 27 jguarin200
                a,b             :       in std_logic_vector (width-1 downto 0);
167 2 jguarin200
                s,ci    :       in      std_logic;
168 27 jguarin200
                result  :       out std_logic_vector (width-1 downto 0);
169 2 jguarin200
                cout    :       out std_logic
170
        );
171
        end component;
172
 
173
end package;

powered by: WebSVN 2.1.0

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