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

Subversion Repositories cavlc

[/] [cavlc/] [trunk/] [rtl/] [cavlc_fsm.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 18:57        initial revision
2
 
3
`include "defines.v"
4
 
5
module cavlc_fsm
6
(
7
        clk,
8
        rst_n,
9
        ena,
10
        start,
11
        max_coeff_num,
12
        TotalCoeff,
13
        TotalCoeff_comb,
14
        TrailingOnes,
15
        TrailingOnes_comb,
16
        ZeroLeft,
17
        state,
18
        i,
19
        idle,
20
        valid
21
);
22
//------------------------
23
//ports
24
//------------------------
25
input clk;
26
input rst_n;
27
input ena;
28
input start;
29
 
30
input [4:0]      max_coeff_num;
31
input [4:0]      TotalCoeff;
32
input [4:0]      TotalCoeff_comb;
33
input [1:0]      TrailingOnes;
34
input [1:0]      TrailingOnes_comb;
35
input [3:0] ZeroLeft;
36
 
37
output [7:0] state;
38
output [3:0] i;
39
output idle;
40
output valid;
41
 
42
//------------------------
43
//FFs
44
//------------------------
45
reg [7:0] state;
46
reg [3:0] i;
47
reg     valid;
48
 
49
//------------------------
50
//state & i & valid
51
//------------------------
52
always @(posedge clk or negedge rst_n)
53
if (~rst_n) begin
54
        state   <= `cavlc_idle_s;
55
        i <= 0;
56
        valid <= 0;
57
end
58
else if (ena)
59
case(state)
60
        `cavlc_idle_s : begin
61
                if (start) begin
62
                        state <= `cavlc_read_total_coeffs_s;
63
                        valid <= 0;
64
                end
65
                else begin
66
                        state <= `cavlc_idle_s;
67
                end
68
        end
69
        `cavlc_read_total_coeffs_s : begin
70
                i <= TotalCoeff_comb -1;
71
                if (TrailingOnes_comb > 0 && TotalCoeff_comb > 0)
72
                        state <= `cavlc_read_t1s_flags_s;
73
                else if (TotalCoeff_comb > 0)
74
                        state <= `cavlc_read_level_prefix_s;
75
                else begin
76
                        state <= `cavlc_idle_s;
77
                        valid <= 1;
78
                end
79
        end
80
        `cavlc_read_t1s_flags_s : begin
81
                if (TrailingOnes == TotalCoeff)         //TotalCoeff should not be larger than max_coeff_num
82
                        state <= `cavlc_read_total_zeros_s;
83
                else begin
84
                        state <= `cavlc_read_level_prefix_s;
85
                        i <= i - TrailingOnes;
86
                end
87
        end
88
        `cavlc_read_level_prefix_s : begin
89
                state <= `cavlc_read_level_suffix_s;
90
        end
91
        `cavlc_read_level_suffix_s : begin
92
                state <= `cavlc_calc_level_s;
93
        end
94
        `cavlc_calc_level_s : begin
95
                if ( i == 0  && TotalCoeff < max_coeff_num)
96
                        state <= `cavlc_read_total_zeros_s;
97
                else if (i == 0) begin
98
                        state <= `cavlc_read_run_befores_s;
99
                        i <= TotalCoeff - 1;
100
                end
101
                else begin
102
                        state <= `cavlc_read_level_prefix_s;
103
                        i <= i - 1;
104
                end
105
        end
106
        `cavlc_read_total_zeros_s : begin
107
                state <= `cavlc_read_run_befores_s;
108
                i <= TotalCoeff - 1;
109
        end
110
        `cavlc_read_run_befores_s : begin
111
                if (i == 0 || ZeroLeft == 0) begin
112
                        state <= `cavlc_idle_s;
113
                        valid <= 1;
114
                end
115
                else begin
116
                        state <= `cavlc_read_run_befores_s;
117
                        i <= i - 1;
118
                end
119
        end
120
endcase
121
 
122
assign idle = state[`cavlc_idle_bit];
123
 
124
endmodule
125
 

powered by: WebSVN 2.1.0

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