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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp_sgdma/] [ap_n_dpc.vhd] - Blame information for rev 256

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

Line No. Rev Author Line
1 219 jguarin200
--! @file ap_n_dpc.vhd
2 196 jguarin200
--! @brief Decodificador de operacién. Sistema de decodificación de los \kdatapaths, cuyo objetivo es a partir del par´ametro de entrada DCS.\nSon 4 las posibles configuraciones de \kdatapaths que existen. Los valores de los bits DC son los que determinan y decodifican la interconexión entre los componentes aritméticos. El componente S determina el signo de la operación cuando es una suma la que operación se es&eacutea; ejecutando en el momento.  
3 128 jguarin200
--! @author Julián Andrés Guarín Reyes
4 122 jguarin200
--------------------------------------------------------------
5
-- RAYTRAC
6
-- Author Julian Andres Guarin
7 219 jguarin200
-- ap_n_dpc.vhd
8 122 jguarin200
-- This file is part of raytrac.
9
-- 
10
--     raytrac is free software: you can redistribute it and/or modify
11
--     it under the terms of the GNU General Public License as published by
12
--     the Free Software Foundation, either version 3 of the License, or
13
--     (at your option) any later version.
14
-- 
15
--     raytrac is distributed in the hope that it will be useful,
16
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
17
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
--     GNU General Public License for more details.
19
-- 
20
--     You should have received a copy of the GNU General Public License
21
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
library ieee;
24
use ieee.std_logic_1164.all;
25 212 jguarin200
use ieee.std_logic_unsigned.all;
26 151 jguarin200
use work.arithpack.all;
27 134 jguarin200
 
28 212 jguarin200
library altera_mf;
29
use altera_mf.altera_mf_components.all;
30 158 jguarin200
 
31 212 jguarin200
 
32 219 jguarin200
entity ap_n_dpc is
33 152 jguarin200
 
34 122 jguarin200
        port (
35 229 jguarin200
 
36 248 jguarin200
                p0,p1,p2,p3,p4,p5,p6,p7,p8: out std_logic_vector(31 downto 0);
37 242 jguarin200
 
38
 
39 204 jguarin200
                clk                                             : in    std_logic;
40
                rst                                             : in    std_logic;
41
 
42 229 jguarin200
                ax                                              : in    std_logic_vector(31 downto 0);
43
                ay                                              : in    std_logic_vector(31 downto 0);
44
                az                                              : in    std_logic_vector(31 downto 0);
45
                bx                                              : in    std_logic_vector(31 downto 0);
46
                by                                              : in    std_logic_vector(31 downto 0);
47
                bz                                              : in    std_logic_vector(31 downto 0);
48
                vx                                              : out   std_logic_vector(31 downto 0);
49
                vy                                              : out   std_logic_vector(31 downto 0);
50
                vz                                              : out   std_logic_vector(31 downto 0);
51
                sc                                              : out   std_logic_vector(31 downto 0);
52
                ack                                             : in    std_logic;
53
                empty                                   : out   std_logic;
54 256 jguarin200
                sign_switcheroo                 : in            std_logic;
55 204 jguarin200
 
56 229 jguarin200
                 --paraminput                           : in    vectorblock06;  --! Vectores A,B
57 204 jguarin200
 
58 229 jguarin200
                dcs                                             : in    std_logic_vector(2 downto 0);            --! Bit con el identificador del bloque AB vs CD e identificador del sub bloque (A/B) o (C/D). 
59
 
60 212 jguarin200
                sync_chain_1                    : in    std_logic;              --! Se&ntilde;al de dato valido que se va por toda la cadena de sincronizacion.
61 229 jguarin200
                pipeline_pending                : out   std_logic               --! Se&ntilde;al para indicar si hay datos en el pipeline aritm&eacute;tico.    
62 204 jguarin200
 
63 229 jguarin200
 
64
 
65
                --qresult_d                             : out   vectorblock04   --! 4 salidas de resultados, pues lo m&aacute;ximo que podr&aacute; calcularse por cada clock son 2 vectores. 
66
 
67 204 jguarin200
 
68
 
69 122 jguarin200
        );
