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

Subversion Repositories xmatchpro

[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [xmatch_sim7/] [src/] [decode_logic_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       = DECODE_LOGIC     --
19
--  version      = 1.0              --
20
--  last update  = 16/10/00          --
21
--  author       = Jose Nunez       --
22
--------------------------------------
23
 
24
-- FUNCTION
25
-- hierarchy level that includes all the disassembly logic and decoding functions for decompression.
26
 
27
--  PIN LIST
28
--  LITERAL_DATA : literals reconstructed 
29
--  MATCH_TYPE : match type decoded
30
--  MATCH_LOC : match location decoded
31
--  D_FULL_HIT : full hit detection
32
--  UNDERFLOW : underflow more data required
33
--  DIN : input of compressed data
34
--  DECOMP : decompression active
35
--  CLEAR : asyncronus clear
36
--  CLK : master clock
37
--  ENABLE : enable decompression delaying one cycle
38
 
39
 
40
 
41
library IEEE;
42
use IEEE.std_logic_1164.all;
43
 
44
entity DECODE_LOGIC_PBC is
45
    port(
46
        LITERAL_DATA : out bit_vector(31 downto 0);
47
        MATCH_TYPE : out bit_vector(3 downto 0);
48
        MATCH_LOC : out bit_vector(3 downto 0);
49
                MASK : out bit_vector(4 downto 0);
50
                WAIT_DATA : out bit;
51
        D_FULL_HIT : out bit;
52
        UNDERFLOW : out bit;
53
            RL_DETECTED : out bit;
54
            RL_COUNT : out bit_vector(7 downto 0);
55
            COUNT_ENABLE : out bit;
56
            END_COUNT : in bit;
57
        DIN : in bit_vector(63 downto 0);
58
        DECOMP : in bit;
59
        CLEAR : in bit;
60
                RESET : in bit;
61
        CLK : in bit;
62
           ENABLE : in bit;
63
      OVERFLOW_CONTROL : in bit; -- control overflows in the output buffer
64
           DECODING_UNDERFLOW : in bit
65
 
66
    );
67
end DECODE_LOGIC_PBC;
68
 
69
architecture DECODE_LOGIC of DECODE_LOGIC_PBC is
70
    -- Component declarations
71
    component LATCH7
72
        port(
73
            D_IN : in bit_vector(6 downto 0);
74
            ENABLE : in bit;
75
                CLEAR : in bit;
76
                RESET : in bit;
77
            CLK : in bit;
78
            D_OUT : out bit_vector(6 downto 0)
79
        );
80
    end component;
81
    component LATCH133
82
        port(
83
            D_IN : in bit_vector(132 downto 0);
84
            CLEAR : in bit;
85
                RESET : in bit;
86
                    CLK : in bit;
87
            D_OUT : out bit_vector(132 downto 0)
88
        );
89
    end component;
90
     component DECOMP_ASSEM_9
91
        port(
92
            OLD_LENGTH : in bit_vector(6 downto 0);
93
            OLD_DATA : in bit_vector(132 downto 0);
94
                DECODING_UNDERFLOW : in bit;
95
                        MATCH_LENGTH : in bit_vector(5 downto 0);
96
            DATA_IN : in bit_vector(63 downto 0);
97
            NEW_LENGTH : out bit_vector(6 downto 0);
98
            NEW_DATA : out bit_vector(132 downto 0);
99
            UNDERFLOW : out bit
100
        );
101
    end component;
102
 
103
 
104
    component SHIFT_LITERAL
105
        port(
106
            CM_LENGTH : in bit_vector(3 downto 0);
107
            DIN_LIT : in bit_vector(34 downto 0);
108
            DOUT_LIT : out bit_vector(31 downto 0)
109
          --  DECOMP : in bit
110
        );
111
    end component;
112
 
113
        component NFL_COUNTERS2 -- NFL COUNTER
114
        port
115
        (
116
      INC : in bit ;
117
      COUNT_ENABLE : in bit ;
118
      CLK : in bit ;
119
      RESET : in bit ;
120
      CLEAR : in bit;
121
      NFL_MINUS_ONE : out bit_vector(7 downto 0) ;
122
      TABLE_FULL : out bit
123
          );
124
         end component;
125
 
126
        component RLI_DR
127
        port(
128
            MATCH_LOC_IN: in bit_vector( 3 downto 0);
129
                MATCH_TYPE_IN: in bit_vector(3 downto 0);
130
                FULL_HIT_IN : in bit;
131
                ENABLE : in bit;
132
                MASK_IN : in bit_vector(4 downto 0);
133
            SEARCH_STRING_IN:  in bit_vector(31 downto 0);
134
--                  INC_IN:in bit;
135
            CLEAR:in bit;
136
                RESET: in bit;
137
                    CLK:in bit;
138
                        MATCH_LOC_OUT: out bit_vector (3 downto 0);
139
                MATCH_TYPE_OUT:out bit_vector(3 downto 0);
140
                FULL_HIT_OUT : out bit;
141
                MASK_OUT : out bit_vector(4 downto 0);
142
            SEARCH_STRING_OUT:  out bit_vector(31 downto 0)
143
 
144
--            INC_OUT:out bit
145
      );
146
          end component;
147
 
148
 
149
        component RLI_DCU
150
        port
151
        (
152
      RL_DETECTED : in bit;
153
      LOCATION_IN : in bit_vector(3 downto 0);
154
      MATCH_TYPE_IN : in bit_vector(3 downto 0);
155
        MASK_IN : in bit_vector(4 downto 0);
156
        FULL_HIT_IN : in bit;
157
          END_COUNT : in bit;
158
          CLEAR : in bit;
159
          RESET : in bit;
160
          CLK : in bit ;
161
          LOCATION_OUT : out bit_vector(3 downto 0);
162
          MATCH_TYPE_OUT : out bit_vector(3 downto 0);
163
          MASK_OUT : out bit_vector(4 downto 0);
164
          FULL_HIT_OUT : out bit;
165
          SET_LENGTH_TO_ZERO : out bit
166
        );
167
        end component;
168
 
169
--    component DECOMP_DECODE_4
170
--        port(
171
--            D_IN : in bit_vector(15 downto 0);
172
--            DECOMP : in bit;
173
--            ENABLE : in bit;
174
--            DECODING_UNDERFLOW : in bit;
175
--                      UNDERFLOW : in bit;
176
--                      NFL_MINUS_ONE : in bit_vector(3 downto 0);
177
--                      CLK : in bit;
178
--                      CLEAR : in bit;
179
--                      RESET : in bit;
180
--                      FULL_MLENGTH : out bit_vector(5 downto 0);
181
--                      FULL_HIT : out bit;
182
--          MATCH_TYPE : out bit_vector(3 downto 0);
183
--            MATCH_LOC : out bit_vector(3 downto 0);
184
--                      WAIT_DATA : out bit;
185
--                      RL_DETECTED : out bit;
186
--                      RL_COUNT : out bit_vector(7 downto 0);
187
--                      MASK : out bit_vector(4 downto 0);
188
--          PART_MLENGTH : out bit_vector(3 downto 0)
189
--        );
190
--    end component;
191
 
192
    component DECOMP_DECODE_4
193
        port(
194
            D_IN : in bit_vector(15 downto 0);
195
            OVERFLOW_CONTROL : in bit;
196
            DECOMP : in bit;
197
            ENABLE : in bit;
198
            DECODING_UNDERFLOW : in bit;
199
                        UNDERFLOW : in bit;
200
                        INC : in bit; -- the NFL counter is incremented . once cycle late ODA effect
201
       SET_LENGTH_TO_ZERO : in bit;
202
                        TABLE_FULL : in bit;
203
                        NFL_MINUS_ONE : in bit_vector(3 downto 0);
204
                        CLK : in bit;
205
                        CLEAR : in bit;
206
                        RESET : in bit;
207
                        FULL_MLENGTH : out bit_vector(5 downto 0);
208
                        FULL_HIT : out bit;
209
            MATCH_TYPE : out bit_vector(3 downto 0);
210
            MATCH_LOC : out bit_vector(3 downto 0);
211
                        WAIT_DATA : out bit;
212
                        RL_DETECTED : out bit;
213
                        RL_COUNT : out bit_vector(7 downto 0);
214
                        MASK : out bit_vector(4 downto 0);
215
            PART_MLENGTH : out bit_vector(3 downto 0)
216
        );
217
    end component;
218
 
219
    -- Signal declarations
220
    signal CM_LENGTH : bit_vector(3 downto 0);
221
    signal FULL_MLENGTH : bit_vector(5 downto 0);
222
    signal FULL_MLENGTH_RLI : bit_vector(5 downto 0);
223
    signal LIT_DATA : bit_vector(31 downto 0);
224
        signal MASK_AUX : bit_vector(4 downto 0);
225
        signal MASK_CU : bit_vector(4 downto 0);
226
        signal LOCATION : bit_vector(3 downto 0);
227
        signal LOCATION_RLI : bit_vector(3 downto 0);
228
        signal MATCH_TYPE_RLI : bit_vector(3 downto 0);
229
        signal RL_DETECTED_INT : bit;
230
        signal RL_DETECTED_AUX : bit;
231
    signal NEW_DATA : bit_vector(132 downto 0);
232
    signal NEW_LENGTH : bit_vector(6 downto 0);
233
    signal OLD_DATA : bit_vector(132 downto 0);
234
    signal OLD_LENGTH : bit_vector(6 downto 0);
235
    signal SET_LENGTH_TO_ZERO : bit; -- when RL active the length is zero
236
        signal LOCATION_RLI_P : bit_vector(3 downto 0);
237
    signal MATCH_TYPE_RLI_P : bit_vector(3 downto 0);
238
    signal LIT_DATA_RLI_P : bit_vector(31 downto 0);
239
    signal FULL_HIT_RLI : bit;
240
    signal FULL_HIT_RLI_P:bit;
241
    signal PROV : bit_vector(15 downto 0);
242
    signal UNDERFLOW_INT : bit ; -- to hold the underflow from decomp assem
243
         signal UNDERFLOW_AUX : bit;
244
        signal NFL_MINUS_ONE : bit_vector(7 downto 0);
245
        signal TABLE_FULL :bit;
246
  signal WAIT_DATA_AUX : bit;
247
  signal INC_NFL_COUNTER : bit;
248
  signal ENABLE_DR : bit;
249
 
250
begin
251
    -- Signal assignments
252
    LITERAL_DATA <= LIT_DATA;
253
    MATCH_LOC <= LOCATION;
254
 
255
    -- Component instances
256
    LATCH7_1 : LATCH7
257
        port map(
258
            D_IN => NEW_LENGTH,
259
                ENABLE => DECOMP,
260
            CLEAR => CLEAR,
261
                        RESET => RESET,
262
            CLK => CLK,
263
            D_OUT => OLD_LENGTH
264
        );
265
    LATCH133_1 : LATCH133
266
        port map(
267
            D_IN => NEW_DATA,
268
            CLEAR => CLEAR,
269
                RESET => RESET,
270
                    CLK => CLK,
271
            D_OUT => OLD_DATA
272
        );
273
 
274
 
275
       DECOMP_ASSEM_1 : DECOMP_ASSEM_9
276
        port map(
277
            OLD_LENGTH => OLD_LENGTH,
278
            OLD_DATA => OLD_DATA,
279
                    DECODING_UNDERFLOW => DECODING_UNDERFLOW,
280
            MATCH_LENGTH => FULL_MLENGTH_RLI,
281
            DATA_IN => DIN,
282
           -- DECOMP => DECOMP,
283
            NEW_LENGTH => NEW_LENGTH,
284
            NEW_DATA => NEW_DATA,
285
            UNDERFLOW => UNDERFLOW_INT
286
        );
287
 
288
        FULL_MLENGTH_RLI <= FULL_MLENGTH when (SET_LENGTH_TO_ZERO = '0' and OVERFLOW_CONTROL = '0') else "000000"; -- do not move
289
        RL_DETECTED_AUX <= RL_DETECTED_INT when DECOMP='0' and SET_LENGTH_TO_ZERO ='0' else '0'; -- do not do two RL detections together
290
 
291
        COUNT_ENABLE <= SET_LENGTH_TO_ZERO;
292
 
293
    SHIFT_LITERAL_1 : SHIFT_LITERAL
294
        port map(
295
            CM_LENGTH => CM_LENGTH,
296
            DIN_LIT => OLD_DATA(132 downto 98),
297
            DOUT_LIT => LIT_DATA_RLI_P
298
   --         DECOMP => DECOMP
299
        );
300
 
301
  ENABLE_DR <= OVERFLOW_CONTROL or SET_LENGTH_TO_ZERO or DECODING_UNDERFLOW;
302
 
303
        RLI_DR_1 : RLI_DR
304
    port map(
305
            MATCH_LOC_IN => LOCATION_RLI_P,
306
                MATCH_TYPE_IN => MATCH_TYPE_RLI_P,
307
                FULL_HIT_IN => FULL_HIT_RLI_P,
308
                ENABLE => ENABLE_DR,
309
                MASK_IN => MASK_AUX,
310
            SEARCH_STRING_IN => LIT_DATA_RLI_P,
311
                    CLEAR => CLEAR,
312
                        RESET => RESET,
313
            CLK => CLK,
314
                MATCH_LOC_OUT => LOCATION_RLI,
315
                MATCH_TYPE_OUT => MATCH_TYPE_RLI,
316
                FULL_HIT_OUT => FULL_HIT_RLI,
317
                MASK_OUT => MASK_CU,
318
            SEARCH_STRING_OUT => LIT_DATA
319
            );
320
 
321
        RLI_DCU_1 : RLI_DCU
322
        port map
323
        (
324
      RL_DETECTED => RL_DETECTED_AUX,
325
      LOCATION_IN => LOCATION_RLI,
326
      MATCH_TYPE_IN => MATCH_TYPE_RLI,
327
        MASK_IN => MASK_CU,
328
        FULL_HIT_IN => FULL_HIT_RLI,
329
          END_COUNT => END_COUNT,
330
          CLEAR => CLEAR,
331
          RESET => RESET,
332
          CLK => CLK,
333
          LOCATION_OUT => LOCATION,
334
          MATCH_TYPE_OUT => MATCH_TYPE,
335
        MASK_OUT => MASK,
336
          FULL_HIT_OUT => D_FULL_HIT,
337
          SET_LENGTH_TO_ZERO => SET_LENGTH_TO_ZERO
338
        );
339
 
340
 
341
    RL_DETECTED <= RL_DETECTED_AUX;
342
 
343
    PROV <= OLD_DATA(132 downto 117);
344
          UNDERFLOW_AUX <= UNDERFLOW_INT;
345
    WAIT_DATA <= WAIT_DATA_AUX;
346
 
347
     -- or SET_LENGTH_TO_ZERO; -- do not undeflow when RLI is active
348
 
349
    UNDERFLOW <= UNDERFLOW_AUX;
350
         -- modify to increment earlier to match software and compressor. 
351
    INC_NFL_COUNTER <= FULL_HIT_RLI_P and not(WAIT_DATA_AUX); -- one cycle delay to replicate ODA use FULL_HIT_RLI
352
   -- do not increment if wait data
353
 
354
        NFL_COUNTER : NFL_COUNTERS2 --NFL counter
355
 
356
        port map(INC => INC_NFL_COUNTER,
357
                COUNT_ENABLE =>ENABLE,
358
                CLK => CLK,
359
                RESET => RESET,
360
                CLEAR => CLEAR,
361
            NFL_MINUS_ONE => NFL_MINUS_ONE,
362
                TABLE_FULL => TABLE_FULL
363
          );
364
 
365
        DECOMP_DECODE_1 : DECOMP_DECODE_4
366
        port map(
367
            D_IN =>PROV ,
368
            OVERFLOW_CONTROL => OVERFLOW_CONTROL,
369
            DECOMP => DECOMP,
370
                ENABLE => ENABLE,
371
            DECODING_UNDERFLOW => DECODING_UNDERFLOW,
372
                UNDERFLOW => UNDERFLOW_AUX,
373
                        INC => FULL_HIT_RLI,
374
       SET_LENGTH_TO_ZERO => SET_LENGTH_TO_ZERO,
375
                        TABLE_FULL => TABLE_FULL,
376
                    NFL_MINUS_ONE => NFL_MINUS_ONE(3 downto 0),
377
                        CLK => CLK,
378
                        CLEAR => CLEAR,
379
                        RESET => RESET,
380
                        FULL_MLENGTH => FULL_MLENGTH,
381
                        FULL_HIT => FULL_HIT_RLI_P,
382
            MATCH_TYPE => MATCH_TYPE_RLI_P,
383
            MATCH_LOC => LOCATION_RLI_P,
384
                        WAIT_DATA => WAIT_DATA_AUX,
385
                RL_DETECTED => RL_DETECTED_INT,
386
                RL_COUNT => RL_COUNT,
387
                MASK => MASK_AUX,
388
            PART_MLENGTH => CM_LENGTH
389
        );
390
end DECODE_LOGIC;

powered by: WebSVN 2.1.0

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