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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp/] [raytrac.vhd] - Blame information for rev 177

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

Line No. Rev Author Line
1 150 jguarin200
--! @file raytrac.vhd
2
--! @brief Archivo con el RTL que describe al RayTrac en su totalidad.
3
 
4
--! @author Julián Andrés Guarín Reyes
5
--------------------------------------------------------------
6
-- RAYTRAC
7
-- Author Julian Andres Guarin
8 151 jguarin200
-- Rytrac.vhd
9 150 jguarin200
-- This file is part of raytrac.
10
-- 
11
--     raytrac is free software: you can redistribute it and/or modify
12
--     it under the terms of the GNU General Public License as published by
13
--     the Free Software Foundation, either version 3 of the License, or
14
--     (at your option) any later version.
15
-- 
16
--     raytrac is distributed in the hope that it will be useful,
17
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
18
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
--     GNU General Public License for more details.
20
-- 
21
--     You should have received a copy of the GNU General Public License
22
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.
23
 
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27 151 jguarin200
use work.arithpack.all;
28 150 jguarin200
 
29
entity raytrac is
30
        port (
31
 
32
                clk : in std_logic;
33
                rst : in std_logic;
34
 
35
                --! Se&ntilde;al de lectura de alguna de las colas de resultados.
36
                rd      : in std_logic;
37
 
38
                --! Se&ntilde;al de escritura en alguno de los bloques de memoria de operandos o en la cola de instrucciones.
39
                wr      : in std_logic;
40
 
41
                --! Direccion de escritura o lectura
42
                add : in std_logic_vector (12 downto 0);
43
 
44
                --! datos de entrada
45
                d       : in std_logic_vector (31 downto 0);
46
 
47
                --! Interrupciones
48 177 jguarin200
                int07,int06,int05,int04,int03,int02,int01,int00 : out std_logic;
49 150 jguarin200
 
50
                --! Salidas
51 152 jguarin200
                q : out std_logic_vector (31 downto 0)
52 150 jguarin200
 
53 151 jguarin200
 
54 150 jguarin200
 
55
        );
56
end entity;
57
 
58
architecture raytrac_arch of raytrac is
59
 
60 151 jguarin200
        --! Se&ntilde;ales de State Machine -> Memblock
61
        --!TBXSTART:SM
62 157 jguarin200
        signal s_int_rd_add             : std_logic_vector (17 downto 0);
63 151 jguarin200
        signal s_adda                   : std_logic_vector (8 downto 0);
64
        signal s_addb                   : std_logic_vector (8 downto 0);
65
        signal s_iq_rd_ack              : std_logic;
66
        --! Se&ntilde;ales de State Machine -> DataPathControl
67
        signal s_sync_chain_0   : std_logic;
68
        signal s_dpc_uca                : std_logic_vector(2 downto 0);
69
        signal s_eoi                    : std_logic;
70 163 jguarin200
        signal s_sign                   : std_logic;
71 161 jguarin200
        --!TBXEND
72 151 jguarin200
        --! Se&ntilde;ales de State Machine -> Testbench
73
        signal s_smState                : macState;
74 161 jguarin200
 
75
 
76
 
77
 
78
 
79
 
80 151 jguarin200
        --!TBXSTART:MBLK
81 150 jguarin200
        --! Se&ntilde;ales de Memblock -> State Machine
82
        signal s_iq_empty               : std_logic;
83
        signal s_iq                             : std_logic_vector (31 downto 0);
84
        --! Se&ntilde;ales de Memblock -> Interruption Machine
85
        signal s_rfull_events   : std_logic_vector (3 downto 0); --Estas se&ntilde;ales tambien entran a DPC.
86
        --! Se&ntilde;ales de Memblock -> DPC.
87 158 jguarin200
        signal s_q                              : vectorblock12;
88 150 jguarin200
        signal s_normfifo_q             : std_logic_vector (3*32-1 downto 0);
89
        signal s_dpfifo_q               : std_logic_vector (2*32-1 downto 0);
90 151 jguarin200
        --!TBXEND
91 160 jguarin200
        --!TXBXSTART:SQR32
92 151 jguarin200
        --!Se&ntilde;ales de Bloque de Ra&iacute;z Cuadrada a DPC
93
        signal s_sq32                   : std_logic_vector (31 downto 0);
94
        --!TBXEND
95 160 jguarin200
        --!TXBXSTART:INV32
96 151 jguarin200
        --!Se&ntilde;ales del bloque inversor a DPC.
97
        signal s_qout32                 : std_logic_vector (31 downto 0);
98
        --!TBXEND
99 160 jguarin200
        --!TXBXSTART:DPC
100 150 jguarin200
        --! Se&ntilde;ales de DataPathControl -> State Machine
101
        signal s_full_r                 : std_logic;
102
        --! Se&ntilde;ales de DPC a sqrt32.