70 153 jguarin200
end entity;
71 122 jguarin200
 
72 219 jguarin200
architecture ap_n_dpc_arch of ap_n_dpc is
73 228 jguarin200
        --!Constantes de apoyo
74 248 jguarin200
        constant ssync_chain_max : integer :=32;
75 228 jguarin200
        constant ssync_chain_min : integer :=2;
76 125 jguarin200
 
77 235 jguarin200
        --! Tunnning delay
78
        constant adder2_delay: integer := 1;
79 242 jguarin200
        constant adder1_delay : integer := 1;
80 228 jguarin200
 
81 161 jguarin200
        --!TBXSTART:FACTORS_N_ADDENDS
82 242 jguarin200
        signal sfactor0 : std_logic_vector(31 downto 0);
83
        signal sfactor1 : std_logic_vector(31 downto 0);
84
        signal sfactor2 : std_logic_vector(31 downto 0);
85
        signal sfactor3 : std_logic_vector(31 downto 0);
86
        signal sfactor4 : std_logic_vector(31 downto 0);
87
        signal sfactor5 : std_logic_vector(31 downto 0);
88
        signal sfactor6 : std_logic_vector(31 downto 0);
89
        signal sfactor7 : std_logic_vector(31 downto 0);
90
        signal sfactor8 : std_logic_vector(31 downto 0);
91
        signal sfactor9 : std_logic_vector(31 downto 0);
92 229 jguarin200
        signal sfactor10        : std_logic_vector(31 downto 0);
93
        signal sfactor11        : std_logic_vector(31 downto 0);
94
        --signal sfactor                : vectorblock12;
95
 
96
        signal ssumando0        : std_logic_vector(31 downto 0);
97
        signal ssumando1        : std_logic_vector(31 downto 0);
98
        signal ssumando2        : std_logic_vector(31 downto 0);
99
        signal ssumando3        : std_logic_vector(31 downto 0);
100
        signal ssumando4        : std_logic_vector(31 downto 0);
101
        signal ssumando5        : std_logic_vector(31 downto 0);
102
        --signal ssumando               : vectorblock06;
103
 
104
        signal sq0_q            : std_logic_vector(31 downto 0);
105 161 jguarin200
        --!TBXEND
106 163 jguarin200
 
107
 
108
        --!TBXSTART:ARITHMETIC_RESULTS
109 229 jguarin200
 
110
        signal sp0                      : std_logic_vector(31 downto 0);
111
        signal sp1                      : std_logic_vector(31 downto 0);
112
        signal sp2                      : std_logic_vector(31 downto 0);
113
        signal sp3                      : std_logic_vector(31 downto 0);
114
        signal sp4                      : std_logic_vector(31 downto 0);
115
        signal sp5                      : std_logic_vector(31 downto 0);
116
        --signal sprd32blk      : vectorblock06;
117
 
118
        signal sa0                      : std_logic_vector(31 downto 0);
119
        signal sa1                      : std_logic_vector(31 downto 0);
120
        signal sa2                      : std_logic_vector(31 downto 0);
121
 
122
        --signal sadd32blk      : vectorblock03;
123
 
124
        signal ssq32    : std_logic_vector(31 downto 0);
125
        signal sinv32   : std_logic_vector(31 downto 0);
126
 
127
        signal sqx_q            : std_logic_vector(31 downto 0);
128
        signal sqy_q            : std_logic_vector(31 downto 0);
129
        signal sqz_q            : std_logic_vector(31 downto 0);
130
        --signal sqxyz_q                : vectorblock03;
131
 
132
        signal sq1_e            : std_logic;
133 163 jguarin200
        --!TBXEND
