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

Subversion Repositories raytrac

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

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

Line No. Rev Author Line
1 16 jguarin200
------------------------------------------------
2
--! @file
3 18 jguarin200
--! @brief Entidad top del Rt Engine \n Rt Engine's top hierarchy.
4 16 jguarin200
--------------------------------------------------
5
 
6
 
7 11 jguarin200
-- RAYTRAC
8
-- Author Julian Andres Guarin
9
-- raytrac.vhd
10
-- This file is part of raytrac.
11
-- 
12
--     raytrac is free software: you can redistribute it and/or modify
13
--     it under the terms of the GNU General Public License as published by
14
--     the Free Software Foundation, either version 3 of the License, or
15
--     (at your option) any later version.
16
-- 
17
--     raytrac is distributed in the hope that it will be useful,
18
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
19
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
--     GNU General Public License for more details.
21
-- 
22
--     You should have received a copy of the GNU General Public License
23 16 jguarin200
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>
24 11 jguarin200
 
25 18 jguarin200
--! Libreria de definicion de senales y tipos estandares, comportamiento de operadores aritmeticos y logicos.\n Signal and types definition library. This library also defines 
26 11 jguarin200
library ieee;
27 16 jguarin200
--! Paquete de definicion estandard de logica. Standard logic definition pack.
28 11 jguarin200
use ieee.std_logic_1164.all;
29 16 jguarin200
 
30 18 jguarin200
--! Se usaran en esta descripcion los componentes del package arithpack.vhd.\n It will be used in this description the components on the arithpack.vhd package. 
31 11 jguarin200
use work.arithpack.all;
32
 
33 18 jguarin200
--! La entidad raytrac es la top en la jerarquia de descripcion del Rt Engine.\n Raytrac entity is the top one on the Rt Engine description hierarchy.
34 11 jguarin200
 
35 16 jguarin200
--! RayTrac es basicamente una entidad que toma las entradas de cuatro vectores: A,B,C,D y las entradas opcode y addcode.
36 18 jguarin200
--! En el momento de la carga se llevaran a cabo las siguientes operaciones: \n
37
--! - Producto Cruz (opcode = 1):
38
--! - Cross Product (opcode = 1):
39
--! \n\n
40
--! \t Los resultados apareceran 3 clocks despues de la carga de los operadores y el codigo operacion
41
--! \n\n  
42
--! <table>
43
--! <tr>
44
--! <th></th>
45
--! <th></th><th>addcode=0</th><th></th>
46
--! </tr>
47
--! <tr>
48
--! <th>Opcode 1</th>
49
--! <td>CPX <= AxB<B> i</B></td>
50
--! <td>CPY <= AxB<B> j</B></td>
51
--! <td>CPZ <= AxB<B> k</B></td>
52
--! </tr>
53
--! </table>
54
--! \n
55
--! <table>
56
--! <tr>
57
--! <th></th>
58
--! <th></th><th>addcode=1</th><th></th>
59
--! </tr>
60
--! <tr>
61
--! <th>Opcode 1</th>
62
--! <td>CPX <= CxD<B> i</B></td>
63
--! <td>CPY <= CxD<B> j</B></td>
64
--! <td>CPZ <= CxD<B> k</B></td>
65
--! </tr>
66
--! </table>
67
--! \n
68
--! - Producto Punto (opcode = 0):
69
--! - Dot Product (opcode = 0):
70
--! \n\n
71 20 jguarin200
--! \t Los resultados se encontraran en DP0 y DP1 4 clocks despues de la carga.
72
--! \n\n 
73 18 jguarin200
--! <table>
74
--! <tr>
75
--! <th></th><th>addcode, ignorar</th> 
76
--! </tr>
77
--! <tr>
78
--! <th>opcode=0</th><td> DP0 = A.B, DP1 = C.D</td>
79
--! </tr>
80
--! </table>
81
 
82
 
83 11 jguarin200
entity raytrac is
84
        generic (
85 20 jguarin200
                registered : string := "YES" --! 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). 
86 11 jguarin200
        );
87
        port (
88 20 jguarin200
                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. 
89
                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. 
90
                clk,rst,ena             : in std_logic;                                                 --! Las senales de control usual. The usual control signals.
91
                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.
92 11 jguarin200
 
93 14 jguarin200
 
94 11 jguarin200
        );
95
end raytrac;
96
 
97 18 jguarin200
--! Arquitectura general del RayTrac. \n RayTrac general architecture.
98
 