103
        signal s_rd32                   : std_logic_vector (31 downto 0);
104 151 jguarin200
        --! Se&ntilde;ales de DPC a inv32.
105
        signal s_dvd32                  : std_logic_vector (31 downto 0);
106 150 jguarin200
        --! Se&ntilde;ales de DPC  a invr32.
107
        --! Se&ntilde que va desde DPC -> Memblock
108 157 jguarin200
        signal s_resultfifo_wr  : std_logic_vector (7 downto 0);
109 150 jguarin200
        signal s_dpfifo_w               : std_logic;
110
        signal s_dpfifo_r               : std_logic;
111
        signal s_dpfifo_d               : std_logic_vector (2*32-1 downto 0);
112
        signal s_normfifo_w             : std_logic;
113
        signal s_normfifo_r             : std_logic;
114 158 jguarin200
        signal s_results_d              : vectorblock08;
115 150 jguarin200
        signal s_normfifo_d             : std_logic_vector (3*32-1 downto 0);
116 151 jguarin200
        --!Se&ntilde;ales de DPC a Interruption Machine
117
        signal s_eoi_events             : std_logic_vector (3 downto 0);
118
        --! Se&ntilde;ales de DPC a ArithBlock
119 158 jguarin200
        signal s_f                              : vectorblock12;
120
        signal s_a                              : vectorblock08;
121 151 jguarin200
        --! Parcialmente las se&ntilde;ales de salida de los sumadores van al data path control.
122 158 jguarin200
        signal s_s                              : vectorblock04;
123
        signal s_p                              : vectorblock06;
124 151 jguarin200
        --!TBXEND
125 172 jguarin200
        signal s_resultsfifo_w  : std_logic_vector (4 downto 0);
126
 
127 151 jguarin200
        --!TBXSTART:IM
128
        --! Se&ntilde;ales de Interruption Machine al testbench
129
        signal s_iCtrlState             : iCtrlState;
130 177 jguarin200
        signal s_int                    : std_logic_vector (7 downto 0);
131 151 jguarin200
        --!TBXEND       
132 150 jguarin200
begin
133 177 jguarin200
 
134
        --! Sacar las interrupciones
135
        int07 <= s_int(7);
136
        int06 <= s_int(6);
137
        int05 <= s_int(5);
138
        int04 <= s_int(4);
139
        int03 <= s_int(3);
140
        int02 <= s_int(2);
141
        int01 <= s_int(1);
142
        int00 <= s_int(0);
143 151 jguarin200
 
144 163 jguarin200
        --! Signo de los bloques de suma
145
        s_sign <= not(s_dpc_uca(2)) and s_dpc_uca(1);
146 150 jguarin200
        --! Instanciar el bloque de memorias MEMBLOCK
147 157 jguarin200
        s_resultfifo_wr <= s_resultsfifo_w(4)&s_resultsfifo_w(4)&s_resultsfifo_w(4)&s_resultsfifo_w(3)&s_resultsfifo_w(2)&s_resultsfifo_w(1)&s_resultsfifo_w(2)&s_resultsfifo_w(0);
148
        s_int_rd_add  <= s_addb&s_adda;
149 152 jguarin200
        --!TBXINSTANCESTART
150 150 jguarin200
        MemoryBlock : memblock
151
        generic map (
152
                blocksize                                       => 512,
153
                external_readable_widthad       => 3,
154
                external_writeable_widthad      => 4
155
        )
156
        port map (
157
                clk                                     => clk,
158
                rst                                     => rst,
159
                dpfifo_rd                       => s_dpfifo_r,
160
                normfifo_rd                     => s_normfifo_r,
161
                dpfifo_wr                       => s_dpfifo_w,
162
                normfifo_wr                     => s_normfifo_w,
163
                instrfifo_rd            => s_iq_rd_ack,
164 157 jguarin200
                resultfifo_wr           => s_resultfifo_wr,
165 150 jguarin200
                instrfifo_empty         => s_iq_empty,
166
                ext_rd                          => rd,
167
                ext_wr                          => wr,
168
                ext_wr_add                      => add,
169
                ext_rd_add                      => add(12 downto 10),
170
                ext_d                           => d,
171
                resultfifo_full         => s_rfull_events,
172
                int_d                           => s_results_d,
173
                ext_q                           => q,
174
                instrfifo_q                     => s_iq,
175
                int_q                           => s_q,
176 157 jguarin200
                int_rd_add                      => s_int_rd_add,
177 150 jguarin200
                dpfifo_d                        => s_dpfifo_d,
178
                normfifo_d                      => s_normfifo_d,
179
                dpfifo_q                        => s_dpfifo_q,
180
                normfifo_q                      => s_normfifo_q
181
        );
182 152 jguarin200
        --!TBXINSTANCEEND
183 150 jguarin200
 