134
 
135 160 jguarin200
 
136
        --!TBXSTART:SYNC_CHAIN
137 228 jguarin200
        signal ssync_chain      : std_logic_vector(ssync_chain_max downto ssync_chain_min);
138 171 jguarin200
        --!TBXEND
139 212 jguarin200
 
140 229 jguarin200
        --signal qxyzd          : std_logic_vector(95 downto 0);
141
 
142
        --signal qxyzq          : std_logic_vector(95 downto 0);
143
 
144 228 jguarin200
        signal sq2_d            : std_logic_vector(31 downto 0);
145
        signal sq2_q            : std_logic_vector(31 downto 0);
146
        signal sq2_w            : std_logic;
147
        signal sq2_e            : std_logic;
148 219 jguarin200
 
149 229 jguarin200
        signal sqr_e            : std_logic;
150
        signal sqr_w            : std_logic;            --! Salidas de escritura y lectura en las colas de resultados.
151
        signal sqr_dx           : std_logic_vector(31 downto 0);
152
        signal sqr_dy           : std_logic_vector(31 downto 0);
153
        signal sqr_dz           : std_logic_vector(31 downto 0);
154
        signal sqr_dsc          : std_logic_vector(31 downto 0);
155
 
156 219 jguarin200
 
157
 
158 229 jguarin200
        signal sa0o                     : std_logic_vector(31 downto 0);
159
        signal sa1o                     : std_logic_vector(31 downto 0);
160
        signal sa2o                     : std_logic_vector(31 downto 0);
161
        --signal sadd32blko     : vectorblock03;        --! Salidas de los 3 sumadores.
162 163 jguarin200
 
163 229 jguarin200
        signal sp0o                     : std_logic_vector(31 downto 0);
164
        signal sp1o                     : std_logic_vector(31 downto 0);
165
        signal sp2o                     : std_logic_vector(31 downto 0);
166
        signal sp3o                     : std_logic_vector(31 downto 0);
167
        signal sp4o                     : std_logic_vector(31 downto 0);
168
        signal sp5o                     : std_logic_vector(31 downto 0);
169
        --signal sprd32blko     : vectorblock06;        --! Salidas de los 6 multiplicadores.
170
 
171
        signal sinv32o  : std_logic_vector(31 downto 0);         --! Salidas de la raiz cuadradas y el inversor.
172
        signal ssq32o   : std_logic_vector(31 downto 0);         --! Salidas de la raiz cuadradas y el inversor.
173
 
174 219 jguarin200
        --! Bloque Aritmetico de Sumadores y Multiplicadores (madd)
175
        component arithblock
176
        port (
177
 
178
                clk     : in std_logic;
179
                rst : in std_logic;
180
 
181
                sign            : in std_logic;
182 256 jguarin200
                sign_switch     : in std_logic;
183 229 jguarin200
 
184
                factor0         : in std_logic_vector(31 downto 0);
185
                factor1         : in std_logic_vector(31 downto 0);
186
                factor2         : in std_logic_vector(31 downto 0);
187
                factor3         : in std_logic_vector(31 downto 0);
188
                factor4         : in std_logic_vector(31 downto 0);
189
                factor5         : in std_logic_vector(31 downto 0);
190
                factor6         : in std_logic_vector(31 downto 0);
191
                factor7         : in std_logic_vector(31 downto 0);
192
                factor8         : in std_logic_vector(31 downto 0);
193
                factor9         : in std_logic_vector(31 downto 0);
194
                factor10        : in std_logic_vector(31 downto 0);
195
                factor11        : in std_logic_vector(31 downto 0);
196
                --prd32blki     : in vectorblock06;
197 219 jguarin200
 
198 229 jguarin200
                sumando0        : in std_logic_vector(31 downto 0);
199
                sumando1        : in std_logic_vector(31 downto 0);
200
                sumando2        : in std_logic_vector(31 downto 0);
201
                sumando3        : in std_logic_vector(31 downto 0);
202
                sumando4        : in std_logic_vector(31 downto 0);
203
                sumando5        : in std_logic_vector(31 downto 0);
204
                --add32blki     : in vectorblock06;
205 219 jguarin200
 
206 229 jguarin200
                a0                      : out std_logic_vector(31 downto 0);
207
                a1                      : out std_logic_vector(31 downto 0);
208
                a2                      : out std_logic_vector(31 downto 0);
209
                --add32blko     : out vectorblock03;
210 219 jguarin200
 
211 229 jguarin200
                p0                      : out std_logic_vector(31 downto 0);
212
                p1                      : out std_logic_vector(31 downto 0);
213
                p2                      : out std_logic_vector(31 downto 0);
214
                p3                      : out std_logic_vector(31 downto 0);
215
                p4                      : out std_logic_vector(31 downto 0);
216
                p5                      : out std_logic_vector(31 downto 0);
217
                --prd32blko     : out vectorblock06;
218
 
219
                sq32o           : out std_logic_vector(31 downto 0);
220
                inv32o          : out std_logic_vector(31 downto 0)
221 219 jguarin200
 
222
        );
