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

Subversion Repositories raytrac

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

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

powered by: WebSVN 2.1.0

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