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

Subversion Repositories cavlc

[/] [cavlc/] [trunk/] [rtl/] [cavlc_read_run_befores.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-16 initiial revision
2
 
3
`include "defines.v"
4
 
5
module cavlc_read_run_befores(
6
        clk,
7
        rst_n,
8
        ena,
9
        sel,
10
        clr,
11
        ZeroLeft_init,
12
 
13
        rbsp,
14
        i,
15
        TotalZeros_comb,
16
 
17
        level_0,
18
        level_1,
19
        level_2,
20
        level_3,
21
        level_4,
22
        level_5,
23
        level_6,
24
        level_7,
25
        level_8,
26
        level_9,
27
        level_10,
28
        level_11,
29
        level_12,
30
        level_13,
31
        level_14,
32
        level_15,
33
 
34
        coeff_0,
35
        coeff_1,
36
        coeff_2,
37
        coeff_3,
38
        coeff_4,
39
        coeff_5,
40
        coeff_6,
41
        coeff_7,
42
        coeff_8,
43
        coeff_9,
44
        coeff_10,
45
        coeff_11,
46
        coeff_12,
47
        coeff_13,
48
        coeff_14,
49
        coeff_15,
50
        ZeroLeft,
51
        len_comb
52
);
53
//----------------------
54
//ports
55
//----------------------
56
input   clk;
57
input   rst_n;
58
input   ena;
59
input   sel;
60
input   clr;
61
input   ZeroLeft_init;
62
 
63
input   [0:10]   rbsp;
64
input   [3:0]    i;                      //range from TotalCoeff-1 to 0
65
input   [3:0]    TotalZeros_comb;
66
 
67
input   [8:0]    level_0;
68
input   [8:0]    level_1;
69
input   [8:0]    level_2;
70
input   [8:0]    level_3;
71
input   [8:0]    level_4;
72
input   [8:0]    level_5;
73
input   [8:0]    level_6;
74
input   [8:0]    level_7;
75
input   [8:0]    level_8;
76
input   [8:0]    level_9;
77
input   [8:0]    level_10;
78
input   [8:0]    level_11;
79
input   [8:0]    level_12;
80
input   [8:0]    level_13;
81
input   [8:0]    level_14;
82
input   [8:0]    level_15;
83
 
84
output  [8:0]    coeff_0;
85
output  [8:0]    coeff_1;
86
output  [8:0]    coeff_2;
87
output  [8:0]    coeff_3;
88
output  [8:0]    coeff_4;
89
output  [8:0]    coeff_5;
90
output  [8:0]    coeff_6;
91
output  [8:0]    coeff_7;
92
output  [8:0]    coeff_8;
93
output  [8:0]    coeff_9;
94
output  [8:0]    coeff_10;
95
output  [8:0]    coeff_11;
96
output  [8:0]    coeff_12;
97
output  [8:0]    coeff_13;
98
output  [8:0]    coeff_14;
99
output  [8:0]    coeff_15;
100
 
101
output  [3:0]    ZeroLeft;
102
 
103
output  [3:0]    len_comb;
104
 
105
//----------------------
106
//regs
107
//----------------------
108
reg             [3:0]    run;
109
reg             [3:0]    len;
110
reg             [8:0]    coeff;
111
 
112
 
113
reg             [3:0]    len_comb;
114
 
115
//----------------------
116
//FFs
117
//----------------------
118
reg             [3:0]    ZeroLeft;
119
 
120
reg     [8:0]    coeff_0;
121
reg     [8:0]    coeff_1;
122
reg     [8:0]    coeff_2;
123
reg     [8:0]    coeff_3;
124
reg     [8:0]    coeff_4;
125
reg     [8:0]    coeff_5;
126
reg     [8:0]    coeff_6;
127
reg     [8:0]    coeff_7;
128
reg     [8:0]    coeff_8;
129
reg     [8:0]    coeff_9;
130
reg     [8:0]    coeff_10;
131
reg     [8:0]    coeff_11;
132
reg     [8:0]    coeff_12;
133
reg     [8:0]    coeff_13;
134
reg     [8:0]    coeff_14;
135
reg     [8:0]    coeff_15;
136
 
137
//----------------------
138
//run & len
139
//----------------------
140
always @(rbsp or ZeroLeft or ena or sel)
141
if (ena && sel)
142
case(ZeroLeft)
143
 
144
        1 : begin len <= 1; run <= rbsp[0]? 0:1; end
145
        2 : begin if (rbsp[0]) begin
146
                        run <= 0;
147
                        len <= 1;
148
                end
149
                else if (rbsp[1]) begin
150
                        run <= 1;
151
                        len <= 2;
152
                end
153
                else begin
154
                        run <= 2;
155
                        len <= 2;
156
                end
157
        end
158
        3 : begin
159
                run <= 3 - rbsp[0:1];
160
                len <= 2;
161
        end
162
        4 : begin
163
                if (rbsp[0:1] != 0) begin
164
                        run <= 3 - rbsp[0:1];
165
                        len <= 2;
166
                end
167
                else begin
168
                        run <= rbsp[2]? 3:4;
169
                        len <= 3;
170
                end
171
        end
172
        5 : begin
173
                if (rbsp[0]) begin
174
                        run <= rbsp[1]? 0:1;
175
                        len <= 2;
176
                end
177
                else if (rbsp[1]) begin
178
                        run <= rbsp[2]? 2:3;
179
                        len <= 3;
180
                end
181
                else begin
182
                        run <= rbsp[2]? 4:5;
183
                        len <= 3;
184
                end
185
        end
186
        6 : begin
187
                if (rbsp[0:1] == 2'b11) begin
188
                        run <= 0;
189
                        len <= 2;
190
                end
191
                else begin
192
                        len <= 3;
193
                        case(rbsp[0:2])
194
                                3'b000 : run <= 1;
195
                                3'b001 : run <= 2;
196
                                3'b011 : run <= 3;
197
                                3'b010 : run <= 4;
198
                                3'b101 : run <= 5;
199
                                default: run <= 6;
200
                        endcase
201
                end
202
        end
203
        default : begin
204
                if (rbsp[0:2] != 0) begin
205
                        run <= 7 - rbsp[0:2];
206
                        len <= 3;
207
                end
208
                else begin
209
                        case (1'b1)
210
                                rbsp[3] : begin run <= 7;       len <= 4; end
211
                                rbsp[4] : begin run <= 8;       len <= 5; end
212
                                rbsp[5] : begin run <= 9;       len <= 6; end
213
                                rbsp[6] : begin run <= 10;      len <= 7; end
214
                                rbsp[7] : begin run <= 11;      len <= 8; end
215
                                rbsp[8] : begin run <= 12;      len <= 9; end
216
                                rbsp[9] : begin run <= 13;      len <= 10;end
217
                                rbsp[10]: begin run <= 14;      len <= 11;end
218
                                default : begin run <= 'bx;     len <='bx;end
219
                        endcase
220
                end
221
        end
222
endcase
223
else begin
224
        len <= 0;
225
        run <= 0;
226
end
227
 
228
//----------------------
229
//len_comb
230
//----------------------
231
always @(*)
232
if (i >  0)
233
        len_comb <= len;
234
else
235
        len_comb <= 0;
236
 
237
 
238
//----------------------
239
//ZeroLeft
240
//----------------------
241
always @(posedge clk or negedge rst_n)
242
if (!rst_n)
243
        ZeroLeft <= 0;
244
else if (ena && clr)    //in case TotalCoeff >= max_coeff_num
245
        ZeroLeft <= 0;
246
else if (ena && ZeroLeft_init)
247
        ZeroLeft <= TotalZeros_comb;
248
else if (ena && sel )//if ZeroLeft == 0, run will be 0
249
        ZeroLeft <= ZeroLeft - run;
250
 
251
//----------------------
252
//coeff
253
//----------------------
254
always @(*)
255
if (ena && sel)
256
case (i)
257
 
258
        1 :coeff <= level_1;
259
        2 :coeff <= level_2;
260
        3 :coeff <= level_3;
261
        4 :coeff <= level_4;
262
        5 :coeff <= level_5;
263
        6 :coeff <= level_6;
264
        7 :coeff <= level_7;
265
        8 :coeff <= level_8;
266
        9 :coeff <= level_9;
267
        10:coeff <= level_10;
268
        11:coeff <= level_11;
269
        12:coeff <= level_12;
270
        13:coeff <= level_13;
271
        14:coeff <= level_14;
272
        15:coeff <= level_15;
273
endcase
274
else
275
        coeff <= 0;
276
 
277
//----------------------
278
//coeff_0 to coeff_15
279
//----------------------
280
always @(posedge clk or negedge rst_n)
281
if (!rst_n) begin
282
        coeff_0 <= 0;    coeff_1 <= 0;    coeff_2 <= 0;    coeff_3 <= 0;
283
        coeff_4 <= 0;    coeff_5 <= 0;    coeff_6 <= 0;    coeff_7 <= 0;
284
        coeff_8 <= 0;    coeff_9 <= 0;    coeff_10<= 0;    coeff_11<= 0;
285
        coeff_12<= 0;    coeff_13<= 0;    coeff_14<= 0;    coeff_15<= 0;
286
end
287
else if (ena && clr) begin
288
        coeff_0 <= 0;    coeff_1 <= 0;    coeff_2 <= 0;    coeff_3 <= 0;
289
        coeff_4 <= 0;    coeff_5 <= 0;    coeff_6 <= 0;    coeff_7 <= 0;
290
        coeff_8 <= 0;    coeff_9 <= 0;    coeff_10<= 0;    coeff_11<= 0;
291
        coeff_12<= 0;    coeff_13<= 0;    coeff_14<= 0;    coeff_15<= 0;
292
end
293
else if (ena && sel && ZeroLeft > 0)
294
case (ZeroLeft+i)
295
        1 :coeff_1      <= coeff;
296
        2 :coeff_2      <= coeff;
297
        3 :coeff_3      <= coeff;
298
        4 :coeff_4      <= coeff;
299
        5 :coeff_5      <= coeff;
300
        6 :coeff_6      <= coeff;
301
        7 :coeff_7      <= coeff;
302
        8 :coeff_8      <= coeff;
303
        9 :coeff_9      <= coeff;
304
        10:coeff_10     <= coeff;
305
        11:coeff_11     <= coeff;
306
        12:coeff_12     <= coeff;
307
        13:coeff_13     <= coeff;
308
        14:coeff_14     <= coeff;
309
        default:
310
        coeff_15        <= coeff;
311
endcase
312
else if (ena && sel) begin
313
        if (i >= 0)      coeff_0  <= level_0;
314
        if (i >= 1)     coeff_1  <= level_1;
315
        if (i >= 2) coeff_2  <= level_2;
316
        if (i >= 3) coeff_3  <= level_3;
317
        if (i >= 4) coeff_4  <= level_4;
318
        if (i >= 5) coeff_5  <= level_5;
319
        if (i >= 6) coeff_6  <= level_6;
320
        if (i >= 7) coeff_7  <= level_7;
321
        if (i >= 8) coeff_8  <= level_8;
322
        if (i >= 9) coeff_9  <= level_9;
323
        if (i >= 10)coeff_10 <= level_10;
324
        if (i >= 11)coeff_11 <= level_11;
325
        if (i >= 12)coeff_12 <= level_12;
326
        if (i >= 13)coeff_13 <= level_13;
327
        if (i >= 14)coeff_14 <= level_14;
328
        if (i == 15)coeff_15 <= level_15;
329
end
330
endmodule

powered by: WebSVN 2.1.0

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