223
        end component;
224
 
225 123 jguarin200
begin
226 204 jguarin200
 
227 219 jguarin200
        --! Bloque Aritm&eacute;tico
228
        ap : arithblock
229
        port map (
230
                clk             => clk,
231
                rst                     => rst,
232 204 jguarin200
 
233 229 jguarin200
                sign            => dcs(0),
234 219 jguarin200
 
235 229 jguarin200
                factor0 =>sfactor0,
236
                factor1 =>sfactor1,
237
                factor2 =>sfactor2,
238
                factor3 =>sfactor3,
239
                factor4 =>sfactor4,
240
                factor5 =>sfactor5,
241
                factor6 =>sfactor6,
242
                factor7 =>sfactor7,
243
                factor8 =>sfactor8,
244
                factor9 =>sfactor9,
245
                factor10=>sfactor10,
246
                factor11=>sfactor11,
247
                --prd32blki     => sfactor,
248
 
249
                sumando0=>ssumando0,
250
                sumando1=>ssumando1,
251
                sumando2=>ssumando2,
252
                sumando3=>ssumando3,
253
                sumando4=>ssumando4,
254
                sumando5=>ssumando5,
255
                --add32blki     => ssumando,
256 219 jguarin200
 
257 229 jguarin200
                a0=>sa0o,
258
                a1=>sa1o,
259
                a2=>sa2o,
260
                --add32blko     => sadd32blko, 
261 219 jguarin200
 
262 229 jguarin200
                p0=>sp0o,
263
                p1=>sp1o,
264
                p2=>sp2o,
265
                p3=>sp3o,
266
                p4=>sp4o,
267
                p5=>sp5o,
268
                --prd32blko     => sprd32blko,
269
 
270
                sq32o=> ssq32o,
271
                inv32o=> sinv32o
272 219 jguarin200
        );
273 122 jguarin200
 
274 142 jguarin200
        --! Cadena de sincronizaci&oacute;n: 29 posiciones.
275 229 jguarin200
        pipeline_pending <= sync_chain_1 or not(sq2_e) or not(sq1_e) or not(sqr_e);
276
        empty <= sqr_e;
277 140 jguarin200
        sync_chain_proc:
278 212 jguarin200
        process(clk,rst,sync_chain_1)
279 140 jguarin200
        begin
280
                if rst=rstMasterValue then
281 228 jguarin200
                        ssync_chain(ssync_chain_max downto ssync_chain_min) <= (others => '0');
282 230 jguarin200
 
283 242 jguarin200
                        p0 <= (others => '0');
284
                        p1 <= (others => '0');
285
                        p2 <= (others => '0');
286
 
