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

Subversion Repositories cavlc

[/] [cavlc/] [trunk/] [rtl/] [cavlc_read_total_coeffs.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-7      initial creation
2
//2011-8-9      optimize output mux
3
//2011-9-10     reduce nC to 5 bits
4
 
5
 
6
`include "defines.v"
7
 
8
module cavlc_read_total_coeffs(
9
        clk, rst_n,
10
        ena,
11
 
12
        start,
13
        sel,
14
        rbsp, nC,
15
 
16
        TrailingOnes, TotalCoeff,
17
        TrailingOnes_comb, TotalCoeff_comb,
18
        len_comb
19
);
20
//------------------------
21
//ports
22
//------------------------
23
input   clk, rst_n;
24
input   ena;
25
 
26
input   start;
27
input   sel;
28
 
29
 
30
input   [0:15]   rbsp;
31
input   signed  [4:0]    nC;
32
 
33
output  [4:0]    TotalCoeff;             //range from 0 to 16
34
output  [1:0]    TrailingOnes;   //range from 0 to 3   
35
output  [4:0]    TotalCoeff_comb;                //unsaved result of TotalCoeff_comb
36
output  [1:0]    TrailingOnes_comb;      //unsaved result of TrailingOnes_comb
37
output  [4:0]    len_comb;                               //indicate how many rbsp bit consumed, range from 0 to 16
38
 
39
 
40
//------------------------
41
//regs
42
//------------------------
43
reg             [4:0]    TotalCoeff_comb;
44
reg             [1:0]    TrailingOnes_comb;
45
reg             [4:0]    len_comb;
46
 
47
//for nC >= 0 && nC < 2
48
reg             [4:0]    TotalCoeff_1;
49
reg             [1:0]    TrailingOnes_1;
50
reg             [4:0]    len_1;
51
 
52
//for nC >= 2 && nC < 4
53
reg             [4:0]    TotalCoeff_2;
54
reg             [1:0]    TrailingOnes_2;
55
reg             [4:0]    len_2;
56
 
57
//for nC >= 4 && nC < 8
58
reg             [4:0]    TotalCoeff_3;
59
reg             [1:0]    TrailingOnes_3;
60
reg             [4:0]    len_3;
61
 
62
//for nC >= 8
63
reg             [4:0]    TotalCoeff_4;
64
reg             [1:0]    TrailingOnes_4;
65
reg             [4:0]    len_4;
66
 
67
//for nC == -1
68
reg             [4:0]    TotalCoeff_5;
69
reg             [1:0]    TrailingOnes_5;
70
reg             [4:0]    len_5;
71
 
72
 
73
//------------------------
74
//FFs
75
//------------------------
76
//len is not necessary to be saved
77
//TotalCoeff & TrailingOnes should be valid when cavlc_state == `cavlc_read_total_coeffs_s
78
//to do that,combinational result "TotalCoeff_comb & TrailingOnes_comb" are outputed
79
reg             [0:15]   rbsp_1;
80
reg             [0:13]   rbsp_2;
81
reg             [0:9]    rbsp_3;
82
reg             [0:5]    rbsp_4;
83
reg             [0:7]    rbsp_5;
84
 
85
reg             [4:0]    TotalCoeff;
86
reg             [1:0]    TrailingOnes;
87
 
88
//------------------------
89
//input mux
90
//------------------------
91
wire rbsp_refresh =  ena && start;
92
 
93
always @(posedge clk or negedge rst_n)
94
if (!rst_n)
95
begin
96
                rbsp_1 <=  0;
97
                rbsp_2 <=  0;
98
                rbsp_3 <=  0;
99
                rbsp_4 <=  0;
100
                rbsp_5 <=  0;
101
 
102
end
103
else if (rbsp_refresh)
104
begin
105
        if (nC[4])
106
                rbsp_5 <=  rbsp[0:7];
107
        else if (nC[3])
108
                rbsp_4 <= rbsp[0:5];
109
        else if (nC[2])
110
                rbsp_3 <= rbsp[0:9];
111
        else if (nC[1])
112
                rbsp_2 <= rbsp[0:13];
113
        else
114
                rbsp_1 <= rbsp;
115
end
116
//------------------------
117
//nC >= 0 && nC < 2                                 
118
//------------------------
119
always @(rbsp_1)
120
case (1'b1)
121
rbsp_1[0] : begin
122
        TrailingOnes_1  <= 0;
123
        TotalCoeff_1    <= 0;
124
        len_1                   <= 1;
125
end
126
rbsp_1[1] : begin
127
        TrailingOnes_1  <= 1;
128
        TotalCoeff_1    <= 1;
129
        len_1                   <= 2;
130
end
131
rbsp_1[2] : begin
132
        TrailingOnes_1  <= 2;
133
        TotalCoeff_1    <= 2;
134
        len_1                   <= 3;
135
end
136
rbsp_1[3] : begin
137
        if (rbsp_1[4] == 'b1) begin
138
                TrailingOnes_1  <= 3;
139
                TotalCoeff_1    <= 3;
140
                len_1                   <= 5;
141
        end
142
        else if (rbsp_1[5] == 'b1) begin
143
                TrailingOnes_1  <= 0;
144
                TotalCoeff_1    <= 1;
145
                len_1                   <= 6;
146
        end
147
        else begin
148
                TrailingOnes_1  <= 1;
149
                TotalCoeff_1    <= 2;
150
                len_1                   <= 6;
151
        end
152
end
153
rbsp_1[4] : begin
154
        if (rbsp_1[5] == 'b1) begin
155
                TrailingOnes_1  <= 3;
156
                TotalCoeff_1    <= 4;
157
                len_1                   <= 6;
158
        end
159
        else if (rbsp_1[6] == 'b1) begin
160
                TrailingOnes_1  <= 2;
161
                TotalCoeff_1    <= 3;
162
                len_1                   <= 7;
163
        end
164
        else begin
165
                TrailingOnes_1  <= 3;
166
                TotalCoeff_1    <= 5;
167
                len_1                   <= 7;
168
        end
169
end
170
rbsp_1[5] : begin
171
        len_1                   <= 8;
172
        if (rbsp_1[6:7] == 'b11) begin
173
                TrailingOnes_1  <= 0;
174
                TotalCoeff_1    <= 2;
175
        end
176
        else if (rbsp_1[6:7] == 'b10) begin
177
                TrailingOnes_1  <= 1;
178
                TotalCoeff_1    <= 3;
179
        end
180
        else if (rbsp_1[6:7] == 'b01) begin
181
                TrailingOnes_1  <= 2;
182
                TotalCoeff_1    <= 4;
183
        end
184
        else begin
185
                TrailingOnes_1  <= 3;
186
                TotalCoeff_1    <= 6;
187
        end
188
end
189
rbsp_1[6] : begin
190
        len_1                   <= 9;
191
        if (rbsp_1[7:8] == 2'b11) begin
192
                TrailingOnes_1  <= 0;
193
                TotalCoeff_1    <= 3;
194
        end
195
        else if (rbsp_1[7:8] == 2'b10) begin
196
                TrailingOnes_1  <= 1;
197
                TotalCoeff_1    <= 4;
198
        end
199
        else if (rbsp_1[7:8] == 2'b01) begin
200
                TrailingOnes_1  <= 2;
201
                TotalCoeff_1    <= 5;
202
        end
203
        else  begin
204
                TrailingOnes_1  <= 3;
205
                TotalCoeff_1    <= 7;
206
        end
207
end
208
rbsp_1[7] : begin
209
        len_1                   <= 10;
210
        if (rbsp_1[8:9] == 2'b11) begin
211
                TrailingOnes_1  <= 0;
212
                TotalCoeff_1    <= 4;
213
        end
214
        else if (rbsp_1[8:9] == 2'b10) begin
215
                TrailingOnes_1  <= 1;
216
                TotalCoeff_1    <= 5;
217
        end
218
        else if (rbsp_1[8:9] == 2'b01) begin
219
                TrailingOnes_1  <= 2;
220
                TotalCoeff_1    <= 6;
221
        end
222
        else begin
223
                TrailingOnes_1  <= 3;
224
                TotalCoeff_1    <= 8;
225
        end
226
end
227
rbsp_1[8] : begin
228
        len_1                   <= 11;
229
        if (rbsp_1[9:10] == 2'b11) begin
230
                TrailingOnes_1  <= 0;
231
                TotalCoeff_1    <= 5;
232
        end
233
        else if (rbsp_1[9:10] == 2'b10) begin
234
                TrailingOnes_1  <= 1;
235
                TotalCoeff_1    <= 6;
236
        end
237
        else if (rbsp_1[9:10] == 2'b01) begin
238
                TrailingOnes_1  <= 2;
239
                TotalCoeff_1    <= 7;
240
        end
241
        else begin
242
                TrailingOnes_1  <= 3;
243
                TotalCoeff_1    <= 9;
244
        end
245
end
246
rbsp_1[9] : begin
247
        len_1                   <= 13;
248
        if (rbsp_1[10:12] == 3'b111) begin
249
                TrailingOnes_1  <= 0;
250
                TotalCoeff_1    <= 6;
251
        end
252
        else if (rbsp_1[10:12] == 3'b011) begin
253
                TrailingOnes_1  <= 0;
254
                TotalCoeff_1    <= 7;
255
        end
256
        else if (rbsp_1[10:12] == 3'b110) begin
257
                TrailingOnes_1  <= 1;
258
                TotalCoeff_1    <= 7;
259
        end
260
        else if (rbsp_1[10:12] == 3'b000) begin
261
                TrailingOnes_1  <= 0;
262
                TotalCoeff_1    <= 8;
263
        end
264
        else if (rbsp_1[10:12] == 3'b010) begin
265
                TrailingOnes_1  <= 1;
266
                TotalCoeff_1    <= 8;
267
        end
268
        else if (rbsp_1[10:12] == 3'b101) begin
269
                TrailingOnes_1  <= 2;
270
                TotalCoeff_1    <= 8;
271
        end
272
        else if (rbsp_1[10:12] == 3'b001) begin
273
                TrailingOnes_1  <= 2;
274
                TotalCoeff_1    <= 9;
275
        end
276
        else begin
277
                TrailingOnes_1  <= 3;
278
                TotalCoeff_1    <= 10;
279
        end
280
end
281
rbsp_1[10] : begin
282
        len_1                   <= 14;
283
        if (rbsp_1[11:13] == 3'b111) begin
284
                TrailingOnes_1  <= 0;
285
                TotalCoeff_1    <= 9;
286
        end
287
        else if (rbsp_1[11:13] == 3'b110) begin
288
                TrailingOnes_1  <= 1;
289
                TotalCoeff_1    <= 9;
290
        end
291
        else if (rbsp_1[11:13] == 3'b011) begin
292
                TrailingOnes_1  <= 0;
293
                TotalCoeff_1    <= 10;
294
        end
295
        else if (rbsp_1[11:13] == 3'b010) begin
296
                TrailingOnes_1  <= 1;
297
                TotalCoeff_1    <= 10;
298
        end
299
        else if (rbsp_1[11:13] == 3'b101) begin
300
                TrailingOnes_1  <= 2;
301
                TotalCoeff_1    <= 10;
302
        end
303
        else if (rbsp_1[11:13] == 3'b001) begin
304
                TrailingOnes_1  <= 2;
305
                TotalCoeff_1    <= 11;
306
        end
307
        else if (rbsp_1[11:13] == 3'b100) begin
308
                TrailingOnes_1  <= 3;
309
                TotalCoeff_1    <= 11;
310
        end
311
        else begin
312
                TrailingOnes_1  <= 3;
313
                TotalCoeff_1    <= 12;
314
        end
315
end
316
rbsp_1[11] : begin
317
        len_1                   <= 15;
318
        if (rbsp_1[12:14] == 3'b111) begin
319
                TrailingOnes_1  <= 0;
320
                TotalCoeff_1    <= 11;
321
        end
322
        else if (rbsp_1[12:14] == 3'b110) begin
323
                TrailingOnes_1  <= 1;
324
                TotalCoeff_1    <= 11;
325
        end
326
        else if (rbsp_1[12:14] == 3'b011) begin
327
                TrailingOnes_1  <= 0;
328
                TotalCoeff_1    <= 12;
329
        end
330
        else if (rbsp_1[12:14] == 3'b010) begin
331
                TrailingOnes_1  <= 1;
332
                TotalCoeff_1    <= 12;
333
        end
334
        else if (rbsp_1[12:14] == 3'b101) begin
335
                TrailingOnes_1  <= 2;
336
                TotalCoeff_1    <= 12;
337
        end
338
        else if (rbsp_1[12:14] == 3'b001) begin
339
                TrailingOnes_1  <= 2;
340
                TotalCoeff_1    <= 13;
341
        end
342
        else if (rbsp_1[12:14] == 3'b100) begin
343
                TrailingOnes_1  <= 3;
344
                TotalCoeff_1    <= 13;
345
        end
346
        else begin
347
                TrailingOnes_1  <= 3;
348
                TotalCoeff_1    <= 14;
349
        end
350
end
351
rbsp_1[12] : begin
352
        len_1                   <= 16;
353
        if (rbsp_1[13:15] == 3'b111) begin
354
                TrailingOnes_1  <= 0;
355
                TotalCoeff_1    <= 13;
356
        end
357
        else if (rbsp_1[13:15] == 3'b011) begin
358
                TrailingOnes_1  <= 0;
359
                TotalCoeff_1    <= 14;
360
        end
361
        else if (rbsp_1[13:15] == 3'b110) begin
362
                TrailingOnes_1  <= 1;
363
                TotalCoeff_1    <= 14;
364
        end
365
        else if (rbsp_1[13:15] == 3'b101) begin
366
                TrailingOnes_1  <= 2;
367
                TotalCoeff_1    <= 14;
368
        end
369
        else if (rbsp_1[13:15] == 3'b010) begin
370
                TrailingOnes_1  <= 1;
371
                TotalCoeff_1    <= 15;
372
        end
373
        else if (rbsp_1[13:15] == 3'b001) begin
374
                TrailingOnes_1  <= 2;
375
                TotalCoeff_1    <= 15;
376
        end
377
        else if (rbsp_1[13:15] == 3'b100) begin
378
                TrailingOnes_1  <= 3;
379
                TotalCoeff_1    <= 15;
380
        end
381
        else begin
382
                TrailingOnes_1  <= 3;
383
                TotalCoeff_1    <= 16;
384
        end
385
end
386
rbsp_1[13] : begin
387
        len_1                   <= 16;
388
        if (rbsp_1[14:15] == 2'b11) begin
389
                TrailingOnes_1  <= 0;
390
                TotalCoeff_1    <= 15;
391
        end
392
        else if (rbsp_1[14:15] == 2'b00) begin
393
                TrailingOnes_1  <= 0;
394
                TotalCoeff_1    <= 16;
395
        end
396
        else if (rbsp_1[14:15] == 2'b10) begin
397
                TrailingOnes_1  <= 1;
398
                TotalCoeff_1    <= 16;
399
        end
400
        else begin
401
                TrailingOnes_1  <= 2;
402
                TotalCoeff_1    <= 16;
403
        end
404
end
405
default : begin
406
        len_1                   <= 15;
407
        TrailingOnes_1  <= 1;
408
        TotalCoeff_1    <= 13;
409
end
410
endcase
411
 
412
//------------------------
413
//nC >= 2 && nC < 4
414
//------------------------
415
always @(rbsp_2)
416
case (1'b1)
417
rbsp_2[0] : begin
418
        len_2                   <= 2;
419
        if (rbsp_2[1] == 'b1) begin
420
                TrailingOnes_2  <= 0;
421
                TotalCoeff_2    <= 0;
422
        end
423
        else begin
424
                TrailingOnes_2  <= 1;
425
                TotalCoeff_2    <= 1;
426
        end
427
end
428
rbsp_2[1] : begin
429
        if (rbsp_2[2] == 'b1) begin
430
                TrailingOnes_2  <= 2;
431
                TotalCoeff_2    <= 2;
432
                len_2                   <= 3;
433
        end
434
        else if (rbsp_2[3] == 'b1) begin
435
                TrailingOnes_2  <= 3;
436
                TotalCoeff_2    <= 3;
437
                len_2                   <= 4;
438
        end
439
        else begin
440
                TrailingOnes_2  <= 3;
441
                TotalCoeff_2    <= 4;
442
                len_2                   <= 4;
443
        end
444
end
445
rbsp_2[2] : begin
446
        if (rbsp_2[3:4] == 'b11) begin
447
                TrailingOnes_2  <= 1;
448
                TotalCoeff_2    <= 2;
449
                len_2                   <= 5;
450
        end
451
        else if (rbsp_2[3:4] == 'b10) begin
452
                TrailingOnes_2  <= 3;
453
                TotalCoeff_2    <= 5;
454
                len_2                   <= 5;
455
        end
456
        else if (rbsp_2[4:5] == 'b11) begin
457
                TrailingOnes_2  <= 0;
458
                TotalCoeff_2    <= 1;
459
                len_2                   <= 6;
460
        end
461
        else if (rbsp_2[4:5] == 'b10) begin
462
                TrailingOnes_2  <= 1;
463
                TotalCoeff_2    <= 3;
464
                len_2                   <= 6;
465
        end
466
        else if (rbsp_2[4:5] == 'b01) begin
467
                TrailingOnes_2  <= 2;
468
                TotalCoeff_2    <= 3;
469
                len_2                   <= 6;
470
        end
471
        else begin
472
                TrailingOnes_2  <= 3;
473
                TotalCoeff_2    <= 6;
474
                len_2                   <= 6;
475
        end
476
end
477
rbsp_2[3] : begin
478
        len_2                   <= 6;
479
        if (rbsp_2[4:5] == 'b11) begin
480
                TrailingOnes_2  <= 0;
481
                TotalCoeff_2    <= 2;
482
        end
483
        else if (rbsp_2[4:5] == 'b10) begin
484
                TrailingOnes_2  <= 1;
485
                TotalCoeff_2    <= 4;
486
        end
487
        else if (rbsp_2[4:5] == 'b01) begin
488
                TrailingOnes_2  <= 2;
489
                TotalCoeff_2    <= 4;
490
        end
491
        else begin
492
                TrailingOnes_2  <= 3;
493
                TotalCoeff_2    <= 7;
494
        end
495
end
496
rbsp_2[4] : begin
497
        len_2                   <= 7;
498
        if (rbsp_2[5:6] == 'b11) begin
499
                TrailingOnes_2  <= 0;
500
                TotalCoeff_2    <= 3;
501
        end
502
        else if (rbsp_2[5:6] == 'b10) begin
503
                TrailingOnes_2  <= 1;
504
                TotalCoeff_2    <= 5;
505
        end
506
        else if (rbsp_2[5:6] == 'b01) begin
507
                TrailingOnes_2  <= 2;
508
                TotalCoeff_2    <= 5;
509
        end
510
        else begin
511
                TrailingOnes_2  <= 3;
512
                TotalCoeff_2    <= 8;
513
        end
514
end
515
rbsp_2[5] : begin
516
        len_2                   <= 8;
517
        if (rbsp_2[6:7] == 'b11) begin
518
                TrailingOnes_2  <= 0;
519
                TotalCoeff_2    <= 4;
520
        end
521
        else if (rbsp_2[6:7] == 'b00) begin
522
                TrailingOnes_2  <= 0;
523
                TotalCoeff_2    <= 5;
524
        end
525
        else if (rbsp_2[6:7] == 'b10) begin
526
                TrailingOnes_2  <= 1;
527
                TotalCoeff_2    <= 6;
528
        end
529
        else begin
530
                TrailingOnes_2  <= 2;
531
                TotalCoeff_2    <= 6;
532
        end
533
end
534
rbsp_2[6] : begin
535
        len_2                   <= 9;
536
        if (rbsp_2[7:8] == 'b11) begin
537
                TrailingOnes_2  <= 0;
538
                TotalCoeff_2    <= 6;
539
        end
540
        else if (rbsp_2[7:8] == 'b10) begin
541
                TrailingOnes_2  <= 1;
542
                TotalCoeff_2    <= 7;
543
        end
544
        else if (rbsp_2[7:8] == 'b01) begin
545
                TrailingOnes_2  <= 2;
546
                TotalCoeff_2    <= 7;
547
        end
548
        else begin
549
                TrailingOnes_2  <= 3;
550
                TotalCoeff_2    <= 9;
551
        end
552
end
553
rbsp_2[7] : begin
554
        len_2                   <= 11;
555
        if (rbsp_2[8:10] == 'b111) begin
556
                TrailingOnes_2  <= 0;
557
                TotalCoeff_2    <= 7;
558
        end
559
        else if (rbsp_2[8:10] == 'b011) begin
560
                TrailingOnes_2  <= 0;
561
                TotalCoeff_2    <= 8;
562
        end
563
        else if (rbsp_2[8:10] == 'b110) begin
564
                TrailingOnes_2  <= 1;
565
                TotalCoeff_2    <= 8;
566
        end
567
        else if (rbsp_2[8:10] == 'b101) begin
568
                TrailingOnes_2  <= 2;
569
                TotalCoeff_2    <= 8;
570
        end
571
        else if (rbsp_2[8:10] == 'b010) begin
572
                TrailingOnes_2  <= 1;
573
                TotalCoeff_2    <= 9;
574
        end
575
        else if (rbsp_2[8:10] == 'b001) begin
576
                TrailingOnes_2  <= 2;
577
                TotalCoeff_2    <= 9;
578
        end
579
        else if (rbsp_2[8:10] == 'b100) begin
580
                TrailingOnes_2  <= 3;
581
                TotalCoeff_2    <= 10;
582
        end
583
        else begin
584
                TrailingOnes_2  <= 3;
585
                TotalCoeff_2    <= 11;
586
        end
587
end
588
rbsp_2[8] : begin
589
        len_2                   <= 12;
590
        if (rbsp_2[9:11] == 'b111) begin
591
                TrailingOnes_2  <= 0;
592
                TotalCoeff_2    <= 9;
593
        end
594
        else if (rbsp_2[9:11] == 'b011) begin
595
                TrailingOnes_2  <= 0;
596
                TotalCoeff_2    <= 10;
597
        end
598
        else if (rbsp_2[9:11] == 'b110) begin
599
                TrailingOnes_2  <= 1;
600
                TotalCoeff_2    <= 10;
601
        end
602
        else if (rbsp_2[9:11] == 'b101) begin
603
                TrailingOnes_2  <= 2;
604
                TotalCoeff_2    <= 10;
605
        end
606
        else if (rbsp_2[9:11] == 'b000) begin
607
                TrailingOnes_2  <= 0;
608
                TotalCoeff_2    <= 11;
609
        end
610
        else if (rbsp_2[9:11] == 'b010) begin
611
                TrailingOnes_2  <= 1;
612
                TotalCoeff_2    <= 11;
613
        end
614
        else if (rbsp_2[9:11] == 'b001) begin
615
                TrailingOnes_2  <= 2;
616
                TotalCoeff_2    <= 11;
617
        end
618
        else  begin
619
                TrailingOnes_2  <= 3;
620
                TotalCoeff_2    <= 12;
621
        end
622
end
623
rbsp_2[9] : begin
624
        len_2                   <= 13;
625
        if (rbsp_2[10:12] == 'b111) begin
626
                TrailingOnes_2  <= 0;
627
                TotalCoeff_2    <= 12;
628
        end
629
        else if (rbsp_2[10:12] == 'b110) begin
630
                TrailingOnes_2  <= 1;
631
                TotalCoeff_2    <= 12;
632
        end
633
        else if (rbsp_2[10:12] == 'b101) begin
634
                TrailingOnes_2  <= 2;
635
                TotalCoeff_2    <= 12;
636
        end
637
        else if (rbsp_2[10:12] == 'b011) begin
638
                TrailingOnes_2  <= 0;
639
                TotalCoeff_2    <= 13;
640
        end
641
        else if (rbsp_2[10:12] == 'b010) begin
642
                TrailingOnes_2  <= 1;
643
                TotalCoeff_2    <= 13;
644
        end
645
        else if (rbsp_2[10:12] == 'b001) begin
646
                TrailingOnes_2  <= 2;
647
                TotalCoeff_2    <= 13;
648
        end
649
        else if (rbsp_2[10:12] == 'b100) begin
650
                TrailingOnes_2  <= 3;
651
                TotalCoeff_2    <= 13;
652
        end
653
        else begin
654
                TrailingOnes_2  <= 3;
655
                TotalCoeff_2    <= 14;
656
        end
657
end
658
rbsp_2[10] : begin
659
        if (rbsp_2[11:12] == 'b11) begin
660
                TrailingOnes_2  <= 0;
661
                TotalCoeff_2    <= 14;
662
                len_2                   <= 13;
663
        end
664
        else if (rbsp_2[11:12] == 'b10) begin
665
                TrailingOnes_2  <= 2;
666
                TotalCoeff_2    <= 14;
667
                len_2                   <= 13;
668
        end
669
        else if (rbsp_2[12:13] == 'b11) begin
670
                TrailingOnes_2  <= 1;
671
                TotalCoeff_2    <= 14;
672
                len_2                   <= 14;
673
        end
674
        else if (rbsp_2[12:13] == 'b01) begin
675
                TrailingOnes_2  <= 0;
676
                TotalCoeff_2    <= 15;
677
                len_2                   <= 14;
678
        end
679
        else if (rbsp_2[12:13] == 'b00) begin
680
                TrailingOnes_2  <= 1;
681
                TotalCoeff_2    <= 15;
682
                len_2                   <= 14;
683
        end
684
        else begin
685
                TrailingOnes_2  <= 2;
686
                TotalCoeff_2    <= 15;
687
                len_2                   <= 14;
688
        end
689
end
690
rbsp_2[11] : begin
691
        len_2                   <= 14;
692
        if (rbsp_2[12:13] == 'b11) begin
693
                TrailingOnes_2  <= 0;
694
                TotalCoeff_2    <= 16;
695
        end
696
        else if (rbsp_2[12:13] == 'b10) begin
697
                TrailingOnes_2  <= 1;
698
                TotalCoeff_2    <= 16;
699
        end
700
        else if (rbsp_2[12:13] == 'b01) begin
701
                TrailingOnes_2  <= 2;
702
                TotalCoeff_2    <= 16;
703
        end
704
        else begin
705
                TrailingOnes_2  <= 3;
706
                TotalCoeff_2    <= 16;
707
        end
708
end
709
default : begin
710
        TrailingOnes_2  <= 3;
711
        TotalCoeff_2    <= 15;
712
        len_2                   <= 13;
713
end
714
endcase
715
 
716
//------------------------
717
// nC >= 4 && nC < 8
718
//------------------------
719
always @(rbsp_3)
720
case (1'b1)
721
rbsp_3[0] : begin
722
        len_3                   <= 4;
723
        case (rbsp_3[1:3])
724
                'b111 : begin
725
                        TrailingOnes_3  <= 0;
726
                        TotalCoeff_3    <= 0;
727
                end
728
                'b110 : begin
729
                        TrailingOnes_3  <= 1;
730
                        TotalCoeff_3    <= 1;
731
                end
732
                'b101 : begin
733
                        TrailingOnes_3  <= 2;
734
                        TotalCoeff_3    <= 2;
735
                end
736
                'b100 : begin
737
                        TrailingOnes_3  <= 3;
738
                        TotalCoeff_3    <= 3;
739
                end
740
                'b011 : begin
741
                        TrailingOnes_3  <= 3;
742
                        TotalCoeff_3    <= 4;
743
                end
744
                'b010 : begin
745
                        TrailingOnes_3  <= 3;
746
                        TotalCoeff_3    <= 5;
747
                end
748
                'b001 : begin
749
                        TrailingOnes_3  <= 3;
750
                        TotalCoeff_3    <= 6;
751
                end
752
                'b000 : begin
753
                        TrailingOnes_3  <= 3;
754
                        TotalCoeff_3    <= 7;
755
                end
756
        endcase
757
end
758
rbsp_3[1] : begin
759
        len_3                   <= 5;
760
        case (rbsp_3[2:4])
761
                'b111 : begin
762
                        TrailingOnes_3  <= 1;
763
                        TotalCoeff_3    <= 2;
764
                end
765
                'b100 : begin
766
                        TrailingOnes_3  <= 1;
767
                        TotalCoeff_3    <= 3;
768
                end
769
                'b110 : begin
770
                        TrailingOnes_3  <= 2;
771
                        TotalCoeff_3    <= 3;
772
                end
773
                'b010 : begin
774
                        TrailingOnes_3  <= 1;
775
                        TotalCoeff_3    <= 4;
776
                end
777
                'b011 : begin
778
                        TrailingOnes_3  <= 2;
779
                        TotalCoeff_3    <= 4;
780
                end
781
                'b000 : begin
782
                        TrailingOnes_3  <= 1;
783
                        TotalCoeff_3    <= 5;
784
                end
785
                'b001 : begin
786
                        TrailingOnes_3  <= 2;
787
                        TotalCoeff_3    <= 5;
788
                end
789
                'b101 : begin
790
                        TrailingOnes_3  <= 3;
791
                        TotalCoeff_3    <= 8;
792
                end
793
        endcase
794
end
795
rbsp_3[2] : begin
796
        len_3                   <= 6;
797
        case (rbsp_3[3:5])
798
                3'b111 : begin
799
                        TrailingOnes_3  <= 0;
800
                        TotalCoeff_3    <= 1;
801
                end
802
                3'b011 : begin
803
                        TrailingOnes_3  <= 0;
804
                        TotalCoeff_3    <= 2;
805
                end
806
                3'b000 : begin
807
                        TrailingOnes_3  <= 0;
808
                        TotalCoeff_3    <= 3;
809
                end
810
                3'b110 : begin
811
                        TrailingOnes_3  <= 1;
812
                        TotalCoeff_3    <= 6;
813
                end
814
                3'b101 : begin
815
                        TrailingOnes_3  <= 2;
816
                        TotalCoeff_3    <= 6;
817
                end
818
                3'b010 : begin
819
                        TrailingOnes_3  <= 1;
820
                        TotalCoeff_3    <= 7;
821
                end
822
                3'b001 : begin
823
                        TrailingOnes_3  <= 2;
824
                        TotalCoeff_3    <= 7;
825
                end
826
                3'b100 : begin
827
                        TrailingOnes_3  <= 3;
828
                        TotalCoeff_3    <= 9;
829
                end
830
        endcase
831
end
832
rbsp_3[3] : begin
833
        len_3                   <= 7;
834
        case (rbsp_3[4:6])
835
                'b111 : begin
836
                        TrailingOnes_3  <= 0;
837
                        TotalCoeff_3    <= 4;
838
                end
839
                'b011 : begin
840
                        TrailingOnes_3  <= 0;
841
                        TotalCoeff_3    <= 5;
842
                end
843
                'b001 : begin
844
                        TrailingOnes_3  <= 0;
845
                        TotalCoeff_3    <= 6;
846
                end
847
                'b000 : begin
848
                        TrailingOnes_3  <= 0;
849
                        TotalCoeff_3    <= 7;
850
                end
851
                'b110 : begin
852
                        TrailingOnes_3  <= 1;
853
                        TotalCoeff_3    <= 8;
854
                end
855
                'b101 : begin
856
                        TrailingOnes_3  <= 2;
857
                        TotalCoeff_3    <= 8;
858
                end
859
 
860
                'b010 : begin
861
                        TrailingOnes_3  <= 2;
862
                        TotalCoeff_3    <= 9;
863
                end
864
                'b100 : begin
865
                        TrailingOnes_3  <= 3;
866
                        TotalCoeff_3    <= 10;
867
                end
868
        endcase
869
end
870
rbsp_3[4] : begin
871
        len_3                   <= 8;
872
        case (rbsp_3[5:7])
873
                'b111 : begin
874
                        TrailingOnes_3  <= 0;
875
                        TotalCoeff_3    <= 8;
876
                end
877
                'b011 : begin
878
                        TrailingOnes_3  <= 0;
879
                        TotalCoeff_3    <= 9;
880
                end
881
                'b110 : begin
882
                        TrailingOnes_3  <= 1;
883
                        TotalCoeff_3    <= 9;
884
                end
885
                'b010 : begin
886
                        TrailingOnes_3  <= 1;
887
                        TotalCoeff_3    <= 10;
888
                end
889
                'b101 : begin
890
                        TrailingOnes_3  <= 2;
891
                        TotalCoeff_3    <= 10;
892
                end
893
                'b001 : begin
894
                        TrailingOnes_3  <= 2;
895
                        TotalCoeff_3    <= 11;
896
                end
897
                'b100 : begin
898
                        TrailingOnes_3  <= 3;
899
                        TotalCoeff_3    <= 11;
900
                end
901
                'b000 : begin
902
                        TrailingOnes_3  <= 3;
903
                        TotalCoeff_3    <= 12;
904
                end
905
        endcase
906
end
907
rbsp_3[5] : begin
908
        len_3                   <= 9;
909
        case (rbsp_3[6:8])
910
                'b111 : begin
911
                        TrailingOnes_3  <= 0;
912
                        TotalCoeff_3    <= 10;
913
                end
914
                'b011 : begin
915
                        TrailingOnes_3  <= 0;
916
                        TotalCoeff_3    <= 11;
917
                end
918
                'b110 : begin
919
                        TrailingOnes_3  <= 1;
920
                        TotalCoeff_3    <= 11;
921
                end
922
                'b000 : begin
923
                        TrailingOnes_3  <= 0;
924
                        TotalCoeff_3    <= 12;
925
                end
926
                'b010 : begin
927
                        TrailingOnes_3  <= 1;
928
                        TotalCoeff_3    <= 12;
929
                end
930
                'b101 : begin
931
                        TrailingOnes_3  <= 2;
932
                        TotalCoeff_3    <= 12;
933
                end
934
                'b001 : begin
935
                        TrailingOnes_3  <= 2;
936
                        TotalCoeff_3    <= 13;
937
                end
938
                'b100 : begin
939
                        TrailingOnes_3  <= 3;
940
                        TotalCoeff_3    <= 13;
941
                end
942
        endcase
943
end
944
rbsp_3[6] : begin
945
        if (rbsp_3[7:8] == 'b11)begin
946
                TrailingOnes_3  <= 1;
947
                TotalCoeff_3    <= 13;
948
                len_3                   <= 9;
949
        end
950
        else if (rbsp_3[7:9] == 'b101)begin
951
                TrailingOnes_3  <= 0;
952
                TotalCoeff_3    <= 13;
953
                len_3                   <= 10;
954
        end
955
        else if (rbsp_3[7:9] == 'b001)begin
956
                TrailingOnes_3  <= 0;
957
                TotalCoeff_3    <= 14;
958
                len_3                   <= 10;
959
        end
960
        else if (rbsp_3[7:9] == 'b100)begin
961
                TrailingOnes_3  <= 1;
962
                TotalCoeff_3    <= 14;
963
                len_3                   <= 10;
964
        end
965
        else if (rbsp_3[7:9] == 'b011)begin
966
                TrailingOnes_3  <= 2;
967
                TotalCoeff_3    <= 14;
968
                len_3                   <= 10;
969
        end
970
        else if (rbsp_3[7:9] == 'b010)begin
971
                TrailingOnes_3  <= 3;
972
                TotalCoeff_3    <= 14;
973
                len_3                   <= 10;
974
        end
975
        else begin
976
                TrailingOnes_3  <= 1;
977
                TotalCoeff_3    <= 15;
978
                len_3                   <= 10;
979
        end
980
end
981
rbsp_3[7] : begin
982
        len_3                   <= 10;
983
        case (rbsp_3[8:9])
984
                'b01 : begin
985
                        TrailingOnes_3  <= 0;
986
                        TotalCoeff_3    <= 15;
987
                end
988
                'b11 : begin
989
                        TrailingOnes_3  <= 2;
990
                        TotalCoeff_3    <= 15;
991
                end
992
                'b10 : begin
993
                        TrailingOnes_3  <= 3;
994
                        TotalCoeff_3    <= 15;
995
                end
996
                'b00 : begin
997
                        TrailingOnes_3  <= 1;
998
                        TotalCoeff_3    <= 16;
999
                end
1000
        endcase
1001
end
1002
rbsp_3[8] : begin
1003
        len_3                   <= 10;
1004
        if (rbsp_3[9] == 'b1)begin
1005
                TrailingOnes_3  <= 2;
1006
                TotalCoeff_3    <= 16;
1007
        end
1008
        else begin
1009
                TrailingOnes_3  <= 3;
1010
                TotalCoeff_3    <= 16;
1011
        end
1012
end
1013
default : begin
1014
        len_3                   <= 10;
1015
        TrailingOnes_3  <= 0;
1016
        TotalCoeff_3    <= 16;
1017
end
1018
endcase
1019
 
1020
//------------------ Colum 4 : nC >= 8---------------------
1021
always @(rbsp_4)
1022
begin
1023
        len_4 <= 6;
1024
        if (rbsp_4[0:4] == 5'b00001) begin
1025
                TrailingOnes_4  <= 0;
1026
                TotalCoeff_4    <= 0;
1027
        end
1028
        else begin
1029
                TrailingOnes_4  <= rbsp_4[4:5];
1030
                TotalCoeff_4    <= rbsp_4[0:3] + 1'b1;
1031
        end
1032
end
1033
 
1034
//------------------------
1035
// nC == -1
1036
//------------------------
1037
always @(rbsp_5)
1038
case (1'b1)
1039
rbsp_5[0] : begin
1040
        TrailingOnes_5  <= 1;
1041
        TotalCoeff_5    <= 1;
1042
        len_5                   <= 1;
1043
end
1044
rbsp_5[1] : begin
1045
        TrailingOnes_5  <= 0;
1046
        TotalCoeff_5    <= 0;
1047
        len_5                   <= 2;
1048
end
1049
rbsp_5[2] : begin
1050
        TrailingOnes_5  <= 2;
1051
        TotalCoeff_5    <= 2;
1052
        len_5                   <= 3;
1053
end
1054
rbsp_5[3] : begin
1055
        len_5                   <= 6;
1056
        if (rbsp_5[4:5] == 'b11) begin
1057
                TrailingOnes_5  <= 0;
1058
                TotalCoeff_5    <= 1;
1059
        end
1060
        else if (rbsp_5[4:5] == 'b00) begin
1061
                TrailingOnes_5  <= 0;
1062
                TotalCoeff_5    <= 2;
1063
        end
1064
        else if (rbsp_5[4:5] == 'b10) begin
1065
                TrailingOnes_5  <= 1;
1066
                TotalCoeff_5    <= 2;
1067
        end
1068
        else begin
1069
                TrailingOnes_5  <= 3;
1070
                TotalCoeff_5    <= 3;
1071
        end
1072
end
1073
rbsp_5[4] : begin
1074
        len_5                   <= 6;
1075
        if (rbsp_5[5] == 'b1) begin
1076
                TrailingOnes_5  <= 0;
1077
                TotalCoeff_5    <= 3;
1078
        end
1079
        else begin
1080
                TrailingOnes_5  <= 0;
1081
                TotalCoeff_5    <= 4;
1082
        end
1083
end
1084
rbsp_5[5] : begin
1085
        len_5                   <= 7;
1086
        if (rbsp_5[6] == 'b1) begin
1087
                TrailingOnes_5  <= 1;
1088
                TotalCoeff_5    <= 3;
1089
        end
1090
        else begin
1091
                TrailingOnes_5  <= 2;
1092
                TotalCoeff_5    <= 3;
1093
        end
1094
end
1095
rbsp_5[6] : begin
1096
        len_5                   <= 8;
1097
        if (rbsp_5[7] == 'b1) begin
1098
                TrailingOnes_5  <= 1;
1099
                TotalCoeff_5    <= 4;
1100
        end
1101
        else begin
1102
                TrailingOnes_5  <= 2;
1103
                TotalCoeff_5    <= 4;
1104
        end
1105
end
1106
default : begin
1107
        len_5                   <= 7;
1108
        TrailingOnes_5  <= 3;
1109
        TotalCoeff_5    <= 4;
1110
end
1111
endcase
1112
 
1113
//------------------------
1114
//output mux
1115
//------------------------
1116
//startect a colum according to nC
1117
always @(*)
1118
begin
1119
        if (nC == -1) begin
1120
                TrailingOnes_comb       <= TrailingOnes_5;
1121
                TotalCoeff_comb         <= TotalCoeff_5;
1122
                len_comb                        <= len_5;
1123
        end
1124
        else if (nC[3]) begin
1125
                TrailingOnes_comb       <= TrailingOnes_4;
1126
                TotalCoeff_comb         <= TotalCoeff_4;
1127
                len_comb                        <= len_4;
1128
        end
1129
        else if (nC[2]) begin
1130
                TrailingOnes_comb       <= TrailingOnes_3;
1131
                TotalCoeff_comb         <= TotalCoeff_3;
1132
                len_comb                        <= len_3;
1133
        end
1134
        else if (nC[1]) begin
1135
                TrailingOnes_comb       <= TrailingOnes_2;
1136
                TotalCoeff_comb         <= TotalCoeff_2;
1137
                len_comb                        <= len_2;
1138
        end
1139
        else begin
1140
                TrailingOnes_comb       <= TrailingOnes_1;
1141
                TotalCoeff_comb         <= TotalCoeff_1;
1142
                len_comb                        <= len_1;
1143
        end
1144
end
1145
//------------------------
1146
//TrailingOnes & TotalCoeff
1147
//------------------------
1148
wire output_refresh =  ena && sel;
1149
 
1150
always @(posedge clk or negedge rst_n)
1151
if (~rst_n) begin
1152
        TrailingOnes    <= 0;
1153
        TotalCoeff              <= 0;
1154
end
1155
else if (output_refresh) begin
1156
        TrailingOnes    <= TrailingOnes_comb;
1157
        TotalCoeff              <= TotalCoeff_comb;
1158
end
1159
 
1160
endmodule
1161
 

powered by: WebSVN 2.1.0

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