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

Subversion Repositories cavlc

[/] [cavlc/] [trunk/] [rtl/] [cavlc_read_total_zeros.v] - Blame information for rev 6

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

Line No. Rev Author Line
1 6 qiubin
//2011-8-14 initial version
2
 
3
`include "defines.v"
4
 
5
module cavlc_read_total_zeros(
6
        ena,
7
        sel,
8
        chroma_DC_sel,
9
        rbsp,
10
        TotalCoeff,
11
        TotalZeros_comb,
12
        len_comb
13
);
14
//------------------------
15
//ports
16
//------------------------
17
input   ena;
18
input   sel;
19
input   chroma_DC_sel;
20
input   [0:8]    rbsp;
21
input   [3:0]    TotalCoeff;
22
 
23
output  [3:0]    TotalZeros_comb;
24
output  [3:0]    len_comb;
25
 
26
//-------------------------
27
//rregs
28
//-------------------------
29
reg             [3:0]    TotalZeros_comb;        //TotalZeros will be saved as ZeroLeft in module cavlc_read_run_befores 
30
reg             [3:0]    len_comb;
31
 
32
 
33
//for  chroma_DC
34
reg             [0:2]    rbsp_chroma_DC;
35
reg             [1:0]    TotalZeros_chroma_DC;
36
reg             [1:0]    len_chroma_DC;
37
 
38
//for TotalCoeff <= 3
39
reg             [0:8]    rbsp_LE3;
40
reg             [3:0]    TotalZeros_LE3;
41
reg             [3:0]    len_LE3;
42
 
43
//for TotalCoeff > 3
44
reg             [0:5]    rbsp_G3;
45
reg             [3:0]    TotalZeros_G3;
46
reg             [2:0]    len_G3;
47
 
48
 
49
//----------------------------------------
50
//input mux
51
//----------------------------------------
52
always @(*)
53
if (ena && sel && chroma_DC_sel) begin
54
        rbsp_chroma_DC  <= rbsp[0:2];
55
        rbsp_LE3                <= 'hffff;
56
        rbsp_G3                 <= 'hffff;
57
end
58
else if (ena && sel && TotalCoeff[3:2] == 2'b00) begin
59
        rbsp_chroma_DC  <= 'hffff;
60
        rbsp_LE3                <= rbsp[0:8];
61
        rbsp_G3                 <= 'hffff;
62
end
63
else if (ena && sel)begin
64
        rbsp_chroma_DC  <= 'hffff;
65
        rbsp_LE3                <= 'hffff;
66
        rbsp_G3                 <= rbsp[0:5];
67
end
68
else begin
69
        rbsp_chroma_DC  <= 'hffff;
70
        rbsp_LE3                <= 'hffff;
71
        rbsp_G3                 <= 'hffff;
72
end
73
 
74
//----------------------------------------
75
//TotalZeros_chroma_DC & len_chroma_DC
76
//----------------------------------------
77
always @(*)
78
if ( TotalCoeff == 1 && rbsp_chroma_DC[0] ) begin
79
        TotalZeros_chroma_DC    <= 0;
80
        len_chroma_DC                   <= 1;
81
end
82
else if ( TotalCoeff == 1 && rbsp_chroma_DC[1] ) begin
83
        TotalZeros_chroma_DC    <= 1;
84
        len_chroma_DC                   <= 2;
85
end
86
else if ( TotalCoeff == 1 && rbsp_chroma_DC[2] ) begin
87
        TotalZeros_chroma_DC    <= 2;
88
        len_chroma_DC                   <= 3;
89
end
90
else if ( TotalCoeff == 1 ) begin
91
        TotalZeros_chroma_DC    <= 3;
92
        len_chroma_DC                   <= 3;
93
end
94
else if ( TotalCoeff == 2 && rbsp_chroma_DC[0] ) begin
95
        TotalZeros_chroma_DC    <= 0;
96
        len_chroma_DC                   <= 1;
97
end
98
else if ( TotalCoeff == 2 && rbsp_chroma_DC[1] ) begin
99
        TotalZeros_chroma_DC    <= 1;
100
        len_chroma_DC                   <= 2;
101
end
102
else if ( TotalCoeff == 2 ) begin
103
        TotalZeros_chroma_DC    <= 2;
104
        len_chroma_DC                   <= 2;
105
end
106
else if ( rbsp_chroma_DC[0] ) begin
107
        TotalZeros_chroma_DC    <= 0;
108
        len_chroma_DC                   <= 1;
109
end
110
else begin
111
        TotalZeros_chroma_DC    <= 1;
112
        len_chroma_DC                   <= 1;
113
end
114
 
115
 
116
//---------------------------------
117
//TotalZeros_LE3 & len_LE3
118
//---------------------------------
119
always @(rbsp_LE3 or TotalCoeff)
120
case (TotalCoeff[1:0])
121
1 :begin
122
        case(1'b1)
123
        rbsp_LE3[0] : begin
124
                TotalZeros_LE3  <= 0;
125
                len_LE3                 <= 1;
126
        end
127
        rbsp_LE3[1] : begin
128
                len_LE3                 <= 3;
129
                if (rbsp_LE3[2])
130
                        TotalZeros_LE3  <= 1;
131
                else
132
                        TotalZeros_LE3  <= 2;
133
        end
134
        rbsp_LE3[2] : begin
135
                len_LE3                 <= 4;
136
                if (rbsp_LE3[3])
137
                        TotalZeros_LE3  <= 3;
138
                else
139
                        TotalZeros_LE3  <= 4;
140
        end
141
        rbsp_LE3[3] : begin
142
                len_LE3                 <= 5;
143
                if (rbsp_LE3[4])
144
                        TotalZeros_LE3  <= 5;
145
                else
146
                        TotalZeros_LE3  <= 6;
147
        end
148
        rbsp_LE3[4] : begin
149
                len_LE3                 <= 6;
150
                if (rbsp_LE3[5])
151
                        TotalZeros_LE3  <= 7;
152
                else
153
                        TotalZeros_LE3  <= 8;
154
        end
155
        rbsp_LE3[5] : begin
156
                len_LE3                 <= 7;
157
                if (rbsp_LE3[6])
158
                        TotalZeros_LE3  <= 9;
159
                else
160
                        TotalZeros_LE3  <= 10;
161
        end
162
        rbsp_LE3[6] : begin
163
                len_LE3                 <= 8;
164
                if (rbsp_LE3[7])
165
                        TotalZeros_LE3  <= 11;
166
                else
167
                        TotalZeros_LE3  <= 12;
168
        end
169
        rbsp_LE3[7] : begin
170
                len_LE3                 <= 9;
171
                if (rbsp_LE3[8])
172
                        TotalZeros_LE3  <= 13;
173
                else
174
                        TotalZeros_LE3  <= 14;
175
        end
176
        default : begin
177
                len_LE3                 <= 9;
178
                TotalZeros_LE3  <= 15;
179
        end
180
        endcase
181
end
182
2 : begin
183
        case(1'b1)
184
        rbsp_LE3[0] : begin
185
                len_LE3 <= 3;
186
                case(rbsp_LE3[1:2])
187
                'b11 :  TotalZeros_LE3  <= 0;
188
                'b10 :  TotalZeros_LE3  <= 1;
189
                'b01 :  TotalZeros_LE3  <= 2;
190
                'b00 :  TotalZeros_LE3  <= 3;
191
                endcase
192
        end
193
        rbsp_LE3[1] : begin
194
                if (rbsp_LE3[2]) begin
195
                        TotalZeros_LE3  <= 4;
196
                        len_LE3                 <= 3;
197
                end
198
                else begin
199
                        len_LE3                 <= 4;
200
                        if (rbsp_LE3[3])
201
                                TotalZeros_LE3  <= 5;
202
                        else
203
                                TotalZeros_LE3  <= 6;
204
                end
205
        end
206
        rbsp_LE3[2] : begin
207
                len_LE3                 <= 4;
208
                if (rbsp_LE3[3])
209
                        TotalZeros_LE3  <= 7;
210
                else
211
                        TotalZeros_LE3  <= 8;
212
        end
213
        rbsp_LE3[3] : begin
214
                len_LE3                 <= 5;
215
                if (rbsp_LE3[4])
216
                        TotalZeros_LE3  <= 9;
217
                else
218
                        TotalZeros_LE3  <= 10;
219
        end
220
        default : begin
221
                len_LE3 <= 6;
222
                case(rbsp_LE3[4:5])
223
                'b11 :  TotalZeros_LE3  <= 11;
224
                'b10 :  TotalZeros_LE3  <= 12;
225
                'b01 :  TotalZeros_LE3  <= 13;
226
                'b00 :  TotalZeros_LE3  <= 14;
227
                endcase
228
        end
229
        endcase
230
end
231
3 : begin
232
        case(1'b1)
233
        rbsp_LE3[0] : begin
234
                len_LE3 <= 3;
235
                case(rbsp_LE3[1:2])
236
                'b11 :  TotalZeros_LE3  <= 1;
237
                'b10 :  TotalZeros_LE3  <= 2;
238
                'b01 :  TotalZeros_LE3  <= 3;
239
                'b00 :  TotalZeros_LE3  <= 6;
240
                endcase
241
        end
242
        rbsp_LE3[1] : begin
243
                if (rbsp_LE3[2]) begin
244
                        TotalZeros_LE3  <= 7;
245
                        len_LE3                 <= 3;
246
                end
247
                else begin
248
                        len_LE3                 <= 4;
249
                        if (rbsp_LE3[3])
250
                                TotalZeros_LE3  <= 0;
251
                        else
252
                                TotalZeros_LE3  <= 4;
253
                end
254
        end
255
        rbsp_LE3[2] : begin
256
                len_LE3                 <= 4;
257
                if (rbsp_LE3[3])
258
                        TotalZeros_LE3  <= 5;
259
                else
260
                        TotalZeros_LE3  <= 8;
261
        end
262
        rbsp_LE3[3] : begin
263
                len_LE3                 <= 5;
264
                if (rbsp_LE3[4])
265
                        TotalZeros_LE3  <= 9;
266
                else
267
                        TotalZeros_LE3  <= 10;
268
        end
269
        rbsp_LE3[4] : begin
270
                len_LE3                 <= 5;
271
                TotalZeros_LE3  <= 12;
272
        end
273
        default : begin
274
                len_LE3 <= 6;
275
                if(rbsp_LE3[5])
276
                        TotalZeros_LE3  <= 11;
277
                else
278
                        TotalZeros_LE3  <= 13;
279
        end
280
        endcase
281
end
282
default : begin
283
        len_LE3                 <= 'bx;
284
        TotalZeros_LE3  <= 'bx;
285
end
286
endcase
287
 
288
//---------------------------------
289
//TotalZeros_G3 & len_G3
290
//---------------------------------
291
always @(rbsp_G3 or TotalCoeff)
292
case (TotalCoeff)
293
4 : begin
294
        case(1'b1)
295
        rbsp_G3[0] : begin
296
                len_G3  <= 3;
297
                case(rbsp_G3[1:2])
298
                'b11 :  TotalZeros_G3   <= 1;
299
                'b10 :  TotalZeros_G3   <= 4;
300
                'b01 :  TotalZeros_G3   <= 5;
301
                'b00 :  TotalZeros_G3   <= 6;
302
                endcase
303
        end
304
        rbsp_G3[1] : begin
305
                if (rbsp_G3[2]) begin
306
                        TotalZeros_G3   <= 8;
307
                        len_G3                  <= 3;
308
                end
309
                else begin
310
                        len_G3                  <= 4;
311
                        if (rbsp_G3[3])
312
                                TotalZeros_G3   <= 2;
313
                        else
314
                                TotalZeros_G3   <= 3;
315
                end
316
        end
317
        rbsp_G3[2] : begin
318
                len_G3                  <= 4;
319
                if (rbsp_G3[3])
320
                        TotalZeros_G3   <= 7;
321
                else
322
                        TotalZeros_G3   <= 9;
323
        end
324
        default : begin
325
                len_G3  <= 5;
326
                case(rbsp_G3[3:4])
327
                'b11 :  TotalZeros_G3   <= 0;
328
                'b10 :  TotalZeros_G3   <= 10;
329
                'b01 :  TotalZeros_G3   <= 11;
330
                'b00 :  TotalZeros_G3   <= 12;
331
                endcase
332
        end
333
        endcase
334
end
335
5 :begin
336
        case(1'b1)
337
        rbsp_G3[0] : begin
338
                len_G3  <= 3;
339
                case(rbsp_G3[1:2])
340
                'b11 :  TotalZeros_G3   <= 3;
341
                'b10 :  TotalZeros_G3   <= 4;
342
                'b01 :  TotalZeros_G3   <= 5;
343
                'b00 :  TotalZeros_G3   <= 6;
344
                endcase
345
        end
346
        rbsp_G3[1] : begin
347
                if (rbsp_G3[2]) begin
348
                        TotalZeros_G3   <= 7;
349
                        len_G3                  <= 3;
350
                end
351
                else begin
352
                        len_G3                  <= 4;
353
                        if (rbsp_G3[3])
354
                                TotalZeros_G3   <= 0;
355
                        else
356
                                TotalZeros_G3   <= 1;
357
                end
358
        end
359
        rbsp_G3[2] : begin
360
                len_G3                  <= 4;
361
                if (rbsp_G3[3])
362
                        TotalZeros_G3   <= 2;
363
                else
364
                        TotalZeros_G3   <= 8;
365
        end
366
        rbsp_G3[3] : begin
367
                len_G3                  <= 4;
368
                TotalZeros_G3   <= 10;
369
        end
370
        default : begin
371
                len_G3  <= 5;
372
                if (rbsp_G3[4])
373
                        TotalZeros_G3   <= 9;
374
                else
375
                        TotalZeros_G3   <= 11;
376
        end
377
        endcase
378
end
379
6 : begin
380
        case(1'b1)
381
        rbsp_G3[0] : begin
382
                len_G3  <= 3;
383
                case(rbsp_G3[1:2])
384
                'b11 :  TotalZeros_G3   <= 2;
385
                'b10 :  TotalZeros_G3   <= 3;
386
                'b01 :  TotalZeros_G3   <= 4;
387
                'b00 :  TotalZeros_G3   <= 5;
388
                endcase
389
        end
390
        rbsp_G3[1] : begin
391
                len_G3                  <= 3;
392
                if (rbsp_G3[2])
393
                        TotalZeros_G3   <= 6;
394
                else
395
                        TotalZeros_G3   <= 7;
396
        end
397
        rbsp_G3[2] : begin
398
                len_G3                  <= 3;
399
                TotalZeros_G3   <= 9;
400
        end
401
        rbsp_G3[3] : begin
402
                len_G3                  <= 4;
403
                TotalZeros_G3   <= 8;
404
        end
405
        rbsp_G3[4] : begin
406
                len_G3                  <= 5;
407
                TotalZeros_G3   <= 1;
408
        end
409
        default : begin
410
                len_G3  <= 6;
411
                if (rbsp_G3[5])
412
                        TotalZeros_G3   <= 0;
413
                else
414
                        TotalZeros_G3   <= 10;
415
        end
416
        endcase
417
end
418
7 :begin
419
        case(1'b1)
420
        rbsp_G3[0] : begin
421
                if (rbsp_G3[1]) begin
422
                        TotalZeros_G3   <= 5;
423
                        len_G3                  <= 2;
424
                end
425
                else begin
426
                        len_G3                  <= 3;
427
                        if (rbsp_G3[2])
428
                                TotalZeros_G3   <= 2;
429
                        else
430
                                TotalZeros_G3   <= 3;
431
                end
432
        end
433
        rbsp_G3[1] : begin
434
                len_G3  <= 3;
435
                if (rbsp_G3[2])
436
                        TotalZeros_G3   <= 4;
437
                else
438
                        TotalZeros_G3   <= 6;
439
        end
440
        rbsp_G3[2] : begin
441
                len_G3                  <= 3;
442
                TotalZeros_G3   <= 8;
443
        end
444
        rbsp_G3[3] : begin
445
                len_G3                  <= 4;
446
                TotalZeros_G3   <= 7;
447
        end
448
        rbsp_G3[4] : begin
449
                len_G3                  <= 5;
450
                TotalZeros_G3   <= 1;
451
        end
452
        default : begin
453
                len_G3                  <= 6;
454
                if (rbsp_G3[5])
455
                        TotalZeros_G3   <= 0;
456
                else
457
                        TotalZeros_G3   <= 9;
458
        end
459
        endcase
460
end
461
8 :begin
462
        case(1'b1)
463
        rbsp_G3[0] : begin
464
                len_G3                  <= 2;
465
                if (rbsp_G3[1])
466
                        TotalZeros_G3   <= 4;
467
                else
468
                        TotalZeros_G3   <= 5;
469
        end
470
        rbsp_G3[1] : begin
471
                len_G3                  <= 3;
472
                if (rbsp_G3[2])
473
                        TotalZeros_G3   <= 3;
474
                else
475
                        TotalZeros_G3   <= 6;
476
        end
477
        rbsp_G3[2] : begin
478
                len_G3                  <= 3;
479
                TotalZeros_G3   <= 7;
480
        end
481
        rbsp_G3[3] : begin
482
                len_G3                  <= 4;
483
                TotalZeros_G3   <= 1;
484
        end
485
        rbsp_G3[4] : begin
486
                len_G3                  <= 5;
487
                TotalZeros_G3   <= 2;
488
        end
489
        default : begin
490
                len_G3                  <= 6;
491
                if (rbsp_G3[5])
492
                        TotalZeros_G3   <= 0;
493
                else
494
                        TotalZeros_G3   <= 8;
495
        end
496
        endcase
497
end
498
9 : begin
499
        case(1'b1)
500
        rbsp_G3[0] : begin
501
                len_G3                  <= 2;
502
                if (rbsp_G3[1])
503
                        TotalZeros_G3   <= 3;
504
                else
505
                        TotalZeros_G3   <= 4;
506
        end
507
        rbsp_G3[1] : begin
508
                len_G3                  <= 2;
509
                TotalZeros_G3   <= 6;
510
        end
511
        rbsp_G3[2] : begin
512
                len_G3                  <= 3;
513
                TotalZeros_G3   <= 5;
514
        end
515
        rbsp_G3[3] : begin
516
                len_G3                  <= 4;
517
                TotalZeros_G3   <= 2;
518
        end
519
        rbsp_G3[4] : begin
520
                len_G3                  <= 5;
521
                TotalZeros_G3   <= 7;
522
        end
523
        default : begin
524
                len_G3                  <= 6;
525
                if (rbsp_G3[5])
526
                        TotalZeros_G3   <= 0;
527
                else
528
                        TotalZeros_G3   <= 1;
529
        end
530
        endcase
531
end
532
10 : begin
533
        case(1'b1)
534
        rbsp_G3[0] : begin
535
                len_G3                  <= 2;
536
                if (rbsp_G3[1])
537
                        TotalZeros_G3   <= 3;
538
                else
539
                        TotalZeros_G3   <= 4;
540
        end
541
        rbsp_G3[1] : begin
542
                len_G3                  <= 2;
543
                TotalZeros_G3   <= 5;
544
        end
545
        rbsp_G3[2] : begin
546
                len_G3                  <= 3;
547
                TotalZeros_G3   <= 2;
548
        end
549
        rbsp_G3[3] : begin
550
                len_G3                  <= 4;
551
                TotalZeros_G3   <= 6;
552
        end
553
        default : begin
554
                len_G3                  <= 5;
555
                if (rbsp_G3[4])
556
                        TotalZeros_G3   <= 0;
557
                else
558
                        TotalZeros_G3   <= 1;
559
        end
560
        endcase
561
end
562
11 : begin
563
        case(1'b1)
564
        rbsp_G3[0] : begin
565
                len_G3                  <= 1;
566
                TotalZeros_G3   <= 4;
567
        end
568
        rbsp_G3[1] : begin
569
                len_G3                  <= 3;
570
                if (rbsp_G3[2])
571
                        TotalZeros_G3   <= 5;
572
                else
573
                        TotalZeros_G3   <= 3;
574
        end
575
        rbsp_G3[2] : begin
576
                len_G3                  <= 3;
577
                TotalZeros_G3   <= 2;
578
        end
579
        default : begin
580
                len_G3                  <= 4;
581
                if (rbsp_G3[3])
582
                        TotalZeros_G3   <= 1;
583
                else
584
                        TotalZeros_G3   <= 0;
585
        end
586
        endcase
587
end
588
12 : begin
589
        case(1'b1)
590
        rbsp_G3[0] : begin
591
                len_G3                  <= 1;
592
                TotalZeros_G3   <= 3;
593
        end
594
        rbsp_G3[1] : begin
595
                len_G3                  <= 2;
596
                TotalZeros_G3   <= 2;
597
        end
598
        rbsp_G3[2] : begin
599
                len_G3                  <= 3;
600
                TotalZeros_G3   <= 4;
601
        end
602
        default : begin
603
                len_G3                  <= 4;
604
                if (rbsp_G3[3])
605
                        TotalZeros_G3   <= 1;
606
                else
607
                        TotalZeros_G3   <= 0;
608
        end
609
        endcase
610
end
611
13      :begin
612
        if (rbsp_G3[0]) begin
613
                TotalZeros_G3   <= 2;
614
                len_G3                  <= 1;
615
        end
616
        else if (rbsp_G3[1]) begin
617
                TotalZeros_G3   <= 3;
618
                len_G3                  <= 2;
619
        end
620
        else if (rbsp_G3[2]) begin
621
                TotalZeros_G3   <= 1;
622
                len_G3                  <= 3;
623
        end
624
        else begin
625
                TotalZeros_G3   <= 0;
626
                len_G3                  <= 3;
627
        end
628
end
629
14      : begin
630
        if (rbsp_G3[0]) begin
631
                TotalZeros_G3   <= 2;
632
                len_G3                  <= 1;
633
        end
634
        else if (rbsp_G3[1]) begin
635
                TotalZeros_G3   <= 1;
636
                len_G3                  <= 2;
637
        end
638
        else begin
639
                TotalZeros_G3   <= 0;
640
                len_G3                  <= 2;
641
        end
642
end
643
15      : begin
644
        len_G3  <= 1;
645
        if (rbsp_G3[0])
646
                TotalZeros_G3   <= 1;
647
        else
648
                TotalZeros_G3   <= 0;
649
end
650
default : begin
651
        len_G3                  <= 'bx;
652
        TotalZeros_G3   <= 'bx;
653
end
654
endcase
655
 
656
//---------------------------------
657
//TotalZeros_comb & len_comb
658
//---------------------------------
659
always @(*)
660
if (ena && sel && chroma_DC_sel) begin
661
        TotalZeros_comb         <= TotalZeros_chroma_DC;
662
        len_comb                        <= len_chroma_DC;
663
end
664
else if (ena && sel && TotalCoeff[3:2] == 2'b00) begin
665
        TotalZeros_comb         <= TotalZeros_LE3;
666
        len_comb                        <= len_LE3;
667
end
668
else if (ena && sel)begin
669
        TotalZeros_comb         <= TotalZeros_G3;
670
        len_comb                        <= len_G3;
671
end
672
else begin
673
        TotalZeros_comb         <= 0;
674
        len_comb                        <= 0;
675
end
676
 
677
 
678
endmodule

powered by: WebSVN 2.1.0

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