287 229 jguarin200
                elsif clk'event and clk='1' then
288 228 jguarin200
                        for i in ssync_chain_max downto ssync_chain_min+1 loop
289 142 jguarin200
                                ssync_chain(i) <= ssync_chain(i-1);
290 140 jguarin200
                        end loop;
291 228 jguarin200
                        ssync_chain(ssync_chain_min) <= sync_chain_1;
292 242 jguarin200
 
293
                        --! Salida de los multiplicadores p0 p1 p2 
294 248 jguarin200
                        if ssync_chain(23)='1' then
295
                                p0 <= ssq32; -- El resultado quedara consignado en VZ1=BASE+1
296
                        elsif ssync_chain(28)='1' then
297
                                p1 <= sq2_q; -- El resultado quedara consignado en VX1=BASE+3
298
                        elsif ssync_chain(24)='1' then
299
                                p2 <= sinv32; -- El resutlado quedara consignado en VY1=BASE+2
300
                                p3 <= sqx_q;
301
                                p4 <= sqy_q;
302
                                p5 <= sqz_q;
303
                        elsif ssync_chain(28)='1' then
304
                                p6 <= sp3o;
305
                                p7 <= sp4o;
306
                                p8 <= sp5o;
307 242 jguarin200
                        end if;
308
 
309 140 jguarin200
                end if;
310
        end process sync_chain_proc;
311 144 jguarin200
 
312 163 jguarin200
 
313 158 jguarin200
 
314
 
315 124 jguarin200
 
316 140 jguarin200
        --! El siguiente c&oacute;digo sirve para conectar arreglos a se&ntilde;ales std_logic_1164, son abstracciones de c&oacute;digo tambi&eacute;n, sin embargo se realizan a trav&eacute;s de registros. 
317
        register_products_outputs:
318
        process (clk)
319
        begin
320
                if clk'event and clk='1' then
321 229 jguarin200
                        sp0 <= sp0o;
322
                        sp1 <= sp1o;
323
                        sp2 <= sp2o;
324
                        sp3 <= sp3o;
325
                        sp4 <= sp4o;
326
                        sp5 <= sp5o;
327
                        sa0 <= sa0o;
328
                        sa1 <= sa1o;
329
                        sa2 <= sa2o;
330
                        sinv32 <= sinv32o;
331
                        ssq32 <= ssq32o;
332 140 jguarin200
                end if;
333
        end process;
334 148 jguarin200
 
335 196 jguarin200
        --! Decodificaci&oacute;n del Datapath.
336 229 jguarin200
        datapathproc:process(dcs,ax,bx,ay,by,az,bz,sinv32,sp0,sp1,sp2,sp3,sp4,sp5,sa0,sa1,sa2,sq0_q,sqx_q,sqy_q,sqz_q,ssync_chain,ssq32,sq2_q)
337 196 jguarin200
        begin
338 229 jguarin200
 
339
                case dcs is
340
                        when "011"  =>
341
 
342
                                sq2_w <= '0';
343
                                sq2_d <= ssq32;
344
 
345
                                sfactor0 <= ay;
346
                                sfactor1 <= bz;
347
                                sfactor2 <= az;
348
                                sfactor3 <= by;
349
                                sfactor4 <= az;
350
                                sfactor5 <= bx;
351
                                sfactor6 <= ax;
352
                                sfactor7 <= bz;
353
                                sfactor8 <= ax;
354
                                sfactor9 <= by;
355
                                sfactor10 <= ay;
356
                                sfactor11 <= bx;
357
 
358
                                ssumando0 <= sp0;
359
                                ssumando1 <= sp1;
360
                                ssumando2 <= sp2;
361
                                ssumando3 <= sp3;
362
                                ssumando4 <= sp4;
363
                                ssumando5 <= sp5;
364
 
365
                                sqr_dx <= sa0;
366
                                sqr_dy <= sa1;
367
                                sqr_dz <= sa2;
