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

Subversion Repositories nova

[/] [nova/] [trunk/] [src/] [run_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      : run_decoding.v
6
// Generated : June 11, 2005
7
// Copyright (C) 2008 Ke Xu                
8
//-------------------------------------------------------------------------------------------------
9
// Description 
10
// Decoding the all the remaining syntax for CAVLC
11
//-------------------------------------------------------------------------------------------------
12
 
13
// synopsys translate_off
14
`include "timescale.v"
15
// synopsys translate_on
16
`include "nova_defines.v"
17
 
18
module run_decoding (clk,reset_n,cavlc_decoder_state,BitStream_buffer_output,total_zeros,
19
        level_0,level_1,level_2,level_3,level_4,level_5,level_6,level_7,
20
        level_8,level_9,level_10,level_11,level_12,level_13,level_14,level_15,
21
        TotalCoeff,i_run,i_TotalCoeff,coeffNum,IsRunLoop,
22
 
23
        run_of_zeros_len,zerosLeft,run,
24
        coeffLevel_0,coeffLevel_1,coeffLevel_2, coeffLevel_3, coeffLevel_4, coeffLevel_5, coeffLevel_6, coeffLevel_7,
25
        coeffLevel_8,coeffLevel_9,coeffLevel_10,coeffLevel_11,coeffLevel_12,coeffLevel_13,coeffLevel_14,coeffLevel_15);
26
        input clk,reset_n;
27
        input [3:0] cavlc_decoder_state;
28
        input [15:0] BitStream_buffer_output;
29
        input [3:0] total_zeros;
30
        input [8:0] level_0,level_1,level_2,level_3,level_4,level_5,level_6,level_7;
31
        input [8:0] level_8,level_9,level_10,level_11,level_12,level_13,level_14,level_15;
32
        input [4:0] TotalCoeff;
33
        input [3:0] i_run;
34
        input [3:0] i_TotalCoeff;
35
        input [3:0] coeffNum;
36
        input IsRunLoop;
37
        output [3:0] run_of_zeros_len;
38
        output [3:0] zerosLeft;
39
        output [3:0] run;
40
        output [8:0] coeffLevel_0, coeffLevel_1, coeffLevel_2,coeffLevel_3, coeffLevel_4, coeffLevel_5, coeffLevel_6;
41
        output [8:0] coeffLevel_7, coeffLevel_8, coeffLevel_9,coeffLevel_10,coeffLevel_11,coeffLevel_12,coeffLevel_13;
42
        output [8:0] coeffLevel_14,coeffLevel_15;
43
 
44
        reg [3:0] run_of_zeros_len;
45
        reg [3:0] zerosLeft;
46
        reg [3:0] run;
47
        reg [8:0] coeffLevel_0, coeffLevel_1, coeffLevel_2,coeffLevel_3, coeffLevel_4, coeffLevel_5, coeffLevel_6;
48
        reg [8:0] coeffLevel_7, coeffLevel_8, coeffLevel_9,coeffLevel_10,coeffLevel_11,coeffLevel_12,coeffLevel_13;
49
        reg [8:0] coeffLevel_14,coeffLevel_15;
50
 
51
        reg [3:0] run_before;
52
        reg [3:0] zerosLeft_reg;
53
        reg [3:0] run_0,run_1,run_2,run_3,run_4,run_5,run_6,run_7;
54
        reg [3:0] run_8,run_9,run_10,run_11,run_12,run_13,run_14,run_15;
55
        reg [8:0] level_output;
56
 
57
        //decoding Table 9-10
58
        always @ (cavlc_decoder_state or zerosLeft or BitStream_buffer_output)
59
                if (cavlc_decoder_state == `run_before_LUT)
60
                        case (zerosLeft)
61
                                0:run_of_zeros_len <= 0;//special case added for "total_zeros==0"
62
                                1:run_of_zeros_len <= 1;
63
                                2:run_of_zeros_len <= (BitStream_buffer_output[15] == 1)? 4'd1:4'd2;
64
                                3:run_of_zeros_len <= 2;
65
                                4:run_of_zeros_len <= (BitStream_buffer_output[15:14] == 2'b00)? 4'd3:4'd2;
66
                                5:run_of_zeros_len <= (BitStream_buffer_output[15] == 1)? 4'd2:4'd3;
67
                                6:run_of_zeros_len <= (BitStream_buffer_output[15:14] == 2'b11)? 4'd2:4'd3;
68
                                default:
69
                                if (BitStream_buffer_output[15] == 1 || BitStream_buffer_output[14] == 1 || BitStream_buffer_output[13] == 1)
70
                                                      run_of_zeros_len <= 3;
71
                                else if (BitStream_buffer_output[15:12] == 1)   run_of_zeros_len <= 4;
72
                                else if (BitStream_buffer_output[15:11] == 1)   run_of_zeros_len <= 5;
73
                                else if (BitStream_buffer_output[15:10] == 1)   run_of_zeros_len <= 6;
74
                                else if (BitStream_buffer_output[15:9]  == 1)   run_of_zeros_len <= 7;
75
                                else if (BitStream_buffer_output[15:8]  == 1)   run_of_zeros_len <= 4'd8;
76
                                else if (BitStream_buffer_output[15:7]  == 1)   run_of_zeros_len <= 4'd9;
77
                                else if (BitStream_buffer_output[15:6]  == 1)   run_of_zeros_len <= 4'd10;
78
                                else if (BitStream_buffer_output[15:5]  == 1)   run_of_zeros_len <= 4'd11;
79
                                else                                          run_of_zeros_len <= 0;
80
                        endcase
81
                else
82
                        run_of_zeros_len <= 0;
83
 
84
        always @ (posedge clk)
85
                if (reset_n == 0)
86
                        run_before <= 0;
87
                else if (cavlc_decoder_state == `run_before_LUT)
88
                        case (zerosLeft)
89
                                0:run_before <= 0;//special case added for "total_zeros==0"
90
                                1:run_before <= (BitStream_buffer_output[15] == 0)? 4'd1:4'd0;
91
                                2:if      (BitStream_buffer_output[15] == 1)        run_before <= 0;
92
                                  else if (BitStream_buffer_output[15:14] == 2'b01)     run_before <= 1;
93
                                  else                                              run_before <= 2;
94
                                3:case (BitStream_buffer_output[15:14])
95
                                        2'b00:run_before <= 3;
96
                                        2'b01:run_before <= 2;
97
                                        2'b10:run_before <= 1;
98
                                        2'b11:run_before <= 0;
99
                                  endcase
100
                                4:case (BitStream_buffer_output[15:14])
101
                                        2'b00:run_before <= (BitStream_buffer_output[13] == 1)? 4'd3:4'd4;
102
                                        2'b01:run_before <= 2;
103
                                        2'b10:run_before <= 1;
104
                                        2'b11:run_before <= 0;
105
                                  endcase
106
                                5:case (BitStream_buffer_output[15:14])
107
                                        2'b00:run_before <= (BitStream_buffer_output[13] == 1)? 4'd4:4'd5;
108
                                        2'b01:run_before <= (BitStream_buffer_output[13] == 1)? 4'd2:4'd3;
109
                                        2'b10:run_before <= 1;
110
                                        2'b11:run_before <= 0;
111
                                  endcase
112
                                6:casex (BitStream_buffer_output[15:13])
113
                                        3'b11x:run_before <= 0;
114
                                        3'b000:run_before <= 1;
115
                                        3'b001:run_before <= 2;
116
                                        3'b011:run_before <= 3;
117
                                        3'b010:run_before <= 4;
118
                                        3'b101:run_before <= 5;
119
                                        3'b100:run_before <= 6;
120
                                  endcase
121
                                default:
122
                                case (BitStream_buffer_output[15:13])
123
                                        3'b000:run_before <= run_of_zeros_len + 3;
124
                                        3'b111:run_before <= 0;
125
                                        3'b110:run_before <= 1;
126
                                        3'b101:run_before <= 2;
127
                                        3'b100:run_before <= 3;
128
                                        3'b011:run_before <= 4;
129
                                        3'b010:run_before <= 5;
130
                                        3'b001:run_before <= 6;
131
                                endcase
132
                        endcase
133
 
134
        always @ (cavlc_decoder_state or total_zeros or run_before or zerosLeft_reg or IsRunLoop)
135
                if (cavlc_decoder_state == `run_before_LUT)
136
                        zerosLeft <= (IsRunLoop == 0)? total_zeros:zerosLeft_reg;
137
                else if (cavlc_decoder_state == `RunOfZeros)
138
                        zerosLeft <= zerosLeft_reg - run_before;
139
                else
140
                        zerosLeft <= 0;
141
 
142
        always @ (posedge clk)
143
                if (reset_n == 0)
144
                        zerosLeft_reg <= 0;
145
                else if (cavlc_decoder_state == `run_before_LUT || cavlc_decoder_state == `RunOfZeros)
146
                        zerosLeft_reg <= zerosLeft;
147
 
148
        always @ (posedge clk)
149
                if (reset_n == 0)
150
                        begin
151
                                run_0  <= 0;     run_1  <= 0;     run_2  <= 0;     run_3  <= 0;
152
                                run_4  <= 0;     run_5  <= 0;     run_6  <= 0;     run_7  <= 0;
153
                                run_8  <= 0;     run_9  <= 0;     run_10 <= 0;     run_11 <= 0;
154
                                run_12 <= 0;     run_13 <= 0;     run_14 <= 0;     run_15 <= 0;
155
                        end
156
                //reset run0 ~ run15 for each 4x4 CAVLC as early as nAnB_decoding_s stage
157
                else if (cavlc_decoder_state == `nAnB_decoding_s)
158
                   begin
159
                                run_0  <= 0;     run_1  <= 0;     run_2  <= 0;     run_3  <= 0;
160
                                run_4  <= 0;     run_5  <= 0;     run_6  <= 0;     run_7  <= 0;
161
                                run_8  <= 0;     run_9  <= 0;     run_10 <= 0;     run_11 <= 0;
162
                                run_12 <= 0;     run_13 <= 0;     run_14 <= 0;     run_15 <= 0;
163
                        end
164
                else if (cavlc_decoder_state == `RunOfZeros)
165
                        begin
166
                                if (TotalCoeff == 1)
167
                                        run_0 <= total_zeros;
168
                                else if (total_zeros == 0)
169
                                        begin
170
                                                run_0  <= 0;     run_1  <= 0;     run_2  <= 0;     run_3  <= 0;
171
                                                run_4  <= 0;     run_5  <= 0;     run_6  <= 0;     run_7  <= 0;
172
                                                run_8  <= 0;     run_9  <= 0;     run_10 <= 0;     run_11 <= 0;
173
                                                run_12 <= 0;     run_13 <= 0;     run_14 <= 0;     run_15 <= 0;
174
                                        end
175
                                else if ({1'b0,i_run} == TotalCoeff - 2)
176
                                        case (i_run)
177
 
178
                                                1 :begin        run_1 <= run_before;    run_2 <= zerosLeft;     end
179
                                                2 :begin        run_2 <= run_before;    run_3 <= zerosLeft;     end
180
                                                3 :begin        run_3 <= run_before;    run_4 <= zerosLeft;     end
181
                                                4 :begin        run_4 <= run_before;    run_5 <= zerosLeft;     end
182
                                                5 :begin        run_5 <= run_before;    run_6 <= zerosLeft;     end
183
                                                6 :begin        run_6 <= run_before;    run_7 <= zerosLeft;     end
184
                                                7 :begin        run_7 <= run_before;    run_8 <= zerosLeft;     end
185
                                                8 :begin        run_8 <= run_before;    run_9 <= zerosLeft;     end
186
                                                9 :begin        run_9 <= run_before;    run_10<= zerosLeft;     end
187
                                                10:begin        run_10<= run_before;    run_11<= zerosLeft;     end
188
                                                11:begin        run_11<= run_before;    run_12<= zerosLeft;     end
189
                                                12:begin        run_12<= run_before;    run_13<= zerosLeft;     end
190
                                                13:begin        run_13<= run_before;    run_14<= zerosLeft;     end
191
                                        endcase
192
                                else
193
                                        case (i_run)
194
 
195
                                                1 :run_1 <= run_before;
196
                                                2 :run_2 <= run_before;
197
                                                3 :run_3 <= run_before;
198
                                                4 :run_4 <= run_before;
199
                                                5 :run_5 <= run_before;
200
                                                6 :run_6 <= run_before;
201
                                                7 :run_7 <= run_before;
202
                                                8 :run_8 <= run_before;
203
                                                9 :run_9 <= run_before;
204
                                                10:run_10<= run_before;
205
                                                11:run_11<= run_before;
206
                                                12:run_12<= run_before;
207
                                                13:run_13<= run_before;
208
                                        endcase
209
                        end
210
        always @ (cavlc_decoder_state or i_TotalCoeff or run_0 or run_1 or run_2 or run_3 or run_4 or
211
                run_5 or run_6 or run_7 or run_8 or run_9 or run_10 or run_11 or run_12 or run_13 or run_14)
212
                if (cavlc_decoder_state == `LevelRunCombination)
213
                        case (i_TotalCoeff)             //coeffNum = coeffNum + run[i_TotalCoeff-1] + 1;
214
 
215
                                1 :run <= run_1;
216
                                2 :run <= run_2;
217
                                3 :run <= run_3;
218
                                4 :run <= run_4;
219
                                5 :run <= run_5;
220
                                6 :run <= run_6;
221
                                7 :run <= run_7;
222
                                8 :run <= run_8;
223
                                9 :run <= run_9;
224
                                10:run <= run_10;
225
                                11:run <= run_11;
226
                                12:run <= run_12;
227
                                13:run <= run_13;
228
                                14:run <= run_14;
229
                                default:run <= 0;
230
                        endcase
231
                else
232
                        run <= 0;
233
 
234
        always @ (i_TotalCoeff or level_0 or level_1 or level_2 or level_3 or level_4 or level_5 or level_6 or
235
                level_7 or level_8 or level_9 or level_10 or level_11 or level_12 or level_13 or level_14 or level_15)
236
                case (i_TotalCoeff)
237
 
238
                        1 :level_output <= level_1;
239
                        2 :level_output <= level_2;
240
                        3 :level_output <= level_3;
241
                        4 :level_output <= level_4;
242
                        5 :level_output <= level_5;
243
                        6 :level_output <= level_6;
244
                        7 :level_output <= level_7;
245
                        8 :level_output <= level_8;
246
                        9 :level_output <= level_9;
247
                        10:level_output <= level_10;
248
                        11:level_output <= level_11;
249
                        12:level_output <= level_12;
250
                        13:level_output <= level_13;
251
                        14:level_output <= level_14;
252
                        15:level_output <= level_15;
253
                endcase
254
 
255
 
256
        always @ (posedge clk)
257
                if (reset_n == 0)
258
                        begin
259
                                coeffLevel_0  <= 0;      coeffLevel_1  <= 0;      coeffLevel_2  <= 0;      coeffLevel_3  <= 0;
260
                                coeffLevel_4  <= 0;      coeffLevel_5  <= 0;      coeffLevel_6  <= 0;      coeffLevel_7  <= 0;
261
                                coeffLevel_8  <= 0;      coeffLevel_9  <= 0;      coeffLevel_10 <= 0;      coeffLevel_11 <= 0;
262
                                coeffLevel_12 <= 0;      coeffLevel_13 <= 0;      coeffLevel_14 <= 0;      coeffLevel_15 <= 0;
263
                        end
264
                //Revise log: March 24,2006
265
                //change reset coeffLevel_0 ~ 14 at total_zeros_LUT stage
266
                //else if (cavlc_decoder_state == RunOfZeros &&         //reset coeffLevel_0 ~ 14 only at last RunOfZeros 
267
                //      (i_run == TotalCoeff - 1 || i_run == TotalCoeff - 2 || zerosLeft == 0)) 
268
                else if (cavlc_decoder_state == `total_zeros_LUT)
269
                        begin
270
                                coeffLevel_0  <= 0;      coeffLevel_1  <= 0;      coeffLevel_2  <= 0;      coeffLevel_3  <= 0;
271
                                coeffLevel_4  <= 0;      coeffLevel_5  <= 0;      coeffLevel_6  <= 0;      coeffLevel_7  <= 0;
272
                                coeffLevel_8  <= 0;      coeffLevel_9  <= 0;      coeffLevel_10 <= 0;      coeffLevel_11 <= 0;
273
                                coeffLevel_12 <= 0;      coeffLevel_13 <= 0;      coeffLevel_14 <= 0;      coeffLevel_15 <= 0;
274
                        end
275
                else if (cavlc_decoder_state == `LevelRunCombination)
276
                        begin
277
                                case (coeffNum)
278
 
279
                                        1 :coeffLevel_1 <= level_output;
280
                                        2 :coeffLevel_2 <= level_output;
281
                                        3 :coeffLevel_3 <= level_output;
282
                                        4 :coeffLevel_4 <= level_output;
283
                                        5 :coeffLevel_5 <= level_output;
284
                                        6 :coeffLevel_6 <= level_output;
285
                                        7 :coeffLevel_7 <= level_output;
286
                                        8 :coeffLevel_8 <= level_output;
287
                                        9 :coeffLevel_9 <= level_output;
288
                                        10:coeffLevel_10<= level_output;
289
                                        11:coeffLevel_11<= level_output;
290
                                        12:coeffLevel_12<= level_output;
291
                                        13:coeffLevel_13<= level_output;
292
                                        14:coeffLevel_14<= level_output;
293
                                        15:coeffLevel_15<= level_output;
294
                                endcase
295
                        end
296
        endmodule
297
 
298
 
299
 

powered by: WebSVN 2.1.0

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