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

Subversion Repositories xmatchpro

[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [src/] [level1rd.vhd] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 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       = LEVEL1      --
19
--  version      = 2.0         --
20
--  last update  = 1/05/00     --
21
--  author       = Jose Nunez  --
22
---------------------------------
23
 
24
 
25
-- FUNCTION
26
--  Top level of the hierarchy.
27
--  This unit does not include a memory interface
28
 
29
 
30
--  PIN LIST
31
--  START        = indicates start of a compress or decompress operation
32
--  STOP         = forces the end of the current operation
33
--  COMPRESS     = selects compression mode
34
--  DECOMPRESS   = selects decompression mode
35
--  U_BS_IN      = 15 bits maximum block size 32K. size of the block to be compressed
36
--  C_BS_INOUT   = 16 bits size of the compressed block. compression read the size of the compressed block. decompresssion input the size of the compressed block. buffers stop when is reached. optional system can non-grant the bus to indicate the same. 
37
--  CLK          = master clock
38
--  CLEAR_EXT    = asynchronous reset generated externally
39
--  CLEAR            = asynchronous reset generated by the csm
40
--  U_DATAIN     = data to be compressed
41
--  C_DATAIN     = data to be decompressed
42
--  U_DATAOUT    = decompressed data
43
--  C_DATAOUT    = compressed data
44
--  ADDR_EN      = enable address tri-states
45
--  CDATA_EN     = enable compressed data tri-state outputs
46
--  UDATA_EN     = enable uncompressed data tri-state outputs
47
--  FINISHED     = signal of finished operation
48
--  COMPRESSING  = compression mode active
49
--  FLUSHING     = flush active
50
--  DECOMPRESSING = decompression active
51
--  DISALIGNED   = bytes in block is not a multiple of 4 
52
 
53
 
54
library ieee,std;
55
use ieee.std_logic_1164.all;
56
-- use std.textio.all;
57
 
58
entity level1rd is
59
port
60
(
61
        CS : in bit ;
62
        RW : in bit;
63
        ADDRESS: in bit_vector(1 downto 0);
64
        CONTROL : inout std_logic_vector(31 downto 0);
65
        CLK : in bit ;
66
        CLEAR: in bit;
67
        BUS_ACKNOWLEDGE_C : in bit;
68
        BUS_ACKNOWLEDGE_U : in bit;
69
   WAIT_C : in bit;
70
  WAIT_U : in bit;
71
        C_DATA_VALID : in bit;
72
        START_C : in bit;
73
        TEST_MODE : in bit;
74
        FINISHED_C : in bit;
75
        C_DATAIN : in bit_vector(31 downto 0);
76
        U_DATAOUT : out std_logic_vector(31 downto 0);
77
        FINISHED : out bit;
78
        FLUSHING : out bit;
79
        DECOMPRESSING : out bit;
80
        U_DATA_VALID : out bit;
81
        DECODING_OVERFLOW : out bit;
82
        CRC_OUT : out bit_vector(31 downto 0);
83
        BUS_REQUEST_C : out bit;
84
  OVERFLOW_CONTROL_DECODING_BUFFER : out bit;
85
        BUS_REQUEST_U : out bit
86
);
87
end level1rd;
88
 
89
 
90
architecture level1_1 of level1rd is
91
 
92
-- these are  the components that form level1
93
 
94
component OUT_REGISTER
95
        port(
96
            DIN : in bit_vector(31 downto 0);
97
            CLEAR : in bit;
98
                        RESET : in bit;
99
                        U_DATA_VALID_IN : in bit;
100
                        FINISHED_IN : in bit;
101
                    CLK : in bit;
102
                    U_DATA_VALID_OUT : out bit;
103
                        FINISHED_OUT : out bit;
104
            QOUT : out  bit_vector(31 downto 0)
105
        );
106
 
107
end component;
108
 
109
component CRC_UNIT_D_32
110
        port(DIN : in bit_vector(31 downto 0);
111
                 ENABLE : in bit;
112
                 CLK : in bit;
113
                 RESET : in bit;
114
                 CLEAR : in bit;
115
                 CRC_OUT : out bit_vector(31 downto 0)
116
                );
117
end component;
118
 
119
 
120
component OUTPUT_BUFFER_32_32
121
port
122
(
123
        FORCE_STOP : in bit;
124
        START_D: in bit;
125
        START_C: in bit;
126
        WRITE : in bit;
127
        FINISHED : in bit;
128
  WAITN : in bit;
129
        DATA_IN_32 : in bit_vector(31 downto 0);
130
        THRESHOLD : in bit_vector(7 downto 0);
131
        BUS_ACKNOWLEDGE : in bit;
132
        CLEAR : in bit ;
133
        CLK : in bit ;
134
        FLUSHING : out bit;
135
        FINISHED_FLUSHING : out bit;
136
        OVERFLOW_DETECTED : out bit;
137
        DATA_OUT_32: out bit_vector(31 downto 0);
138
        READY : out bit;
139
  OVERFLOW_CONTROL : out bit;
140
        BUS_REQUEST : out bit
141
);
142
end component;
143
 
144
 
145
component ASSEMBLING_UNIT
146
port
147
(
148
        ENABLE: in bit;
149
        DATA_IN_32 : in bit_vector(31 downto 0);
150
        CLEAR : in bit ;
151
        RESET : in bit;
152
        CLK : in bit ;
153
        MASK : in bit_vector(3 downto 0);
154
        WRITE : out bit;
155
        DATA_OUT_32: out bit_vector(31 downto 0)
156
);
157
end  component;
158
 
159
component REG_FILE_D
160
port
161
(
162
        DIN : in bit_vector(31 downto 0);
163
                ADDRESS : in bit_vector(1 downto 0);
164
                CRC_IN : in bit_vector(31 downto 0);
165
                LOAD_CRC : in bit;
166
        CLEAR_CR : in bit;
167
            RW : in bit;
168
        ENABLE : in bit;
169
        CLEAR : in bit;
170
        CLK : in bit;
171
            DOUT : out std_logic_vector(31 downto 0);
172
            C_BS_OUT : out bit_vector(31 downto 0);
173
            U_BS_OUT : out bit_vector(31 downto 0);
174
                CRC_OUT : out bit_vector(31 downto 0);
175
            START_D : out bit;
176
            STOP :out bit;
177
            THRESHOLD_LEVEL : out bit_vector(7 downto 0)
178
 
179
);
180
end component;
181
 
182
 
183
 
184
component C_BS_COUNTER_D
185
port
186
(
187
        C_BS_IN : in bit_vector(31 downto 0);
188
        DECOMPRESS : in bit;
189
        CLEAR : in bit;
190
        CLEAR_COUNTER :  in bit;
191
        CLK : in bit;
192
        ENABLE_D : in bit;
193
        ALL_C_DATA : out bit;
194
        C_BS_OUT : out bit_vector(31 downto 0)
195
);
196
 
197
end component;
198
 
199
 
200
component DECODING_BUFFER_32_64_2
201
port
202
(
203
  FORCE_STOP : in bit;
204
        START_D : in bit;
205
        START_C : in bit;
206
        FINISHED_D : in bit;
207
        FINISHED_C : in bit;
208
        UNDERFLOW : in bit;
209
        DATA_IN_32 : in bit_vector(31 downto 0);
210
        THRESHOLD_LEVEL : in bit_vector(9 downto 0);
211
        BUS_ACKNOWLEDGE : in bit;
212
        C_DATA_VALID : in bit;
213
  WAITN : in bit;
214
        CLEAR : in bit ;
215
        CLK : in bit ;
216
        DATA_OUT_64: out bit_vector(63 downto 0);
217
        UNDERFLOW_DETECTED : out bit;
218
        FINISH : out bit;
219
        START_ENGINE : out bit;
220
  OVERFLOW_CONTROL : out bit;
221
        BUS_REQUEST : out bit
222
);
223
end component;
224
 
225
 
226
component csm_d
227
port
228
(
229
        START_C : in bit; -- for test mode
230
        START_D : in bit;
231
        START_D_ENGINE : in bit;
232
        STOP : in bit ;
233
        END_OF_BLOCK : in bit ;
234
        CLK : in bit;
235
        CLEAR: in bit;
236
        DECOMP : out bit ;
237
        FINISH : out bit ;
238
        MOVE_ENABLE : out bit ;
239
        RESET : out bit
240
);
241
end component;
242
 
243
 
244
component BSL_TC_2_D
245
port
246
(
247
      BLOCK_SIZE : in bit_vector(31 downto 0) ;
248
      INC : in bit ;
249
      CLEAR : in bit ;
250
          RESET : in bit;
251
      CLK : in bit ;
252
      EO_BLOCK : out bit ;
253
      FINISH_D_BUFFERS : out bit
254
 
255
);
256
 
257
end component;
258
 
259
 
260
component level2_4d_pbc
261
port(
262
        CLK : in bit;
263
        RESET : in bit;
264
        CLEAR : in bit;
265
        DECOMP : in bit;
266
        MOVE_ENABLE : in bit;
267
          DECODING_UNDERFLOW : in bit;
268
          FINISH : in bit;
269
      C_DATAIN : in bit_vector(63 downto 0);
270
    U_DATAOUT : out bit_vector(31 downto 0);
271
        MASK : out bit_vector(3 downto 0);
272
        U_DATA_VALID : out bit ;
273
   OVERFLOW_CONTROL : in bit;
274
        UNDERFLOW : out bit
275
    );
276
end component;
277
 
278
 
279
signal  FINISHED_INT : bit;
280
signal UNDERFLOW_INT : bit;
281
signal  MOVE_ENABLE: bit;
282
 
283
signal  DECOMP_INT: bit;
284
signal  LOAD_BS: bit;
285
signal  INC_TC: bit;
286
signal  RESET: bit;
287
signal  EO_BLOCK: bit;
288
signal  STOP_INT: bit;
289
 
290
 
291
 
292
signal  START_D_INT : bit;
293
signal START_D_INT_BUFFERS : bit; -- to start the decompression engine
294
 
295
signal  LATCHED_BS: bit_vector(31 downto 0);
296
 
297
signal C_DATAIN_INT : bit_vector(63 downto 0);
298
signal U_DATAOUT_INT : bit_vector(31 downto 0);
299
signal U_DATAOUT_BUFFER : bit_vector(31 downto 0);
300
signal U_DATAOUT_AUX : bit_vector(31 downto 0);
301
 
302
signal U_DATAOUT_REG: bit_vector(31 downto 0);
303
 
304
signal ENABLE_READ : bit;
305
 
306
 
307
signal BUS_REQUEST_DECODING : bit;
308
 
309
 
310
 
311
 
312
signal OVERFLOW_DETECTED_DECODING : bit;
313
signal UNDERFLOW_DETECTED_DECODING : bit;
314
 
315
signal THRESHOLD_LEVEL : bit_vector(7 downto 0);
316
signal THRESHOLD_LEVEL_FIXED : bit_vector(9 downto 0);
317
 
318
 
319
signal U_DATA_VALID_INT : bit;
320
signal U_DATA_VALID_REG : bit;
321
signal U_DATA_VALID_AUX:  bit;
322
 
323
signal MASK_INT : bit_vector(3 downto 0);
324
signal WRITE_INT : bit;
325
 
326
 
327
signal FINISH_D_BUFFERS : bit;
328
signal FINISHED_BUFFER_DECODING : bit;
329
 
330
signal FINISHED_AUX : bit;
331
 
332
signal ALL_C_DATA : bit;
333
signal BUS_ACKNOWLEDGE_AUX : bit;
334
 
335
signal C_BS_INT : bit_vector(31 downto 0);
336
 
337
signal C_BS_OUT : bit_vector(31 downto 0);
338
 
339
signal CONTROL_AUX : bit_vector(31 downto 0);
340
 
341
signal CLEAR_COMMAND : bit; -- to reset the command register
342
 
343
signal ENABLE_D_COUNT : bit;  -- count compressed data during decompression
344
 
345
signal CRC_CODE : bit_vector(31 downto 0);
346
signal ENABLE_CRC : bit;
347
signal DATA_CRC : bit_vector(31 downto 0);
348
signal ENABLE_ASSEMBLE : bit; -- stop assembling when block recovered
349
signal FINISHED_BUFFER : bit;
350
signal BUS_ACKNOWLEDGE_U_AUX : bit;
351
signal BUS_REQUEST_U_AUX : bit;
352
signal THRESHOLD_LEVEL_AUX : bit_vector(7 downto 0);
353
signal OVERFLOW_CONTROL : bit;
354
 
355
 
356
 
357
begin
358
 
359
 
360
OUT_REGISTER_1: OUT_REGISTER
361
        port map(
362
            DIN =>U_DATAOUT_REG,
363
            CLEAR =>CLEAR,
364
                        RESET =>RESET,
365
                        U_DATA_VALID_IN =>U_DATA_VALID_REG,
366
                        FINISHED_IN => FINISHED_BUFFER,
367
                    CLK =>CLK,
368
                    U_DATA_VALID_OUT =>U_DATA_VALID_AUX,
369
                        FINISHED_OUT => FINISHED,
370
            QOUT =>   U_DATAOUT_AUX
371
       );
372
 
373
 
374
CRC_UNIT_1: CRC_UNIT_D_32
375
        port map(DIN =>DATA_CRC,
376
                 ENABLE =>ENABLE_CRC,
377
                 CLK => CLK,
378
                 RESET => FINISHED_BUFFER,
379
                 CLEAR => CLEAR,
380
                 CRC_OUT => CRC_CODE
381
                );
382
 
383
DATA_CRC <= U_DATAOUT_REG;
384
ENABLE_CRC <= not(U_DATA_VALID_REG);
385
 
386
OUTPUT_BUFFER_32_32_1 : OUTPUT_BUFFER_32_32
387
port map
388
(
389
        FORCE_STOP => STOP_INT,
390
        START_D =>START_D_INT,
391
        START_C => START_C,
392
        WRITE =>WRITE_INT,
393
        FINISHED =>FINISHED_INT,
394
  WAITN => WAIT_U,
395
        DATA_IN_32 =>U_DATAOUT_BUFFER,
396
        THRESHOLD =>THRESHOLD_LEVEL_AUX,
397
        BUS_ACKNOWLEDGE =>BUS_ACKNOWLEDGE_U_AUX,
398
        CLEAR =>CLEAR,
399
        CLK =>CLK,
400
        FLUSHING =>FLUSHING,
401
        FINISHED_FLUSHING =>FINISHED_BUFFER,
402
        OVERFLOW_DETECTED => OVERFLOW_DETECTED_DECODING,
403
        DATA_OUT_32 =>U_DATAOUT_REG,
404
        READY => U_DATA_VALID_REG,
405
  OVERFLOW_CONTROL => OVERFLOW_CONTROL,
406
        BUS_REQUEST =>BUS_REQUEST_U_AUX
407
);
408
 
409
 
410
 
411
ASSEMBLING_UNIT_1: ASSEMBLING_UNIT
412
port map (
413
        ENABLE => ENABLE_ASSEMBLE,
414
        DATA_IN_32 => U_DATAOUT_INT,
415
        CLEAR =>CLEAR,
416
        RESET => RESET,
417
        CLK =>CLK,
418
        MASK =>MASK_INT,
419
        WRITE =>WRITE_INT,
420
        DATA_OUT_32 => U_DATAOUT_BUFFER
421
);
422
 
423
 
424
ENABLE_ASSEMBLE <= U_DATA_VALID_INT;
425
 
426
 
427
level2_4_1 : level2_4d_pbc port map (CLK => CLK,
428
                                RESET => RESET,
429
                                CLEAR => CLEAR,
430
                                DECOMP => DECOMP_INT,
431
                                MOVE_ENABLE => MOVE_ENABLE,
432
                                DECODING_UNDERFLOW => UNDERFLOW_DETECTED_DECODING, -- to stop the decompression engine
433
                                FINISH => FINISHED_INT,
434
                                C_DATAIN => C_DATAIN_INT,
435
                                U_DATAOUT => U_DATAOUT_INT,
436
                                MASK => MASK_INT,
437
                                U_DATA_VALID => U_DATA_VALID_INT,
438
          OVERFLOW_CONTROL => OVERFLOW_CONTROL,
439
                                UNDERFLOW => UNDERFLOW_INT
440
        );
441
 
442
 
443
 
444
 
445
 
446
csm_1 : csm_d port map (
447
    START_C => START_C,
448
        START_D => START_D_INT,
449
        START_D_ENGINE => START_D_INT_BUFFERS,
450
        STOP => STOP_INT,
451
        END_OF_BLOCK => EO_BLOCK,
452
        CLK => CLK,
453
        CLEAR => CLEAR,
454
        DECOMP => DECOMP_INT,
455
        FINISH => FINISHED_INT,
456
        MOVE_ENABLE => MOVE_ENABLE,
457
        RESET => RESET
458
);
459
 
460
 
461
 
462
-- if decoding underflow active do not increment the counter
463
 
464
 
465
BSL_TC_1: BSL_TC_2_D port map (
466
      BLOCK_SIZE => LATCHED_BS,
467
      INC => WRITE_INT,
468
          CLEAR => CLEAR,
469
      RESET => RESET,
470
      CLK => CLK,
471
      EO_BLOCK => EO_BLOCK,
472
          FINISH_D_BUFFERS => FINISH_D_BUFFERS
473
);
474
 
475
 
476
REG_FILE_1 : REG_FILE_D
477
port map
478
(
479
        DIN => CONTROL_AUX,
480
        ADDRESS => ADDRESS,
481
                CRC_IN => CRC_CODE,
482
                LOAD_CRC => FINISHED_BUFFER,
483
            CLEAR_CR => CLEAR_COMMAND,    -- reset the comand register to avoid restart.
484
            RW => RW,
485
            ENABLE =>CS,
486
        CLEAR =>CLEAR,
487
        CLK =>CLK,
488
            DOUT => CONTROL,
489
        C_BS_OUT => C_BS_INT,
490
            U_BS_OUT => LATCHED_BS,
491
                CRC_OUT => CRC_OUT,
492
            START_D => START_D_INT,
493
            STOP => STOP_INT,
494
            THRESHOLD_LEVEL => THRESHOLD_LEVEL
495
);
496
 
497
 
498
 
499
 
500
C_BS_COUNTER_1 : C_BS_COUNTER_D
501
port map
502
(
503
        C_BS_IN => C_BS_INT,
504
        DECOMPRESS => START_D_INT,
505
        CLEAR_COUNTER => FINISHED_AUX,
506
        CLEAR => CLEAR,
507
        CLK => CLK,
508
        ENABLE_D => ENABLE_D_COUNT,
509
        ALL_C_DATA => ALL_C_DATA,
510
        C_BS_OUT => C_BS_OUT
511
);
512
 
513
 
514
 
515
DECODING_BUFFER : DECODING_BUFFER_32_64_2
516
port map
517
(
518
  FORCE_STOP => STOP_INT,
519
        START_D => START_D_INT,
520
        START_C => START_C,
521
        FINISHED_D => FINISH_D_BUFFERS,
522
    FINISHED_C => FINISHED_C,
523
        UNDERFLOW  => UNDERFLOW_INT,
524
        DATA_IN_32 => C_DATAIN,
525
        THRESHOLD_LEVEL => THRESHOLD_LEVEL_FIXED,
526
        BUS_ACKNOWLEDGE => BUS_ACKNOWLEDGE_AUX,
527
        C_DATA_VALID => C_DATA_VALID,
528
  WAITN => WAIT_C,
529
        CLEAR => CLEAR,
530
        CLK => CLK,
531
        DATA_OUT_64 => C_DATAIN_INT,
532
        UNDERFLOW_DETECTED => UNDERFLOW_DETECTED_DECODING,
533
        FINISH => FINISHED_BUFFER_DECODING,
534
        START_ENGINE => START_D_INT_BUFFERS,
535
  OVERFLOW_CONTROL => OVERFLOW_CONTROL_DECODING_BUFFER,
536
        BUS_REQUEST => BUS_REQUEST_DECODING
537
);
538
 
539
THRESHOLD_LEVEL_FIXED <= "0000000001";  -- buffer present in the ouput. Activate the input buffer inmediatly
540
 
541
-- careful I change this for the PCI implementation
542
-- U_DATAOUT <= To_X01Z(U_DATAOUT_AUX) when BUS_ACKNOWLEDGE_U = '0' and TEST_MODE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
543
U_DATAOUT <= To_X01Z(U_DATAOUT_AUX);
544
DECOMPRESSING <= DECOMP_INT;
545
BUS_REQUEST_C <= BUS_REQUEST_DECODING;
546
FINISHED_AUX <= DECOMP_INT or FINISHED_INT;
547
 
548
CLEAR_COMMAND <= DECOMP_INT or FINISHED_INT; -- clear the command register
549
U_DATA_VALID <= U_DATA_VALID_AUX when TEST_MODE = '0' else '1'; -- valid at zero
550
 
551
 
552
DECODING_OVERFLOW <= OVERFLOW_DETECTED_DECODING;
553
BUS_ACKNOWLEDGE_AUX  <= BUS_ACKNOWLEDGE_C or ALL_C_DATA;
554
CONTROL_AUX <= To_bitvector(CONTROL);
555
 
556
BUS_ACKNOWLEDGE_U_AUX <= BUS_ACKNOWLEDGE_U when TEST_MODE = '0' else '0'; -- always acknowledge in test mode 
557
 
558
 
559
ENABLE_D_COUNT <= BUS_ACKNOWLEDGE_C or BUS_REQUEST_DECODING; -- both at zero
560
 
561
BUS_REQUEST_U <= BUS_REQUEST_U_AUX when TEST_MODE = '0' else '1';   -- never request
562
THRESHOLD_LEVEL_AUX <= THRESHOLD_LEVEL when TEST_MODE = '0' else "00001000";
563
 
564
end level1_1;

powered by: WebSVN 2.1.0

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