368
 
369 230 jguarin200
                                sqr_w <= ssync_chain(13+adder2_delay);
370 229 jguarin200
 
371
                        when"000"|"001" =>
372
 
373
                                sq2_w <= '0';
374
                                sq2_d <= ssq32;
375
 
376
                                sfactor0 <= ay;
377
                                sfactor1 <= bz;
378
                                sfactor2 <= az;
379
                                sfactor3 <= by;
380
                                sfactor4 <= az;
381
                                sfactor5 <= bx;
382
                                sfactor6 <= ax;
383
                                sfactor7 <= bz;
384
                                sfactor8 <= ax;
385
                                sfactor9 <= by;
386
                                sfactor10 <= ay;
387
                                sfactor11 <= bx;
388
 
389
 
390
                                ssumando0 <= ax;
391
                                ssumando1 <= bx;
392
                                ssumando2 <= ay;
393
                                ssumando3 <= by;
394
                                ssumando4 <= az;
395
                                ssumando5 <= bz;
396
 
397
                                sqr_dx <= sa0;
398
                                sqr_dy <= sa1;
399
                                sqr_dz <= sa2;
400
 
401 230 jguarin200
                                sqr_w <= ssync_chain(9+adder2_delay);
402 229 jguarin200
 
403
                        when"110" |"100" =>
404
 
405
 
406
 
407
                                sfactor0 <= ax;
408
                                sfactor1 <= bx;
409
                                sfactor2 <= ay;
410
                                sfactor3 <= by;
411
                                sfactor4 <= az;
412
                                sfactor5 <= bz;
413
 
414
                                sfactor6 <= sinv32;
415
                                sfactor7 <= sqx_q;
416
                                sfactor8 <= sinv32;
417
                                sfactor9 <= sqy_q;
418
                                sfactor10 <= sinv32;
419
                                sfactor11 <= sqz_q;
420
 
421
 
422
                                ssumando0 <= sp0;
423
                                ssumando1 <= sp1;
424
                                ssumando2 <= sa0;
425
                                ssumando3 <= sq0_q;
426
                                ssumando4 <= az;
427
                                ssumando5 <= bz;
428
 
429
                                if dcs(1)='1' then
430
                                        sq2_d <= ssq32;
431 242 jguarin200
                                        sq2_w <= ssync_chain(22+adder1_delay);
432 229 jguarin200
                                else
433
                                        sq2_d <= sa1;
434 242 jguarin200
                                        sq2_w <= ssync_chain(21+adder1_delay);
435 229 jguarin200
                                end if;
436
 
437
                                sqr_dx <= sp3;
438
                                sqr_dy <= sp4;
439
                                sqr_dz <= sp5;
440
 
441 248 jguarin200
                                sqr_w <= ssync_chain(27+adder1_delay);
442 229 jguarin200
 
443
                        when others =>
444
 
445
                                sq2_w <= '0';
446
                                sq2_d <= ssq32;
447
 
448
                                sfactor0 <= ax;
449
                                sfactor1 <= bx;
450
                                sfactor2 <= ay;
451
                                sfactor3 <= by;
452
                                sfactor4 <= az;
453
                                sfactor5 <= bz;
454
 
455
                                sfactor6 <= ax;
456
                                sfactor7 <= bx;
457
                                sfactor8 <= ay;
458
                                sfactor9 <= by;
459
                                sfactor10 <= az;
460
                                sfactor11 <= bz;
461
 
462
                                ssumando0 <= sp0;
463
                                ssumando1 <= sp1;
464
                                ssumando2 <= sa0;
465
                                ssumando3 <= sq0_q;
466
                                ssumando4 <= az;
467
                                ssumando5 <= bz;
468
 
469
                                sqr_dx <= sp3;
470
                                sqr_dy <= sp4;
471
                                sqr_dz <= sp5;
472
 
473
                                sqr_w <= ssync_chain(5);
