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

Subversion Repositories nova

[/] [nova/] [trunk/] [src/] [total_zeros_decoding.v] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 eexuke
//--------------------------------------------------------------------------------------------------
2
// Design    : nova
3
// Author(s) : Ke Xu
4
// Email           : eexuke@yahoo.com
5
// File      : total_zeros_decoding.v
6
// Generated : June 9, 2005
7
// Copyright (C) 2008 Ke Xu                
8
//-------------------------------------------------------------------------------------------------
9
// Description 
10
// Decoding total_zeros from Table9-7,Table9-8,Table9-9 of H.264/AVC standard 2003
11
//-------------------------------------------------------------------------------------------------
12
 
13
// synopsys translate_off
14
`include "timescale.v"
15
// synopsys translate_on
16
`include "nova_defines.v"
17
 
18
module total_zeros_decoding (clk,reset_n,residual_state,cavlc_decoder_state,TotalCoeff_3to0,heading_one_pos,
19
        BitStream_buffer_output,maxNumCoeff,total_zeros,total_zeros_len);
20
        input clk,reset_n;
21
        input [3:0] residual_state;
22
        input [3:0] cavlc_decoder_state;
23
        input [3:0] TotalCoeff_3to0;
24
        input [3:0] heading_one_pos;
25
        input [15:0] BitStream_buffer_output;
26
        output [4:0] maxNumCoeff;
27
        output [3:0] total_zeros;
28
        output [3:0] total_zeros_len;
29
        reg [4:0] maxNumCoeff;
30
        reg [3:0] total_zeros;
31
        reg [3:0] total_zeros_len;
32
 
33
        reg [3:0] total_zeros_reg;
34
        always @ (posedge clk)
35
                if (reset_n == 0)
36
                        maxNumCoeff <= 0;
37
                else
38
                        case (residual_state)
39
                                `Intra16x16DCLevel_s:maxNumCoeff <= 5'd16;
40
                                `Intra16x16ACLevel_s:maxNumCoeff <= 15;
41
                                `LumaLevel_s        :maxNumCoeff <= 5'd16;
42
                                `ChromaDCLevel_Cb_s :maxNumCoeff <= 4;
43
                                `ChromaDCLevel_Cr_s :maxNumCoeff <= 4;
44
                                `ChromaACLevel_Cb_s :maxNumCoeff <= 15;
45
                                `ChromaACLevel_Cr_s :maxNumCoeff <= 15;
46
                        endcase
47
 
48
        //total_zeros_len
49
        always @ (cavlc_decoder_state or maxNumCoeff or TotalCoeff_3to0 or heading_one_pos or BitStream_buffer_output)
50
                if (cavlc_decoder_state == `total_zeros_LUT)
51
                        begin
52
                                if (maxNumCoeff == 4)
53
                                        case (TotalCoeff_3to0)
54
                                                1:if      (heading_one_pos == 0) total_zeros_len <= 1;
55
                                                  else if (heading_one_pos == 1) total_zeros_len <= 2;
56
                                                  else                           total_zeros_len <= 3;
57
                                                2:if      (heading_one_pos == 0) total_zeros_len <= 1;
58
                                                  else                           total_zeros_len <= 2;
59
                                                3:                               total_zeros_len <= 1;
60
                                                default:                         total_zeros_len <= 0;
61
                                        endcase
62
                                else
63
                                        case (TotalCoeff_3to0)
64
                                                1:if      (heading_one_pos == 0) total_zeros_len <= 1;
65
                                                  else if (heading_one_pos == 8)        total_zeros_len <= 4'd9;
66
                                                  else                            total_zeros_len <= heading_one_pos + 2;
67
                                                2:if      (heading_one_pos == 0) total_zeros_len <= 4'd3;
68
                                                  else if (heading_one_pos == 1)