99
--! La Arquitectura general de RayTrac se consiste en 3 componentes esenciales:
100
--! - Etapa de registros para la carga de los operadores y el codigo de operacion.
101
--! - Etapa combinatoria para la seleccion de operadores, dependiendo del codigo de operacion.
102 20 jguarin200
--! - Etapa aritmetica del calculo del producto punto o el producto cruz segun el caso.
103
--! \n\n
104 21 jguarin200
--! Las senales referidas en la arquitectura simplemente son conectores asignadas en la instanciaci&oacute;n de los componentes y en la asignacion entre ellas mismas en los procesos explicitos.
105 20 jguarin200
--! \n\n
106
--! RayTrac general architecture is made of 3 essential components: 
107
--! - Register stage to load operation code and operators.
108
--! - Combinatory Stage to operator selection, depending on the operation code.
109
--! - Arithmetic stage to calculate dot product or cross product, depending on the case.
110
--! \n\n 
111
--! Referred signals in the architecture are simple connectors assigned in the components intantiation and in the assignation among them in explicit processes.  
112
 
113 18 jguarin200
 
114 11 jguarin200
architecture raytrac_arch of raytrac is
115 20 jguarin200
        signal SA,SB,SC,SD                      : std_logic_vector(18*3-1 downto 0); --! Signal to register or bypass the vector inputs.  
116 11 jguarin200
        signal sopcode,saddcode         : std_logic;
117
        signal smf00,smf01,smf10,smf11,smf20,smf21,smf30,smf31,smf40,smf41,smf50,smf51  : std_logic_vector(17 downto 0);
118
 
119
begin
120
 
121
        reg:
122
        if registered="YES" generate
123 20 jguarin200
 
124
                --! By default: the inputs are going to be registered or loaded. This process describes how the register loading is to be make. \n Por defecto: las entradas se van a registrar o cargar. Este proceso describe como la carga de los registros con los valores de las entradas se va a realizar. 
125 14 jguarin200
                procReg:
126 11 jguarin200
                process(clk,rst)
127
                begin
128
                        if rst=rstMasterValue then
129
                                SA <= (others => '0');
130
                                SB <= (others => '0');
131
                                SC <= (others => '0');
132
                                SD <= (others => '0');
133 14 jguarin200
                                sopcode <= '0';
134
                                saddcode <= '0';
135 11 jguarin200
                        elsif clk'event and clk='1' then
136
                                if ena <= '1' then
137
                                        SA <= A;
138
                                        SB <= B;
139
                                        SC <= C;
140
                                        SD <= D;
141
                                        sopcode <= opcode;
142
                                        saddcode <= addcode;
143
                                end if;
144
                        end if;
145 14 jguarin200
                end process procReg;
146 11 jguarin200
        end generate reg;
147 20 jguarin200
 
148
        notreg:
149
        if registered="NO" generate
150
                --! Just bypass or connect the inputs to the opcoder.
151
                procNotReg:
152
                process (A,B,C,D,opcode,addcode)
153
                begin
154
                        SA <= A;
155
                        SB <= B;
156
                        SC <= C;
157
                        SD <= D;
158
                        sopcode <= opcode;
159
                        saddcode <= addcode;
160
                end process procNotReg;
161
        end generate notreg;
162
 
163
        --! Instantiate Opcoder 
164 11 jguarin200
        opcdr : opcoder
165
        port map (
166
                SA(17 downto 0),SB(17 downto 0),SC(17 downto 0),SD(17 downto 0),SA(35 downto 18),SB(35 downto 18),SC(35 downto 18),SD(35 downto 18),SA(53 downto 36),SB(53 downto 36),SC(53 downto 36),SD(53 downto 36),
167
                smf00,smf01,smf10,smf11,smf20,smf21,smf30,smf31,smf40,smf41,smf50,smf51,
168
                sopcode,saddcode
169
        );
170 20 jguarin200
        --! Instantiate uf, cross product and dot product functional unit.
171 11 jguarin200
        uf0 : uf
172
        port map (
173
                sopcode,
174
                smf00,smf01,smf10,smf11,smf20,smf21,smf30,smf31,smf40,smf41,smf50,smf51,
175
                CPX,CPY,CPZ,DP0,DP1,
176
                clk,rst
177
        );
178
 
179
end raytrac_arch;
180
 
181
 
182
 

powered by: WebSVN 2.1.0

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