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

Subversion Repositories xmatchpro

[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [xmatch_sim7/] [src/] [level2_4d_pbc.vhd] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 eejlny
--This library is free software; you can redistribute it and/or
2
--modify it under the terms of the GNU Lesser General Public
3
--License as published by the Free Software Foundation; either
4
--version 2.1 of the License, or (at your option) any later version.
5
 
6
--This library is distributed in the hope that it will be useful,
7
--but WITHOUT ANY WARRANTY; without even the implied warranty of
8
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9
--Lesser General Public License for more details.
10
 
11
--You should have received a copy of the GNU Lesser General Public
12
--License along with this library; if not, write to the Free Software
13
--Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
14
 
15
-- e_mail : j.l.nunez-yanez@byacom.co.uk
16
 
17
--------------------------------------
18
--  ENTITY       = LEVEL2_4d         --
19
--  version      = 1.0              --
20
--  last update  = 16/10/00          --
21
--  author       = Jose Nunez       --
22
--------------------------------------
23
 
24
-- FUNCTION
25
-- hierarchy level.
26
 
27
--  PIN LIST
28
--  COMP_INT     = selects compression mode
29
--  DECOMP_INT   = selects decompression mode
30
--  MOVE_ENABLE  = activates the movement in the dictionary
31
--  CLK          = master clock
32
--  CLEAR        = asynchronous reset
33
--  U_DATAIN     = data to be compressed
34
--  C_DATAIN     = data to be decompressed
35
--  U_DATAOUT    = decompressed data
36
--  C_DATAOUT    = compressed data
37
--  FLUSH_INT     = activate flush cycle
38
--  FLUSH_END     = internal flush terminated
39
--  ADDRESS       = memory address signal
40
--  CE           = memory chip enable
41
--  OE           = memory output enable
42
--  RW           = memory read or write enable
43
 
44
 
45
 
46
library IEEE;
47
use IEEE.std_logic_1164.all;
48
library xil_lib;
49
use xil_lib.xil_comp.all;
50
use work.tech_package.all;
51
 
52
entity level2_4d_pbc is
53
  port(
54
    CLK : in bit;
55
    CLEAR : in bit;
56
    RESET : in bit;
57
    DECOMP : in bit;
58
    MOVE_ENABLE : in bit;
59
          DECODING_UNDERFLOW : in bit;
60
          FINISH : in bit;
61
          C_DATAIN : in bit_vector(63 downto 0);
62
          U_DATAOUT : out bit_vector(31 downto 0);
63
          MASK : out bit_vector(3 downto 0);
64
          U_DATA_VALID : out bit ;
65
          OVERFLOW_CONTROL : in bit;
66
          UNDERFLOW : out bit);
67
end level2_4d_pbc;
68
 
69
architecture level2_4d of level2_4d_pbc is
70
 
71
 
72
    -- Component declarations
73
 
74
 -- xilinx memory
75
 
76
 
77
 component DP_RAM_XILINX_256
78
        port (
79
        addra: IN std_logic_VECTOR(7 downto 0);
80
        clka: IN std_logic;
81
        addrb: IN std_logic_VECTOR(7 downto 0);
82
        clkb: IN std_logic;
83
        dina: IN std_logic_VECTOR(31 downto 0);
84
        wea: IN std_logic_vector (0 downto 0);
85
        enb: IN std_logic;
86
        doutb: OUT std_logic_VECTOR(31 downto 0));
87
 end component;
88
 
89
 -- Synplicity black box declaration
90
--attribute black_box : boolean;
91
--attribute black_box of DP_RAM_XILINX: component is true;
92
 
93
component DP_RAM_XILINX_MASK
94
        port (
95
        addra: IN std_logic_VECTOR(7 downto 0);
96
        clka: IN std_logic;
97
        addrb: IN std_logic_VECTOR(7 downto 0);
98
        clkb: IN std_logic;
99
        dina: IN std_logic_VECTOR(3 downto 0);
100
        wea: IN std_logic_vector (0 downto 0);
101
        enb: IN std_logic;
102
        doutb: OUT std_logic_VECTOR(3 downto 0));
103
 end component;
104
 
105
 -- Synplicity black box declaration
106
--attribute black_box : boolean;
107
--attribute black_box of DP_RAM_XILINX_MASK: component is true;
108
 
109
 -- Actel memory
110
 
111
--component MY_MEMORY
112
 
113
--   port(DO : out std_logic_vector (31 downto 0);
114
--      RCLOCK : in std_logic;
115
--      WCLOCK : in std_logic;
116
--      DI : in std_logic_vector (31 downto 0);
117
--      WRB : in std_logic;
118
--      RDB : in std_logic;
119
--      WADDR : in std_logic_vector (7 downto 0);
120
--      RADDR : in std_logic_vector (7 downto 0));
121
 
122
--end component;
123
 
124
 
125
 
126
 
127
--component MY_MASK_MEMORY
128
 
129
--   port(DO : out std_logic_vector (3 downto 0);
130
--      RCLOCK : in std_logic;
131
--      WCLOCK : in std_logic;
132
--      DI : in std_logic_vector (3 downto 0);
133
--      WRB : in std_logic;
134
--      RDB : in std_logic;
135
--      WADDR : in std_logic_vector (7 downto 0);
136
--      RADDR : in std_logic_vector (7 downto 0));
137
 
138
--end component;
139
 
140
--component LPM_RAM_DP_MASK
141
--      port
142
--      (
143
--        DATA : in std_logic_vector(3 downto 0);
144
--      RDADDRESS : in std_logic_vector(7 downto 0);
145
--      WRADDRESS : in std_logic_vector(7 downto 0);
146
--      WRCLKEN : in std_logic;
147
--        RDCLKEN : in std_logic;
148
--      RDEN : in std_logic;
149
--      WREN : in std_logic;
150
--      WRCLOCK :in std_logic;
151
--        RDCLOCK : in std_logic;
152
--      Q : out std_logic_vector(3 downto 0));
153
--end component;
154
--
155
--
156
--component LPM_RAM_DP
157
--      generic (LPM_WIDTH    : positive ;
158
--               LPM_WIDTHAD  : positive;
159
--               LPM_NUMWORDS : positive;
160
--               LPM_INDATA   : string;
161
--               LPM_RDADDRESS_CONTROL : string;
162
--               LPM_WRADDRESS_CONTROL : string;
163
--               LPM_OUTDATA  : string;
164
--               LPM_TYPE     : string;
165
--               LPM_FILE     : string;
166
--             LPM_HINT     : string);
167
--port (RDCLOCK : in std_logic;
168
--            RDCLKEN : in std_logic;
169
--            RDADDRESS : in std_logic_vector(7 downto 0);
170
--            RDEN : in std_logic;
171
--            DATA : in std_logic_vector(31 downto 0);
172
--            WRADDRESS : in std_logic_vector(7 downto 0);
173
--            WREN : in std_logic;
174
--            WRCLOCK : in std_logic;
175
--            WRCLKEN : in std_logic;
176
--            Q : out std_logic_vector(31 downto 0));
177
--end component;
178
 
179
-- TSMC DPRAM
180
 
181
  component ra2sh_256W_32B_8MX_offWRMSK_8WRGRAN
182
 
183
  port (
184
        CLKA: in std_logic;
185
        CENA: in std_logic;
186
        WENA: in std_logic;
187
        AA: in std_logic_vector(7 downto 0);
188
        DA: in std_logic_vector(31 downto 0);
189
        QA: out std_logic_vector(31 downto 0);
190
        CLKB: in std_logic;
191
        CENB: in std_logic;
192
        WENB: in std_logic;
193
        AB: in std_logic_vector(7 downto 0);
194
        DB: in std_logic_vector(31 downto 0);
195
        QB: out std_logic_vector(31 downto 0)
196
 
197
  );
198
 
199
    end component;
200
 
201
 
202
 
203
        component OUT_REGISTER
204
        port(
205
            DIN : in bit_vector(31 downto 0);
206
            CLEAR : in bit;
207
                        RESET : in bit;
208
                        U_DATA_VALID_IN : in bit;
209
                FINISH : in bit;
210
                DECOMP : in bit;
211
            CLK : in bit;
212
                U_DATA_VALID_OUT : out bit;
213
            QOUT : out  bit_vector(31 downto 0)
214
        );
215
    end component;
216
    component OB_ASSEM
217
        port(
218
            RAM_DATA : in std_logic_vector(31 downto 0);
219
                        RAM_MASK : in std_logic_vector(3 downto 0);
220
            MATCH_TYPE : in bit_vector(3 downto 0);
221
            LITERAL_DATA : in bit_vector(31 downto 0);
222
                        LITERAL_MASK : in bit_vector(4 downto 0);
223
            DOUT : out bit_vector(31 downto 0);
224
                        MOUT : out bit_vector(3 downto 0)
225
        );
226
    end component;
227
 
228
    component MC_MUX_3D
229
        port(
230
            B : in bit_vector(15 downto 0);
231
            ENABLED: in bit;
232
            Y : out bit_vector(15 downto 0));
233
    end component;
234
 
235
 
236
    component MG_LOGIC_2
237
        port(
238
             MATCH_LOC : in bit_vector(15 downto 0);
239
             FULL_HIT : in bit;
240
             MOVE : out bit_vector(15 downto 0)
241
                                  );
242
    end component;
243
 
244
    component DECODE4_16_INV
245
        port(
246
            MATCH_LOC_IN : in bit_vector(3 downto 0);
247
            MATCH_LOC_OUT : out bit_vector(15 downto 0)
248
        );
249
    end component;
250
 
251
        component PIPELINE_R2_D
252
                port(
253
                        MATCH_LOC_IN_D : in bit_vector(15 downto 0);
254
                        MATCH_TYPE_IN : in bit_vector(3 downto 0);
255
                        LIT_DATA_IN : in bit_vector(31 downto 0);
256
                        LIT_MASK_IN : in bit_vector(4 downto 0);
257
                        MOVE_ENABLE_D_IN : in bit;
258
                        FULL_HIT_IN : in bit;
259
                        CLEAR : in bit;
260
                        RESET : in bit;
261
                        CLK : in bit;
262
                        MATCH_LOC_OUT_D : out bit_vector(15 downto 0);
263
                        MATCH_TYPE_OUT : out bit_vector(3 downto 0);
264
                        LIT_DATA_OUT : out bit_vector(31 downto 0);
265
                        LIT_MASK_OUT : out bit_vector(4 downto 0);
266
                        FULL_HIT_OUT : out bit;
267
                        MOVE_ENABLE_D_OUT : out bit
268
         );
269
        end component;
270
 
271
        component PIPELINE_R1_D
272
                port(
273
                        FULL_HIT_IN:in bit;
274
                        MATCH_TYPE_IN:in bit_vector(3 downto 0);
275
                        MATCH_LOC_IN:in bit_vector(3 downto 0);
276
                        LIT_DATA_IN:in bit_vector(31 downto 0);
277
                        LIT_MASK_IN : in bit_vector(4 downto 0);
278
                        MOVE_ENABLE_D_IN:in bit;
279
                        CLEAR:in bit;
280
                        RESET : in bit;
281
                        CLK:in bit;
282
                        FULL_HIT_OUT:out bit;
283
                        MATCH_TYPE_OUT:out bit_vector(3 downto 0);
284
                        MATCH_LOC_OUT:out bit_vector(3 downto 0);
285
                        LIT_DATA_OUT:out bit_vector(31 downto 0);
286
                        LIT_MASK_OUT : out bit_vector(4 downto 0);
287
                        MOVE_ENABLE_D_OUT:out bit
288
                );
289
                end component;
290
 
291
 
292
 
293
 
294
        component POINTER_ARRAY
295
        port
296
        (
297
                PREVIOUS : in bit_vector(3 downto 0);
298
                MOVE : in bit_vector(15 downto 1);
299
                MOVE_ENABLE : in bit;
300
                SEL_WRITE : in bit_vector(15 downto 0);
301
                SEL_READ : in bit_vector(15 downto 0);
302
                CLEAR : in bit ;
303
                RESET : in bit;
304
                CLK : in bit ;
305
                WRITE_ADDRESS : out bit_vector(3 downto 0);
306
                READ_ADDRESS : out bit_vector(3 downto 0)
307
        );
308
        end component;
309
 
310
        component RLI_COUNTER_D
311
        port (LOAD: in bit;
312
          DATA : in bit_vector(7 downto 0);
313
          ENABLE_D : in bit;
314
          RESET : in bit;
315
          CLEAR : in bit;
316
          CLK : in bit;
317
          END_COUNT : out bit
318
          );
319
        end component;
320
 
321
 
322
 
323
        component MLD_DPROP_5
324
        port
325
         (
326
                DIN : in bit_vector(0 to 15);
327
                DOUT : out bit_vector(14 downto 0);
328
                FULL_OR : out bit
329
        );
330
    end component;
331
 
332
        component ODA_REGISTER_D
333
                port(
334
                        MOVE_IN : in bit_vector(15 downto 0);
335
                        MOVE_ENABLE :  in bit;
336
                        CONTROL : in bit_vector(14 downto 0);
337
                        CLK : in bit;
338
                        RESET : in bit;
339
                        CLEAR : in bit;
340
                        MOVE_OUT : out bit_vector(15 downto 0)
341
                );
342
         end component;
343
 
344
 
345
         component REG_TEMP
346
          port (
347
                     DATA_IN : in bit_vector(31 downto 0);
348
                     MASK_IN : in bit_vector(3 downto 0);
349
                     CLK : in bit;
350
                     CLEAR : in bit;
351
                     RESET : in bit;
352
                                ENABLE : in bit;
353
                     DATA_OUT : out std_logic_vector(31 downto 0);
354
                     MASK_OUT : out std_logic_vector(3 downto 0)
355
         );
356
         end component;
357
 
358
         component MUX_RAM
359
         port (
360
                        RAM_DATA : in std_logic_vector(31 downto 0);
361
                        RAM_MASK : in std_logic_vector(3 downto 0);
362
                        REG_DATA : in std_logic_vector(31 downto 0);
363
                        REG_MASK : in std_logic_vector(3 downto 0);
364
                        EQUAL : in bit;
365
                        ASSEM_DATA : out std_logic_vector(31 downto 0);
366
                        ASSEM_MASK : out std_logic_vector(3 downto 0)
367
          );
368
          end component;
369
 
370
         component SYNC_RAM_REGISTER
371
         port (
372
                  WRITE_ADDRESS_IN : in bit_vector(3 downto 0);
373
                  MATCH_TYPE_IN : in bit_vector(3 downto 0);
374
                  LITERAL_DATA_IN : in bit_vector(31 downto 0);
375
                  LITERAL_MASK_IN : in bit_vector(4 downto 0);
376
                  U_DATA_VALID_IN : in bit;
377
                        ENABLE : in bit;
378
              RESET : in bit;
379
                  CLEAR : in bit;
380
                  CLK : in bit;
381
                  WRITE_ADDRESS_OUT :out bit_vector(3 downto 0);
382
                  MATCH_TYPE_OUT : out bit_vector(3 downto 0);
383
                  LITERAL_DATA_OUT :out bit_vector(31 downto 0);
384
                  LITERAL_MASK_OUT : out bit_vector(4 downto 0);
385
                  U_DATA_VALID_OUT : out bit
386
          );
387
          end component;
388
 
389
        component LOCATION_EQUAL
390
        port (
391
                  WRITE_ADDRESS_IN : in bit_vector(3 downto 0);
392
                  READ_ADDRESS_IN : in bit_vector(3 downto 0);
393
                  CLK : in bit;
394
                  RESET : in bit;
395
       CLEAR : in bit;
396
                  ENABLE : in bit;
397
                  WRITE_ADDRESS_OUT : out bit_vector(3 downto 0);
398
                  READ_ADDRESS_OUT  : out bit_vector(7 downto 0);
399
              EQUAL : out bit);
400
        end component;
401
 
402
 
403
 
404
    component DECODE_LOGIC_PBC
405
        port(
406
            LITERAL_DATA : out bit_vector(31 downto 0);
407
            MATCH_TYPE : out bit_vector(3 downto 0);
408
            MATCH_LOC : out bit_vector(3 downto 0);
409
                MASK : out bit_vector(4 downto 0);
410
                WAIT_DATA : out bit;
411
            D_FULL_HIT : out bit;
412
            UNDERFLOW : out bit;
413
                RL_DETECTED : out bit;
414
                RL_COUNT : out bit_vector(7 downto 0);
415
                COUNT_ENABLE : out bit;
416
                END_COUNT : in bit;
417
            DIN : in bit_vector(63 downto 0);
418
            DECOMP : in bit;
419
            CLEAR : in bit;
420
                        RESET : in bit;
421
            CLK : in bit;
422
                ENABLE : in bit ;
423
     OVERFLOW_CONTROL : in bit;
424
                DECODING_UNDERFLOW : in bit
425
        );
426
    end component;
427
 
428
    -- Signal declarations
429
    signal C_DIN : bit_vector(63 downto 0);
430
    signal RAM_DATA : std_logic_vector(31 downto 0);
431
    signal RAM_MASK : std_logic_vector(3 downto 0);
432
        signal RAM_DATA_AUX : std_logic_vector(31 downto 0);
433
        signal RAM_MASK_AUX : std_logic_vector(3 downto 0);
434
 
435
    signal D_FULL_HIT : bit;
436
 
437
 
438
    signal D_LIT_DATA : bit_vector(31 downto 0);
439
        signal D_LIT_MASK : bit_vector(4 downto 0);
440
    signal D_MLOC : bit_vector(15 downto 0);
441
    signal D_MTYPE : bit_vector(3 downto 0);
442
 
443
    signal D_MOVE: bit_vector(15 downto 0);
444
 
445
 
446
    signal U_DOUT : bit_vector(31 downto 0);
447
 
448
 
449
    signal ENABLED:bit;
450
 
451
    signal D_LIT_DATA_P1: bit_vector(31 downto 0);
452
        signal D_LIT_MASK_P1: bit_vector(4 downto 0);
453
    signal D_MTYPE_P1 : bit_vector(3 downto 0);
454
        signal D_LIT_DATA_P2: bit_vector(31 downto 0);
455
        signal D_LIT_MASK_P2: bit_vector(4 downto 0);
456
    signal D_MTYPE_P2 : bit_vector(3 downto 0);
457
    signal MLOC_P1 : bit_vector(3 downto 0);
458
        signal D_MLOC_P2 : bit_vector(15 downto 0);
459
    signal MLOC : bit_vector(3 downto 0);
460
    signal D_FULL_HIT_P1 : bit;
461
    signal D_FULL_HIT_P2 : bit;
462
 
463
        signal MOVE_ENABLE_P2 : bit;
464
 
465
   signal MOVE : bit_vector(14 downto 0);
466
   signal MOVE_INT : bit_vector(15 downto 0); -- Out of order adaptation
467
   signal MOVE_INT_AUX : bit_vector(15 downto 0); -- ram initial
468
   signal MOVE_DROP : bit_vector(15 downto 0);
469
 
470
   --RLI signals
471
 
472
 
473
   signal RL_DETECTED_D : bit;
474
   signal RL_COUNT_D : bit_vector(7 downto 0); -- data of the number of repeticions
475
   signal END_COUNT_D : bit;
476
   signal COUNT_ENABLE_D : bit;
477
 
478
   signal U_DOUT_R : bit_vector(31 downto 0);
479
   signal U_MASK_R : bit_vector(3 downto 0);
480
 
481
 
482
   -- to control underflow condtions in the decompression buffer
483
 
484
   signal WAIT_DATA : bit;
485
 
486
   -- memory signals
487
 
488
   signal WRITE_ADDRESS : bit_vector(3 downto 0);
489
   signal READ_ADDRESS : bit_vector(3 downto 0);
490
   signal WRITE_ADDRESS_MEMORY : std_logic_vector(7 downto 0);
491
   signal READ_ADDRESS_MEMORY : std_logic_vector(7 downto 0);
492
   signal CLK_MEMORY : std_logic;
493
   signal U_DOUT_R_MEMORY : std_logic_vector(31 downto 0);
494
   signal ENABLED_MEMORY_RD : std_logic;
495
   signal ENABLED_MEMORY_WR : std_logic;
496
   signal MOVE_POINTER : bit_vector(15 downto 0);
497
   signal D_MTYPE_MEM :std_logic_vector(3 downto 0);
498
   signal U_MASK_R_MEMORY : std_logic_vector(3 downto 0);
499
   -- RAM syncrnous
500
 
501
   signal ASSEM_DATA : std_logic_vector(31 downto 0);
502
   signal ASSEM_MASK : std_logic_vector(3 downto 0);
503
   signal D_MTYPE_OUT : bit_vector(3 downto 0);
504
   signal D_LIT_DATA_OUT : bit_vector(31 downto 0);
505
   signal D_LIT_MASK_OUT : bit_vector(4 downto 0);
506
   signal U_DOUT_R_INT : std_logic_vector(31 downto 0);
507
   signal U_MASK_R_INT : std_logic_vector(3 downto 0);
508
   signal EQUAL : bit;
509
   signal U_DATA_VALID_INT : bit;
510
   signal READ_ADDRESS_OUT : bit_vector(7 downto 0);
511
   signal WRITE_ADDRESS_OUT : bit_vector(3 downto 0);
512
   signal WRITE_ADDRESS_INT : bit_vector(3 downto 0);
513
 
514
        signal tsmc_cena_n , tsmc_cenb_n : std_logic;
515
        signal tsmc_wena_n , tsmc_wenb_n : std_logic;
516
 
517
 
518
 
519
 
520
   begin
521
    -- Signal assignments
522
 
523
    C_DIN <= C_DATAIN;
524
 
525
    U_DATAOUT <= U_DOUT;
526
 
527
    -- Component instances
528
 
529
 
530
    OB_ASSEM_1 : OB_ASSEM
531
        port map(
532
            RAM_DATA => ASSEM_DATA,
533
                RAM_MASK => ASSEM_MASK,
534
            MATCH_TYPE => D_MTYPE_OUT,
535
            LITERAL_DATA => D_LIT_DATA_OUT,
536
                        LITERAL_MASK => D_LIT_MASK_OUT,
537
            DOUT => U_DOUT_R,
538
                        MOUT => U_MASK_R
539
        );
540
 
541
 
542
        REG_TEMP1 : REG_TEMP
543
          port map(
544
                     DATA_IN => U_DOUT_R,
545
                         MASK_IN => U_MASK_R,
546
                     CLK => CLK,
547
                     CLEAR => CLEAR,
548
                         RESET => RESET,
549
                        ENABLE => U_DATA_VALID_INT,
550
                         MASK_OUT => U_MASK_R_INT,
551
                     DATA_OUT => U_DOUT_R_INT
552
         );
553
 
554
        MUX_RAM1: MUX_RAM
555
        port map(
556
                        RAM_MASK => RAM_MASK,
557
                        RAM_DATA => RAM_DATA,
558
                        REG_DATA => U_DOUT_R_INT,
559
                        REG_MASK => U_MASK_R_INT,
560
                        EQUAL => EQUAL,
561
                        ASSEM_DATA => ASSEM_DATA,
562
                        ASSEM_MASK => ASSEM_MASK
563
 
564
                );
565
 
566
 
567
        ODA_REGISTER_1 : ODA_REGISTER_D
568
                port map(
569
                        MOVE_IN => MOVE_DROP,
570
                        MOVE_ENABLE => ENABLED, -- ram initialization 
571
                        CONTROL => MOVE,
572
                        CLK => CLK,
573
                        CLEAR => CLEAR,
574
                        RESET => RESET,
575
                        MOVE_OUT => MOVE_INT
576
                        );
577
 
578
        MC_MUX_1 : MC_MUX_3D
579
        port map(
580
            B => D_MOVE,
581
            ENABLED => ENABLED,
582
            Y => MOVE_DROP
583
        );
584
 
585
 
586
 
587
        MOVE_GENERATION : MLD_DPROP_5 port map ( DIN => MOVE_INT_AUX,
588
                                                                DOUT => MOVE,
589
                                                                FULL_OR => open
590
                                                                );
591
 
592
    MG_LOGIC_1 : MG_LOGIC_2
593
        port map(
594
            MOVE => D_MOVE,
595
            MATCH_LOC => D_MLOC,
596
            FULL_HIT => D_FULL_HIT
597
        );
598
 
599
 
600
   DECODE4_17 : DECODE4_16_INV
601
        port map(
602
            MATCH_LOC_IN => MLOC,
603
            MATCH_LOC_OUT => D_MLOC_P2
604
        );
605
 
606
        PIPELINE_R1_D_1: PIPELINE_R1_D
607
                port map(
608
                        FULL_HIT_IN => D_FULL_HIT_P1,
609
                        MATCH_TYPE_IN => D_MTYPE_P1,
610
                        MATCH_LOC_IN => MLOC_P1,
611
                        LIT_DATA_IN => D_LIT_DATA_P1,
612
                        LIT_MASK_IN => D_LIT_MASK_P1,
613
                        MOVE_ENABLE_D_IN => WAIT_DATA,
614
                        CLEAR => CLEAR,
615
                        RESET => RESET,
616
                        CLK => CLK,
617
                        FULL_HIT_OUT => D_FULL_HIT_P2,
618
                        MATCH_TYPE_OUT => D_MTYPE_P2,
619
                        MATCH_LOC_OUT => MLOC,
620
                        LIT_DATA_OUT => D_LIT_DATA_P2,
621
                        LIT_MASK_OUT => D_LIT_MASK_P2,
622
                        MOVE_ENABLE_D_OUT => MOVE_ENABLE_P2
623
        );
624
 
625
 PIPELINE_R2_D_1: PIPELINE_R2_D
626
                port map(
627
                        MATCH_LOC_IN_D => D_MLOC_P2,
628
                        MATCH_TYPE_IN => D_MTYPE_P2,
629
                        LIT_DATA_IN => D_LIT_DATA_P2,
630
                        LIT_MASK_IN => D_LIT_MASK_P2,
631
                        MOVE_ENABLE_D_IN => MOVE_ENABLE_P2,
632
                        FULL_HIT_IN => D_FULL_HIT_P2,
633
                        CLEAR => CLEAR,
634
                        RESET => RESET,
635
                        CLK => CLK,
636
                        MATCH_LOC_OUT_D => D_MLOC,
637
                        MATCH_TYPE_OUT => D_MTYPE,
638
                        LIT_DATA_OUT => D_LIT_DATA,
639
                        LIT_MASK_OUT => D_LIT_MASK,
640
                        FULL_HIT_OUT => D_FULL_HIT,
641
                        MOVE_ENABLE_D_OUT => ENABLED
642
 
643
         );
644
 
645
 
646
  SYNC_RAM_REGISTER1 : SYNC_RAM_REGISTER
647
        port map(
648
                  WRITE_ADDRESS_IN => WRITE_ADDRESS,
649
                  MATCH_TYPE_IN => D_MTYPE,
650
                  LITERAL_DATA_IN => D_LIT_DATA,
651
                  LITERAL_MASK_IN => D_LIT_MASK,
652
                  U_DATA_VALID_IN => ENABLED,
653
                        ENABLE => ENABLED,
654
              CLEAR => CLEAR,
655
                  RESET => RESET,
656
              CLK => CLK,
657
                  WRITE_ADDRESS_OUT => WRITE_ADDRESS_INT,
658
                  MATCH_TYPE_OUT => D_MTYPE_OUT,
659
                  LITERAL_DATA_OUT => D_LIT_DATA_OUT,
660
                  LITERAL_MASK_OUT => D_LIT_MASK_OUT,
661
                  U_DATA_VALID_OUT => U_DATA_VALID_INT);
662
 
663
  LOCATION_EQUAL1: LOCATION_EQUAL
664
        port map(
665
                  WRITE_ADDRESS_IN => WRITE_ADDRESS_INT,
666
                  READ_ADDRESS_IN => READ_ADDRESS,
667
                  CLK => CLK,
668
                  CLEAR => CLEAR,
669
                  RESET => RESET,
670
                  ENABLE => ENABLED, -- U_DATA_VALID_INT,
671
                  WRITE_ADDRESS_OUT => WRITE_ADDRESS_OUT,
672
                  READ_ADDRESS_OUT => READ_ADDRESS_OUT,
673
              EQUAL => EQUAL);
674
 
675
 
676
        RAM_DIC : DP_RAM_XILINX_256
677
        port map (
678
        addra =>WRITE_ADDRESS_MEMORY,
679
        clka =>CLK_MEMORY,
680
        addrb =>READ_ADDRESS_MEMORY,
681
        clkb =>CLK_MEMORY,
682
        dina =>U_DOUT_R_MEMORY,
683
        wea (0) =>ENABLED_MEMORY_WR,
684
        enb =>ENABLED_MEMORY_RD,
685
        doutb =>RAM_DATA);
686
 
687
 
688
-- Actel memory
689
 
690
--   RAM_DIC : MY_MEMORY
691
--   port map(DO => RAM_DATA,
692
--      RCLOCK => CLK_MEMORY,
693
--      WCLOCK => CLK_MEMORY,
694
--      DI => U_DOUT_R_MEMORY,
695
--      WRB => ENABLED_MEMORY_WR,
696
--      RDB => ENABLED_MEMORY_RD,
697
--      WADDR =>  WRITE_ADDRESS_MEMORY,
698
--      RADDR => READ_ADDRESS_MEMORY);
699
 
700
-- Altera memory
701
 
702
 
703
 
704
--ALT_RAM_DIC :
705
--
706
--if (not TSMC013) generate
707
--
708
--RAM_DIC :   LPM_RAM_DP
709
-- generic map(LPM_WIDTH => 32,
710
--             LPM_WIDTHAD  => 8,
711
--             LPM_NUMWORDS => 256,
712
--             LPM_OUTDATA  =>  "UNREGISTERED",
713
--                       LPM_INDATA => "REGISTERED",
714
--              LPM_RDADDRESS_CONTROL => "REGISTERED",
715
--              LPM_WRADDRESS_CONTROL => "REGISTERED",
716
--              LPM_FILE  => "UNUSED",
717
--              LPM_TYPE  => "LPM_RAM_DP",
718
--              LPM_HINT => "UNUSED")            
719
--   PORT MAP(data => U_DOUT_R_MEMORY,
720
--            rdaddress => READ_ADDRESS_MEMORY,
721
--            wraddress => WRITE_ADDRESS_MEMORY,
722
--            wrclken => ENABLED_MEMORY_WR,
723
--              rdclken => ENABLED_MEMORY_RD,
724
--            rden => ENABLED_MEMORY_RD,
725
--            wren => ENABLED_MEMORY_WR,
726
--            wrclock => CLK_MEMORY,
727
--              rdclock => CLK_MEMORY,
728
--           q => RAM_DATA);
729
--
730
--end generate;
731
 
732
-- Port 1 = R
733
 
734
-- Port 2 = R/W
735
 
736
--TSMC013_RAM_DIC :
737
--
738
--  if (TSMC013) generate
739
--
740
--  TMSC_RAM : ra2sh_256W_32B_8MX_offWRMSK_8WRGRAN port map
741
--      (
742
--        clka        =>      CLK_MEMORY,
743
--        cena        =>      tsmc_cena_n ,
744
--        wena        =>      tsmc_wena_n,
745
--        aa          =>      READ_ADDRESS_MEMORY,
746
--        da          =>      U_DOUT_R_MEMORY,
747
--        qa          =>      RAM_DATA,
748
--        clkb        =>      CLK_MEMORY,
749
--        cenb        =>      tsmc_cenb_n,
750
--        wenb        =>      tsmc_wenb_n,
751
--        ab          =>      WRITE_ADDRESS_MEMORY,
752
--        db          =>      U_DOUT_R_MEMORY,
753
--        qb          =>      OPEN
754
--      ) ;      
755
--
756
--end generate;
757
 
758
 
759
 
760
tsmc_cenb_n <= not (ENABLED_MEMORY_WR);
761
tsmc_cena_n <= not (ENABLED_MEMORY_RD);
762
tsmc_wena_n <='1';
763
 
764
--    not (RDEN_SB); Always in read-mode; read-enable used to
765
 
766
--    power-up ram
767
 
768
tsmc_wenb_n <= not (ENABLED_MEMORY_WR);
769
 
770
MASK_ARRAY : DP_RAM_XILINX_MASK
771
        port map (
772
        addra => WRITE_ADDRESS_MEMORY,
773
        clka =>CLK_MEMORY,
774
        addrb =>READ_ADDRESS_MEMORY,
775
        clkb =>CLK_MEMORY,
776
        dina => U_MASK_R_MEMORY,
777
        wea (0) =>ENABLED_MEMORY_WR,
778
        enb =>ENABLED_MEMORY_RD,
779
        doutb =>RAM_MASK);
780
 
781
--MASK_ARRAY : MY_MASK_MEMORY
782
 
783
--      port map(DO => RAM_MASK,
784
--    RCLOCK => CLK_MEMORY,
785
--      WCLOCK => CLK_MEMORY,
786
--      DI => U_MASK_R_MEMORY,
787
--      WRB => ENABLED_MEMORY_WR,
788
--     RDB => ENABLED_MEMORY_RD,
789
--      WADDR =>  WRITE_ADDRESS_MEMORY,
790
--      RADDR => READ_ADDRESS_MEMORY);
791
 
792
 
793
 
794
--MASK_ARRAY :   LPM_RAM_DP_MASK
795
--
796
-- PORT MAP(data => U_MASK_R_MEMORY,
797
--            rdaddress => READ_ADDRESS_MEMORY,
798
--           wraddress => WRITE_ADDRESS_MEMORY,
799
--            wrclken => ENABLED_MEMORY_WR,
800
--              rdclken => ENABLED_MEMORY_RD,
801
--           rden => ENABLED_MEMORY_RD,
802
--            wren => ENABLED_MEMORY_WR,
803
--            wrclock => CLK_MEMORY,
804
--              rdclock => CLK_MEMORY,
805
--            q => RAM_MASK);
806
 
807
 
808
        CLK_MEMORY <= To_X01Z(CLK);
809
        WRITE_ADDRESS_MEMORY <= To_X01Z("0000" & WRITE_ADDRESS_OUT) after 5 ns when RESET = '1' else "00000000" after 5 ns;
810
        READ_ADDRESS_MEMORY <= To_X01Z(READ_ADDRESS_OUT)  after 5 ns ; -- memory is defined to hold 256 values;
811
        U_DOUT_R_MEMORY <= To_X01Z(U_DOUT_R)  after 5 ns  when RESET = '1' else x"00000000"  after 5 ns;
812
        U_MASK_R_MEMORY <= To_X01Z(U_MASK_R)  after 5 ns  when RESET = '1' else "1111"  after 5 ns ; -- write this data at the beggining of each operation
813
        ENABLED_MEMORY_WR <= To_X01Z(not(U_DATA_VALID_INT)) or To_X01Z(not(RESET))  after 5 ns ; -- write 0 in location 0 ram initial
814
        ENABLED_MEMORY_RD <= To_X01Z(not(ENABLED))  after 5 ns ;
815
 
816
      -- if D_LIT_MASK_OUT(3) = 0 then mask is 10000 single byte move vector leaves the pointer array intact
817
 
818
        MOVE_POINTER <= MOVE_INT(15 downto 1) & MOVE(14) when (ENABLED = '0' and D_LIT_MASK_OUT(3) = '1') else "1000000000000000"; -- ram initial
819
        MOVE_INT_AUX <= MOVE_INT when (ENABLED ='0' and D_LIT_MASK_OUT(3) = '1') else "1000000000000000";
820
--      MOVE_POINTER <= MOVE_INT(15 downto 0) when (ENABLED = '0' and D_LIT_MASK_OUT(3) = '1') else "1000000000000000"; -- ra
821
 
822
--      MOVE_POINTER <= MOVE_INT(15 downto 2) & MOVE(13) when ENABLED = '0' else "100000000000000"; -- ram initial
823
--      MOVE_INT_AUX <= MOVE_INT when ENABLED ='0' else "1000000000000000";
824
 
825
        POINTER_ARRAY_1 : POINTER_ARRAY
826
        port map
827
        (
828
                PREVIOUS => WRITE_ADDRESS,
829
                MOVE =>  MOVE,
830
                MOVE_ENABLE => ENABLED,
831
                SEL_WRITE =>MOVE_POINTER,
832
                SEL_READ => D_MLOC,
833
                CLEAR => CLEAR,
834
                RESET => RESET,
835
                CLK => CLK,
836
                WRITE_ADDRESS => WRITE_ADDRESS,
837
                READ_ADDRESS => READ_ADDRESS
838
        );
839
 
840
 
841
 
842
 
843
        RLI_D : RLI_COUNTER_D
844
                port map(
845
                LOAD => RL_DETECTED_D,
846
                DATA => RL_COUNT_D,
847
            ENABLE_D => COUNT_ENABLE_D,
848
                CLEAR => CLEAR,
849
                RESET => RESET,
850
                CLK => CLK,
851
                END_COUNT => END_COUNT_D
852
            );
853
 
854
 
855
 
856
 
857
    DECODE_LOGIC_1 : DECODE_LOGIC_PBC
858
        port map (
859
            LITERAL_DATA => D_LIT_DATA_P1,
860
            MATCH_TYPE => D_MTYPE_P1,
861
            MATCH_LOC =>MLOC_P1,
862
                        MASK => D_LIT_MASK_P1,
863
                    WAIT_DATA => WAIT_DATA,
864
            D_FULL_HIT => D_FULL_HIT_P1,
865
                    RL_DETECTED => RL_DETECTED_D,
866
                    RL_COUNT => RL_COUNT_D,
867
            UNDERFLOW => UNDERFLOW,
868
                    COUNT_ENABLE => COUNT_ENABLE_D,
869
                    END_COUNT => END_COUNT_D,
870
            DIN => C_DIN,
871
            DECOMP => DECOMP,
872
            CLEAR => CLEAR,
873
                        RESET => RESET,
874
                ENABLE => MOVE_ENABLE,
875
 
876
                    DECODING_UNDERFLOW => DECODING_UNDERFLOW,
877
            OVERFLOW_CONTROL => OVERFLOW_CONTROL,
878
            CLK => CLK
879
        );
880
 
881
 
882
                U_DATA_VALID <= U_DATA_VALID_INT;
883
                U_DOUT <= U_DOUT_R;
884
                MASK   <= U_MASK_R;
885
 
886
 
887
--      OUT_REGISTER_1 : OUT_REGISTER 
888
--        port map(
889
--        DIN => U_DOUT_R,
890
--              U_DATA_VALID_IN => U_DATA_VALID_INT,
891
--        FINISH => FINISH,
892
--              DECOMP => DECOMP,
893
--              CLEAR => CLEAR,
894
--       RESET => RESET,
895
--              CLK => CLK,
896
--              U_DATA_VALID_OUT => U_DATA_VALID,
897
--        QOUT => U_DOUT
898
--        );
899
 
900
end level2_4d;

powered by: WebSVN 2.1.0

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