184
        --! Instanciar el bloque DPC
185 152 jguarin200
        --!TBXINSTANCESTART
186 150 jguarin200
        DataPathControl_And_Syncronization_Block: dpc
187
        port map (
188
 
189
                clk                             => clk,
190
                rst                             => rst,
191
                paraminput              => s_q,
192
                prd32blko               => s_p,
193
                add32blko               => s_s,
194
                sqr32blko               => s_sq32,
195
                inv32blko               => s_qout32,
196
                fifo32x23_q             => s_normfifo_q,
197
                fifo32x09_q             => s_dpfifo_q,
198
                unary                   => s_dpc_uca(2),
199
                crossprod               => s_dpc_uca(1),
200
                addsub                  => s_dpc_uca(0),
201
                sync_chain_0    => s_sync_chain_0,
202
                eoi_int                 => s_eoi,
203
                eoi_demuxed_int => s_eoi_events,
204
                sqr32blki               => s_rd32,
205
                inv32blki               => s_dvd32,
206
                fifo32x26_d             => s_normfifo_d,
207
                fifo32x09_d             => s_dpfifo_d,
208
                prd32blki               => s_f,
209
                add32blki               => s_a,
210
                resw                    => s_resultsfifo_w,
211
                fifo32x09_w             => s_dpfifo_w,
212
                fifo32x23_w             => s_normfifo_w,
213
                fifo32x09_r             => s_dpfifo_r,
214
                fifo32x23_r             => s_normfifo_r,
215
                resf_vector             => s_rfull_events,
216
                resf_event              => s_full_r,
217
                resultoutput    => s_results_d
218
        );
219 152 jguarin200
        --!TBXINSTANCEEND
220 150 jguarin200
 
221
 
222
        --! Instanciar el bloque de inversion
223 152 jguarin200
        --!TBXINSTANCESTART
224 150 jguarin200
        inversion_block : invr32
225
        port map (
226
                clk             => clk,
227
                dvd32   => s_dvd32,
228
                qout32  => s_qout32
229
        );
230 152 jguarin200
        --!TBXINSTANCEEND
231 150 jguarin200
 
232 151 jguarin200
        --! Instanciar el bloque de ra&iacute;z cuadrada.
233 152 jguarin200
        --!TBXINSTANCESTART
234 150 jguarin200
        square_root : sqrt32
235
        port map (
236
                clk     => clk,
237
                rd32    => s_rd32,
238
                sq32    => s_sq32
239
        );
240 152 jguarin200
        --!TBXINSTANCEEND
241 150 jguarin200
 
242 151 jguarin200
        --! Instanciar el bloque aritm&eacute;tico.
243 152 jguarin200
        --!TBXINSTANCESTART
244 150 jguarin200
        arithmetic_block : arithblock
245
        port map (
246
                clk => clk,
247
                rst => rst,
248 163 jguarin200
                dpc => s_sign,
249 150 jguarin200
                f       => s_f,
250
                a       => s_a,
251
                s       => s_s,
252
                p       => s_p
253
        );
254 152 jguarin200
        --!TBXINSTANCEEND
255 150 jguarin200
 
256
        --! Instanciar la maquina de interrupciones
257 152 jguarin200
        --!TBXINSTANCESTART
258 150 jguarin200
        interruption_machine : im
259
        generic map (
260
                num_events              => 4,
261
                cycles_to_wait  => 1023
262
        )
263
        port map (
264
                clk                             => clk,
265
                rst                             => rst,
266
                rfull_events    => s_rfull_events,
267
                eoi_events              => s_eoi_events,
268 177 jguarin200
                eoi_int                 => s_int(3 downto 0),
269
                rfull_int               => s_int(7 downto 4),
270 151 jguarin200
                state                   => s_iCtrlState
271 150 jguarin200
 
272
        );
273 152 jguarin200
        --!TBXINSTANCEEND
274 150 jguarin200
        --!Instanciar la maquina de estados
275 152 jguarin200
 
276
        --!TBXINSTANCESTART
277 150 jguarin200
        state_machine : sm
278 152 jguarin200
 
279 150 jguarin200
        port map (
280
                clk                     => clk,
281
                rst                     => rst,
282
                instrQq                 => s_iq,
283
                instrQ_empty    => s_iq_empty,
284
                adda                    => s_adda,
285
                addb                    => s_addb,
286
                sync_chain_0    => s_sync_chain_0,
287
                instrRdAckd             => s_iq_rd_ack,
288
                full_r                  => s_full_r,
289
                eoi                             => s_eoi,
290 151 jguarin200
                dpc_uca                 => s_dpc_uca,
291
                state                   => s_smState
292
 
293 150 jguarin200
        );
294 152 jguarin200
        --!TBXINSTANCEEND
295 150 jguarin200
 
296
end architecture;

powered by: WebSVN 2.1.0

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