474
 
475
                end case;
476
 
477
 
478
 
479
 
480 123 jguarin200
        end process;
481
 
482 204 jguarin200
        --! Colas internas de producto punto, ubicada en el pipe line aritm&eacute;co. Paralelo a los sumadores a0 y a2.  
483
        q0 : scfifo --! Debe ir registrada la salida.
484
        generic map (
485 212 jguarin200
                allow_rwcycle_when_full => "ON",
486 229 jguarin200
                lpm_widthu                              => 4,
487
                lpm_numwords                    => 16,
488 204 jguarin200
                lpm_showahead                   => "ON",
489
                lpm_width                               => 32,
490
                overflow_checking               => "ON",
491
                underflow_checking              => "ON",
492 228 jguarin200
                use_eab                                 => "ON"
493 204 jguarin200
        )
494
        port    map (
495 212 jguarin200
                sclr            => '0',
496
                clock           => clk,
497 228 jguarin200
                rdreq           => ssync_chain(13),
498 242 jguarin200
                wrreq           => ssync_chain(5),
499 229 jguarin200
                data            => sp2,
500
                q                       => sq0_q
501 204 jguarin200
        );
502 212 jguarin200
        --! Colas internas de producto punto, ubicada en el pipe line aritm&eacute;co. Paralelo a los sumadores a0 y a2.  
503 228 jguarin200
        q2 : scfifo --! Debe ir registrada la salida.
504 212 jguarin200
        generic map (
505
                allow_rwcycle_when_full => "ON",
506 229 jguarin200
                lpm_widthu                              => 4,
507
                lpm_numwords                    => 16,
508 212 jguarin200
                lpm_showahead                   => "ON",
509
                lpm_type                                => "SCIFIFO",
510
                lpm_width                               => 32,
511
                overflow_checking               => "ON",
512
                underflow_checking              => "ON",
513 228 jguarin200
                use_eab                                 => "ON"
514 212 jguarin200
        )
515
        port map (
516 248 jguarin200
                rdreq           => ssync_chain(28),
517 212 jguarin200
                sclr            => '0',
518
                clock           => clk,
519 228 jguarin200
                empty           => sq2_e,
520 229 jguarin200
                q                       => sqr_dsc,
521 228 jguarin200
                wrreq           => sq2_w,
522
                data            => sq2_d
523 212 jguarin200
        );
524 123 jguarin200
 
525 204 jguarin200
        --! Cola interna de normalizaci&oacute;n de vectores, ubicada entre el pipeline aritm&eacute;tico
526 229 jguarin200
        qx : scfifo
527 204 jguarin200
        generic map (
528 212 jguarin200
                allow_rwcycle_when_full => "ON",
529
                lpm_widthu                              => 5,
530 204 jguarin200
                lpm_numwords                    => 32,
531 212 jguarin200
                lpm_showahead                   => "ON",
532 229 jguarin200
                lpm_width                               => 32,
533 204 jguarin200
                overflow_checking               => "ON",
534
                underflow_checking              => "ON",
535
                use_eab                                 => "ON"
536
        )
537
        port    map (
538
                aclr            => '0',
539
                clock           => clk,
540 229 jguarin200
                empty           => sq1_e,
541 248 jguarin200
                rdreq           => ssync_chain(23+adder1_delay),
542 212 jguarin200
                wrreq           => sync_chain_1,
543 229 jguarin200
                data            => ax,
544
                q                       => sqx_q
545 204 jguarin200
        );
546 229 jguarin200
        qy : scfifo
547
        generic map (
548
                allow_rwcycle_when_full => "ON",
549
                lpm_widthu                              => 5,
550
                lpm_numwords                    => 32,
551
                lpm_showahead                   => "ON",
552
                lpm_width                               => 32,
553
                overflow_checking               => "ON",
554
                underflow_checking              => "ON",
555
                use_eab                                 => "ON"
556
        )