69
                                                        total_zeros_len <= (BitStream_buffer_output[13] == 1'b1)? 4'd3:4'd4;
70
                                                  else if (heading_one_pos == 2)        total_zeros_len <= 4;
71
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 5;
72
                                                  else if (heading_one_pos == 4)        total_zeros_len <= 6;
73
                                                  else                            total_zeros_len <= 6;
74
                                                3:if      (heading_one_pos == 0) total_zeros_len <= 4'd3;
75
                                                  else if (heading_one_pos == 1)
76
                                                        total_zeros_len <= (BitStream_buffer_output[13] == 1'b1)? 4'd3:4'd4;
77
                                                  else if (heading_one_pos == 2)        total_zeros_len <= 4;
78
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 5;
79
                                                  else if (heading_one_pos == 4)        total_zeros_len <= 5;
80
                                                  else                            total_zeros_len <= 4'd6;
81
                                                4:if      (heading_one_pos == 0) total_zeros_len <= 3;
82
                                                  else if (heading_one_pos == 1)
83
                                                        total_zeros_len <= (BitStream_buffer_output[13] == 1'b1)? 4'd3:4'd4;
84
                                                  else if (heading_one_pos == 2)        total_zeros_len <= 4;
85
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 5;
86
                                                  else                            total_zeros_len <= 5;
87
                                                5:if (heading_one_pos == 0)       total_zeros_len <= 4'd3;
88
                                                  else if (heading_one_pos == 1)
89
                                                        total_zeros_len <= (BitStream_buffer_output[13] == 1'b1)? 4'd3:4'd4;
90
                                                  else if (heading_one_pos == 2)        total_zeros_len <= 4;
91
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 4;
92
                                                  else                                                          total_zeros_len <= 5;
93
                                                6:if (heading_one_pos == 0 || heading_one_pos == 1 || heading_one_pos ==2)
94
                                              total_zeros_len <= 3;
95
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 4;
96
                                                  else if (heading_one_pos == 4)        total_zeros_len <= 5;
97
                                        else                            total_zeros_len <= 6;
98
                                                7:if (heading_one_pos == 0 && BitStream_buffer_output[14] == 1)
99
                                              total_zeros_len <= 2;
100
                                                  else if (heading_one_pos == 0 || heading_one_pos == 1 || heading_one_pos == 2)
101
                                              total_zeros_len <= 3;
102
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 4;
103
                                                  else if (heading_one_pos == 4)        total_zeros_len <= 5;
104
                                                  else                            total_zeros_len <= 6;
105
                                                8:if (heading_one_pos == 0)       total_zeros_len <= 2;
106
                                                  else if (heading_one_pos == 1 || heading_one_pos == 2)
107
                                                        total_zeros_len <= 3;
108
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 4;
109
                                                  else if (heading_one_pos == 4)        total_zeros_len <= 5;
110
                                                  else                            total_zeros_len <= 6;
111
                                                9:if (heading_one_pos == 0 || heading_one_pos == 1)
112
                                                        total_zeros_len <= 2;
113
                                                  else if (heading_one_pos == 2)        total_zeros_len <= 3;
114
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 4;
115
                                                  else if (heading_one_pos == 4)        total_zeros_len <= 5;
116
                                                  else                                                          total_zeros_len <= 6;
117
                                                10:if (heading_one_pos == 0 || heading_one_pos == 1)
118
                                                        total_zeros_len <= 2;
119
                                                  else if (heading_one_pos == 2)        total_zeros_len <= 3;
120
                                                  else if (heading_one_pos == 3)        total_zeros_len <= 4;
121
                                                  else                            total_zeros_len <= 5;
122
                                                11:if (heading_one_pos == 0)      total_zeros_len <= 1;
123
                                                  else if (heading_one_pos == 1 || heading_one_pos == 2)
124
                                                                                        total_zeros_len <= 3;
125
                                                  else                            total_zeros_len <= 4;
126
                                                12:if (heading_one_pos == 0 || heading_one_pos == 1 || heading_one_pos == 2 || heading_one_pos == 3)
127
                                                        total_zeros_len <= heading_one_pos + 1;
128
                                                  else  total_zeros_len <= 4;
129
                                                13:if (heading_one_pos == 0 || heading_one_pos == 1 || heading_one_pos == 2)
130
                                                        total_zeros_len <= heading_one_pos + 1;
131
                                                  else                                                          total_zeros_len <= 3;
132
                                                14:if (heading_one_pos == 0)             total_zeros_len <= 1;
133
                                                  else                                                          total_zeros_len <= 2;
134
                                                15:total_zeros_len <= 1;
135
                                                default:total_zeros_len <= 0;
136
                                        endcase
137
                        end
138
                else
139
                        total_zeros_len <= 0;
140
 
141
        //total_zeros
142
        wire total_zeros_t0,total_zeros_t1;
143
        assign total_zeros_t0 = (cavlc_decoder_state == `total_zeros_LUT && maxNumCoeff != 4); //Table 9-7,9-8
144
        assign total_zeros_t1 = (cavlc_decoder_state == `total_zeros_LUT && maxNumCoeff == 4); //Table 9-9
145
        always  @ (total_zeros_t0 or total_zeros_t1 or TotalCoeff_3to0 or heading_one_pos
146
                or BitStream_buffer_output or total_zeros_reg)
147
                if (total_zeros_t0)
148
                        case (TotalCoeff_3to0)
149
                                1:
150
                                if (heading_one_pos == 4'd0)
151
                                        total_zeros <= 4'd0;
152
                                else if (heading_one_pos == 4'd1)
153
                                        total_zeros <= (BitStream_buffer_output[13])? 4'd1:4'd2;
154
                                else if (heading_one_pos == 4'd2)
155
                                        total_zeros <= (BitStream_buffer_output[12])? 4'd3:4'd4;
156
                                else if (heading_one_pos == 4'd3)
157
                                        total_zeros <= (BitStream_buffer_output[11])? 4'd5:4'd6;
158
                                else if (heading_one_pos == 4'd4)
159
                                        total_zeros <= (BitStream_buffer_output[10])? 4'd7:4'd8;
160
                                else if (heading_one_pos == 4'd5)
161
                                        total_zeros <= (BitStream_buffer_output[9])? 4'd9:4'd10;
162
                                else if (heading_one_pos == 4'd6)
163
                                        total_zeros <= (BitStream_buffer_output[8])? 4'd11:4'd12;
164
                                else if (heading_one_pos == 4'd7)
165
                                        total_zeros <= (BitStream_buffer_output[7])? 4'd13:4'd14;
166
                                else
167
                                        total_zeros <= 4'd15;
168
                                2:
169
                                if (heading_one_pos == 4'd0)
170
                                        total_zeros <= {2'b0,~BitStream_buffer_output[14:13]};
171
                                else if (heading_one_pos == 4'd1)
172
                                        case (BitStream_buffer_output[13:12])
173
                                                2'b01:total_zeros <= 4'd5;
174
                                                2'b00:total_zeros <= 4'd6;
175
                                                default:total_zeros <= 4'd4;
176
                                        endcase
177
                                else if (heading_one_pos == 4'd2)
178
                                        total_zeros <= (BitStream_buffer_output[12])? 4'd7:4'd8;
179
                                else if (heading_one_pos == 4'd3)
180
                                        total_zeros <= (BitStream_buffer_output[11])? 4'd9:4'd10;
181
                                else if (heading_one_pos == 4'd4)
182
                                        total_zeros <= (BitStream_buffer_output[10])? 4'd11:4'd12;
183
                                else if (heading_one_pos == 4'd5)
184
                                        total_zeros <= 4'd13;
185
                                else
186
                                        total_zeros <= 4'd14;
187
                                3:
188
                                if (heading_one_pos == 4'd0)
189
                                        case (BitStream_buffer_output[14:13])
190
                                                2'b00:total_zeros <= 4'd6;
191
                                                2'b01:total_zeros <= 4'd3;
192
                                                2'b10:total_zeros <= 4'd2;
193
                                                2'b11:total_zeros <= 4'd1;
194
                                        endcase
195
                                else if (heading_one_pos == 4'd1)
196
                                        case (BitStream_buffer_output[13:12])
197
                                                2'b00:total_zeros <= 4'd4;
198
                                                2'b01:total_zeros <= 4'd0;
199
                                                default:total_zeros <= 4'd7;
200
                                        endcase
201
                                else if (heading_one_pos == 4'd2)
202
                                        total_zeros <= (BitStream_buffer_output[12])? 4'd5:4'd8;
203
                                else if (heading_one_pos == 4'd3)
204
                                        total_zeros <= (BitStream_buffer_output[11])? 4'd9:4'd10;
205
                                else if (heading_one_pos == 4'd4)
206
                                        total_zeros <= 4'd12;
207
                                else if (heading_one_pos == 4'd5)
208
                                        total_zeros <= 4'd11;
209
                                else
210
                                        total_zeros <= 4'd13;
211
                                4:
212
                                if (heading_one_pos == 4'd0)
213
                                        case (BitStream_buffer_output[14:13])
214
                                                2'b00:total_zeros <= 4'd6;
215
                                                2'b01:total_zeros <= 4'd5;
216
                                                2'b10:total_zeros <= 4'd4;
217
                                                2'b11:total_zeros <= 4'd1;
218
                                        endcase
219
                                else if (heading_one_pos == 4'd1)
220
                                        case (BitStream_buffer_output[13:12])
221
                                                2'b00:total_zeros <= 4'd3;
222
                                                2'b01:total_zeros <= 4'd2;
223
                                                default:total_zeros <= 4'd8;
224
                                        endcase
225
                                else if (heading_one_pos == 4'd2)
226
                                        total_zeros <= (BitStream_buffer_output[12])? 4'd7:4'd9;
227
                                else if (heading_one_pos == 4'd3)
228
                                        total_zeros <= (BitStream_buffer_output[11])? 4'd0:4'd10;
229
                                else if (heading_one_pos == 4'd4)
230
                                        total_zeros <= 4'd11;
231
                                else
232
                                        total_zeros <= 4'd12;
233
                                5:
234
                                if (heading_one_pos == 4'd0)
235
                                        case (BitStream_buffer_output[14:13])
236
                                                2'b00:total_zeros <= 4'd6;
237
                                                2'b01:total_zeros <= 4'd5;
238
                                                2'b10:total_zeros <= 4'd4;
239
                                                2'b11:total_zeros <= 4'd3;
240
                                        endcase
241
                                else if (heading_one_pos == 4'd1)
242
                                        case (BitStream_buffer_output[13:12])
243
                                                2'b00:total_zeros <= 4'd1;
244
                                                2'b01:total_zeros <= 4'd0;
245
                                                default:total_zeros <= 4'd7;
246
                                        endcase
247
                                else if (heading_one_pos == 4'd2)
248
                                        total_zeros <= (BitStream_buffer_output[12])? 4'd2:4'd8;
249
                                else if (heading_one_pos == 4'd3)
250
                                        total_zeros <= 4'd10;
251
                                else if (heading_one_pos == 4'd4)
252
                                        total_zeros <= 4'd9;
253
                                else
254
                                        total_zeros <= 4'd11;
255
                                6:
256
                                if (heading_one_pos == 4'd0)
257
                                        case (BitStream_buffer_output[14:13])
258
                                                2'b00:total_zeros <= 4'd5;
259
                                                2'b01:total_zeros <= 4'd4;
260
                                                2'b10:total_zeros <= 4'd3;
261
                                                2'b11:total_zeros <= 4'd2;
262
                                        endcase
263
                                else if (heading_one_pos == 4'd1)
264
                                        total_zeros <= (BitStream_buffer_output[13])? 4'd6:4'd7;
265
                                else if (heading_one_pos == 4'd2)
266
                                        total_zeros <= 4'd9;
267
                                else if (heading_one_pos == 4'd3)
268
                                        total_zeros <= 4'd8;
269
                                else if (heading_one_pos == 4'd4)
270
                                        total_zeros <= 4'd1;
271
                                else if (heading_one_pos == 4'd5)
272
                                        total_zeros <= 4'd0;
273
                                else
274
                                        total_zeros <= 4'd10;
275
                                7:
276
                                if (heading_one_pos == 4'd0)
277
                                        case (BitStream_buffer_output[14:13])
278
                                                2'b00:total_zeros <= 4'd3;
279
                                                2'b01:total_zeros <= 4'd2;
280
                                                default:total_zeros <= 4'd5;
281
                                        endcase
282
                                else if (heading_one_pos == 4'd1)
283
                                        total_zeros <= (BitStream_buffer_output[13])? 4'd4:4'd6;
284
                                else if (heading_one_pos == 4'd2)
285
                                        total_zeros <= 4'd8;
286
                                else if (heading_one_pos == 4'd3)
287
                                        total_zeros <= 4'd7;
288
                                else if (heading_one_pos == 4'd4)
289
                                        total_zeros <= 4'd1;
290
                                else if (heading_one_pos == 4'd5)
291
                                        total_zeros <= 4'd0;
292
                                else
293
                                        total_zeros <= 4'd9;
294
                                8:
295
                                if (heading_one_pos == 4'd0)
296
                                        total_zeros <= (BitStream_buffer_output[14])? 4'd4:4'd5;
297
                                else if (heading_one_pos == 4'd1)
298
                                        total_zeros <= (BitStream_buffer_output[13])? 4'd3:4'd6;
299
                                else if (heading_one_pos == 4'd2)
300
                                        total_zeros <= 4'd7;
301
                                else if (heading_one_pos == 4'd3)
302
                                        total_zeros <= 4'd1;
303
                                else if (heading_one_pos == 4'd4)
304
                                        total_zeros <= 4'd2;
305
                                else if (heading_one_pos == 4'd5)
306
                                        total_zeros <= 4'd0;
307
                                else
308
                                        total_zeros <= 4'd8;
309
                                9:
310
                                if (heading_one_pos == 4'd0)
311
                                        total_zeros <= (BitStream_buffer_output[14])? 4'd3:4'd4;
312
                                else if (heading_one_pos == 4'd1)
313
                                        total_zeros <= 4'd6;
314
                                else if (heading_one_pos == 4'd2)
315
                                        total_zeros <= 4'd5;
316
                                else if (heading_one_pos == 4'd3)
317
                                        total_zeros <= 4'd2;
318
                                else if (heading_one_pos == 4'd4)
319
                                        total_zeros <= 4'd7;
320
                                else if (heading_one_pos == 4'd5)
321
                                        total_zeros <= 4'd0;
322
                                else
323
                                        total_zeros <= 4'd1;
324
                                10:
325
                                if (heading_one_pos == 4'd0)
326
                                        total_zeros <= (BitStream_buffer_output[14])? 4'd3:4'd4;
327
                                else if (heading_one_pos == 4'd1)
328
                                        total_zeros <= 4'd5;
329
                                else if (heading_one_pos == 4'd2)
330
                                        total_zeros <= 4'd2;
331
                                else if (heading_one_pos == 4'd3)
332
                                        total_zeros <= 4'd6;
333
                                else if (heading_one_pos == 4'd4)
334
                                        total_zeros <= 4'd0;
335
                                else
336
                                        total_zeros <= 4'd1;
337
                                11:
338
                                if (heading_one_pos == 4'd0)
339
                                        total_zeros <= 4'd4;
340
                                else if (heading_one_pos == 4'd1)
341
                                        total_zeros <= (BitStream_buffer_output[13])? 4'd5:4'd3;
342
                                else if (heading_one_pos == 4'd2)
343
                                        total_zeros <= 4'd2;
344
                                else if (heading_one_pos == 4'd3)
345
                                        total_zeros <= 4'd1;
346
                                else
347
                                        total_zeros <= 4'd0;
348
                                12:
349
                                if (heading_one_pos == 4'd0)
350
                                        total_zeros <= 4'd3;
351
                                else if (heading_one_pos == 4'd1)
352
                                        total_zeros <= 4'd2;
353
                                else if (heading_one_pos == 4'd2)
354
                                        total_zeros <= 4'd4;
355
                                else if (heading_one_pos == 4'd3)
356
                                        total_zeros <= 4'd1;
357
                                else
358
                                        total_zeros <= 4'd0;
359
                                13:
360
                                if (heading_one_pos == 4'd0)
361
                                        total_zeros <= 4'd2;
362
                                else if (heading_one_pos == 4'd1)
363
                                        total_zeros <= 4'd3;
364
                                else if (heading_one_pos == 4'd2)
365
                                        total_zeros <= 4'd1;
366
                                else
367
                                        total_zeros <= 4'd0;
368
                                14:
369
                                if (heading_one_pos == 4'd0)
370
                                        total_zeros <= 4'd2;
371
                                else if (heading_one_pos == 4'd1)
372
                                        total_zeros <= 4'd1;
373
                                else
374
                                        total_zeros <= 4'd0;
375
                                default:total_zeros <= (heading_one_pos == 4'd0)? 4'd1:4'd0;
376
                        endcase
377
                else if (total_zeros_t1)
378
                        case (TotalCoeff_3to0)
379
                                1:if      (heading_one_pos == 4'd0)   total_zeros <= 4'd0;
380
                                  else if (heading_one_pos == 4'd1)     total_zeros <= 4'd1;
381
                                  else if (heading_one_pos == 4'd2)     total_zeros <= 4'd2;
382
                                  else                              total_zeros <= 4'd3;
383
                                2:if      (heading_one_pos == 4'd0)   total_zeros <= 4'd0;
384
                                  else if (heading_one_pos == 4'd1)     total_zeros <= 4'd1;
385
                                  else                              total_zeros <= 4'd2;
386
                                3:total_zeros <= {3'b0,~BitStream_buffer_output[15]};
387
                                default:total_zeros <= 0;
388
                        endcase
389
                else
390
                        total_zeros <= total_zeros_reg;
391
 
392
        always @ (posedge clk)
393
                if (reset_n == 0)
394
                        total_zeros_reg <= 0;
395
                else if (cavlc_decoder_state == `total_zeros_LUT)
396
                        total_zeros_reg <= total_zeros;
397
 
398
endmodule
399
 
400
 

powered by: WebSVN 2.1.0

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