557
        port    map (
558
                aclr            => '0',
559
                clock           => clk,
560 248 jguarin200
                rdreq           => ssync_chain(23+adder1_delay),
561 229 jguarin200
                wrreq           => sync_chain_1,
562
                data            => ay,
563
                q                       => sqy_q
564
        );
565
        qz : scfifo
566
        generic map (
567
                allow_rwcycle_when_full => "ON",
568
                lpm_widthu                              => 5,
569
                lpm_numwords                    => 32,
570
                lpm_showahead                   => "ON",
571
                lpm_width                               => 32,
572
                overflow_checking               => "ON",
573
                underflow_checking              => "ON",
574
                use_eab                                 => "ON"
575
        )
576
        port    map (
577
                aclr            => '0',
578
                clock           => clk,
579 248 jguarin200
                rdreq           => ssync_chain(23+adder1_delay),
580 229 jguarin200
                wrreq           => sync_chain_1,
581
                data            => az,
582
                q                       => sqz_q
583
        );
584
--!***********************************************************************************************************
585
--!Q RESULT
586
--!***********************************************************************************************************
587 196 jguarin200
 
588 229 jguarin200
        --Colas de resultados
589
        rx : scfifo
590
        generic map (
591
                allow_rwcycle_when_full => "ON",
592
                lpm_widthu                              => 5,
593
                lpm_numwords                    => 32,
594
                lpm_showahead                   => "ON",
595
                lpm_width                               => 32,
596
                overflow_checking               => "ON",
597
                underflow_checking              => "ON",
598
                use_eab                                 => "ON"
599
        )
600
        port    map (
601
                aclr            => '0',
602
                clock           => clk,
603
                empty           => sqr_e,
604
                rdreq           => ack,
605
                wrreq           => sqr_w,
606
                data            => sqr_dx,
607
                q                       => vx
608
        );
609
        ry : scfifo
610
        generic map (
611
                allow_rwcycle_when_full => "ON",
612
                lpm_widthu                              => 5,
613
                lpm_numwords                    => 32,
614
                lpm_showahead                   => "ON",
615
                lpm_width                               => 32,
616
                overflow_checking               => "ON",
617
                underflow_checking              => "ON",
618
                use_eab                                 => "ON"
619
        )
620
        port    map (
621
                aclr            => '0',
622
                clock           => clk,
623
                rdreq           => ack,
624
                wrreq           => sqr_w,
625
                data            => sqr_dy,
626
                q                       => vy
627
        );
628
        rz : scfifo
629
        generic map (
630
                allow_rwcycle_when_full => "ON",
631
                lpm_widthu                              => 5,
632
                lpm_numwords                    => 32,
633
                lpm_showahead                   => "ON",
634
                lpm_width                               => 32,
635
                overflow_checking               => "ON",
636
                underflow_checking              => "ON",
637
                use_eab                                 => "ON"
638
        )
639
        port    map (
640
                aclr            => '0',
641
                clock           => clk,
642
                rdreq           => ack,
643
                wrreq           => sqr_w,
644
                data            => sqr_dz,
645
                q                       => vz
646
        );
647
        rsc : scfifo
648
        generic map (
649
                allow_rwcycle_when_full => "ON",
650
                lpm_widthu                              => 5,
651
                lpm_numwords                    => 32,
652
                lpm_showahead                   => "ON",
653
                lpm_width                               => 32,
654
                overflow_checking               => "ON",
655
                underflow_checking              => "ON",
656
                use_eab                                 => "ON"
657
        )
658
        port    map (
659
                aclr            => '0',
660
                clock           => clk,
661
                rdreq           => ack,
662
                wrreq           => sqr_w,
663
                data            => sqr_dsc,
664
                q                       => sc
665
        );
666 204 jguarin200
 
667
 
668 153 jguarin200
end architecture;

powered by: WebSVN 2.1.0

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