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

Subversion Repositories cavlc

[/] [cavlc/] [trunk/] [rtl/] [cavlc_read_levels.v] - Diff between revs 6 and 7

Show entire file | Details | Blame | View Log

Rev 6 Rev 7
Line 1... Line 1...
 
//////////////////////////////////////////////////////////////////////
 
////                                                              ////
 
////  cavlc_read_levels                                           ////
 
////                                                              ////
 
////  Description                                                 ////
 
////      decode levels for coeffs                                ////
 
////                                                              ////
 
////  Author(s):                                                  ////
 
////      - bin qiu, qiubin@opencores.org                         ////
 
////                                                              ////
 
//////////////////////////////////////////////////////////////////////
 
////                                                              ////
 
//// Copyright (C) 2011 Authors and OPENCORES.ORG                 ////
 
////                                                              ////
 
//// This source file may be used and distributed without         ////
 
//// restriction provided that this copyright statement is not    ////
 
//// removed from the file and that any derivative work contains  ////
 
//// the original copyright notice and the associated disclaimer. ////
 
////                                                              ////
 
//// This source file is free software; you can redistribute it   ////
 
//// and/or modify it under the terms of the GNU Lesser General   ////
 
//// Public License as published by the Free Software Foundation; ////
 
//// either version 2.1 of the License, or (at your option) any   ////
 
//// later version.                                               ////
 
////                                                              ////
 
//// This source is distributed in the hope that it will be       ////
 
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
 
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
 
//// PURPOSE.  See the GNU Lesser General Public License for more ////
 
//// details.                                                     ////
 
////                                                              ////
 
//// You should have received a copy of the GNU Lesser General    ////
 
//// Public License along with this source; if not, download it   ////
 
//// from http://www.opencores.org/lgpl.shtml                     ////
 
////                                                              ////
 
//////////////////////////////////////////////////////////////////////
 
 
 
 
//2011-8-6      initiial revision
//2011-8-6      initiial revision
//2011-8-19     reverse the order of level
//2011-8-19     reverse the order of level
 
 
//  include TrailingOnes
//  include TrailingOnes
 
 
Line 15... Line 53...
        calc_sel,
        calc_sel,
        TrailingOnes,
        TrailingOnes,
        TotalCoeff,
        TotalCoeff,
        rbsp,
        rbsp,
        i,
        i,
        level_0, level_1, level_2, level_3, level_4, level_5, level_6, level_7,
    level_0,
        level_8, level_9, level_10, level_11, level_12, level_13, level_14, level_15,
    level_1,
 
    level_2,
 
    level_3,
 
    level_4,
 
    level_5,
 
    level_6,
 
    level_7,
 
    level_8,
 
    level_9,
 
    level_10,
 
    level_11,
 
    level_12,
 
    level_13,
 
    level_14,
 
    level_15,
        len_comb
        len_comb
);
);
//------------------------
//------------------------
// ports
// ports
//------------------------
//------------------------
Line 36... Line 88...
input   [1:0]    TrailingOnes;
input   [1:0]    TrailingOnes;
input   [4:0]    TotalCoeff;
input   [4:0]    TotalCoeff;
input   [0:15]   rbsp;
input   [0:15]   rbsp;
input   [3:0]    i;
input   [3:0]    i;
 
 
output  [8:0]    level_0, level_1, level_2, level_3, level_4, level_5, level_6, level_7;
output  [8:0]   level_0;
output  [8:0]    level_8, level_9, level_10, level_11, level_12, level_13, level_14, level_15;
output  [8:0]   level_1;
 
output  [8:0]   level_2;
 
output  [8:0]   level_3;
 
output  [8:0]   level_4;
 
output  [8:0]   level_5;
 
output  [8:0]   level_6;
 
output  [8:0]   level_7;
 
output  [8:0]   level_8;
 
output  [8:0]   level_9;
 
output  [8:0]   level_10;
 
output  [8:0]   level_11;
 
output  [8:0]   level_12;
 
output  [8:0]   level_13;
 
output  [8:0]   level_14;
 
output  [8:0]   level_15;
 
 
output  [4:0]    len_comb;
output  [4:0]    len_comb;
 
 
//------------------------
//------------------------
//  regs
//  regs
//------------------------
//------------------------
reg             [0:15]   rbsp_prefix;            //for level_prefix_comb
reg     [0:15]  rbsp_internal;        // reduce toggle rate
reg             [3:0]    level_prefix_comb;
reg             [3:0]    level_prefix_comb;
reg             [8:0]    level_suffix;
reg             [8:0]    level_suffix;
reg             [4:0]    len_comb;
reg             [4:0]    len_comb;
 
 
//------------------------
//------------------------
Line 62... Line 129...
reg             [8:0]    level_8, level_9, level_10, level_11, level_12, level_13, level_14, level_15;
reg             [8:0]    level_8, level_9, level_10, level_11, level_12, level_13, level_14, level_15;
 
 
//------------------------
//------------------------
// level_prefix_comb
// level_prefix_comb
//------------------------
//------------------------
wire    level_prefix_refresh;
always @(*)
assign level_prefix_refresh = (prefix_sel && ena);
if ((t1s_sel || prefix_sel || suffix_sel)&& ena)
 
    rbsp_internal <= rbsp;
always @(level_prefix_refresh or rbsp)
 
if (level_prefix_refresh)
 
        rbsp_prefix <= rbsp;
 
else
else
        rbsp_prefix <= 'hffff;
    rbsp_internal <= 'hffff;
 
 
always @(*)
always @(*)
if (rbsp_prefix[0])              level_prefix_comb <= 0;
if (rbsp_internal[0])         level_prefix_comb <= 0;
else if (rbsp_prefix[1])        level_prefix_comb <= 1;
else if (rbsp_internal[1])    level_prefix_comb <= 1;
else if (rbsp_prefix[2])        level_prefix_comb <= 2;
else if (rbsp_internal[2])    level_prefix_comb <= 2;
else if (rbsp_prefix[3])        level_prefix_comb <= 3;
else if (rbsp_internal[3])    level_prefix_comb <= 3;
else if (rbsp_prefix[4])        level_prefix_comb <= 4;
else if (rbsp_internal[4])    level_prefix_comb <= 4;
else if (rbsp_prefix[5])        level_prefix_comb <= 5;
else if (rbsp_internal[5])    level_prefix_comb <= 5;
else if (rbsp_prefix[6])        level_prefix_comb <= 6;
else if (rbsp_internal[6])    level_prefix_comb <= 6;
else if (rbsp_prefix[7])        level_prefix_comb <= 7;
else if (rbsp_internal[7])    level_prefix_comb <= 7;
else if (rbsp_prefix[8])        level_prefix_comb <= 8;
else if (rbsp_internal[8])    level_prefix_comb <= 8;
else if (rbsp_prefix[9])        level_prefix_comb <= 9;
else if (rbsp_internal[9])    level_prefix_comb <= 9;
else if (rbsp_prefix[10])       level_prefix_comb <= 10;
else if (rbsp_internal[10])   level_prefix_comb <= 10;
else if (rbsp_prefix[11])       level_prefix_comb <= 11;
else if (rbsp_internal[11])   level_prefix_comb <= 11;
else if (rbsp_prefix[12])       level_prefix_comb <= 12;
else if (rbsp_internal[12])   level_prefix_comb <= 12;
else if (rbsp_prefix[13])       level_prefix_comb <= 13;
else if (rbsp_internal[13])   level_prefix_comb <= 13;
else if (rbsp_prefix[14])       level_prefix_comb <= 14;
else if (rbsp_internal[14])   level_prefix_comb <= 14;
else if (rbsp_prefix[15])       level_prefix_comb <= 15;
else if (rbsp_internal[15])   level_prefix_comb <= 15;
else                                            level_prefix_comb <= 'bx;
else                                            level_prefix_comb <= 'bx;
 
 
 
 
//------------------------
//------------------------
// level_prefix
// level_prefix
//------------------------
//------------------------
always @(posedge clk or negedge rst_n)
always @(posedge clk or negedge rst_n)
if (~rst_n)
if (!rst_n)
        level_prefix <= 0;
        level_prefix <= 0;
else if (level_prefix_refresh) begin
else if (prefix_sel && ena)
        level_prefix <= level_prefix_comb;
        level_prefix <= level_prefix_comb;
end
 
 
 
//------------------------
//------------------------
// suffixLength
// suffixLength
//------------------------
//------------------------
wire first_level;
wire first_level;
assign first_level = (i == TotalCoeff - TrailingOnes - 1);
assign first_level = (i == TotalCoeff - TrailingOnes - 1);
 
 
wire suffixLength_refresh;
 
assign suffixLength_refresh = prefix_sel && ena;
 
 
 
always @(posedge clk or negedge rst_n)
always @(posedge clk or negedge rst_n)
if (~rst_n) begin
if (!rst_n)
        suffixLength <= 0;
        suffixLength <= 0;
end
else if (prefix_sel && ena) begin
else if (suffixLength_refresh) begin
 
        if (TotalCoeff > 10 && TrailingOnes < 3 && first_level )        //initialize suffixLength before proceeding first level_suffix
        if (TotalCoeff > 10 && TrailingOnes < 3 && first_level )        //initialize suffixLength before proceeding first level_suffix
                suffixLength <= 1;
                suffixLength <= 1;
        else if (first_level)
        else if (first_level)
                suffixLength <= 0;
                suffixLength <= 0;
        else if (suffixLength == 0 && level_abs > 2'd3)
        else if (suffixLength == 0 && level_abs > 2'd3)
Line 131... Line 190...
 
 
 
 
//------------------------
//------------------------
// level_suffix
// level_suffix
//------------------------
//------------------------
wire level_suffix_refresh;
 
assign level_suffix_refresh = suffix_sel && ena;
 
 
 
always @(*)
always @(*)
if (level_suffix_refresh) begin
if (suffixLength > 0 && level_prefix <= 14)
        if (suffixLength > 0 && level_prefix <= 14) begin
    level_suffix <= {3'b0, rbsp_internal[0:5] >> (3'd6 - suffixLength)};
                level_suffix <= {3'b0, rbsp[0:5] >> (3'd6 - suffixLength)};
else if (level_prefix == 14)   //level_prefix == 14 && suffixLength == 0
        end
    level_suffix <= {3'b0, rbsp_internal[0:3] };
        else if (level_prefix == 14) begin      //level_prefix == 14 && suffixLength == 0
else if (level_prefix == 15)
                level_suffix <= {3'b0, rbsp[0:3] };
    level_suffix <= rbsp_internal[3:11];
        end
else
        else if (level_prefix == 15) begin
 
                level_suffix <= rbsp[3:11];
 
        end
 
        else begin
 
                level_suffix <= 0;
 
        end
 
end
 
else begin
 
        level_suffix <= 0;
        level_suffix <= 0;
end
 
 
 
//------------------------
//------------------------
// level_code_tmp
// level_code_tmp
//------------------------
//------------------------
always @(posedge clk or negedge rst_n)
always @(posedge clk or negedge rst_n)
if (~rst_n) begin
if (!rst_n) begin
        level_code_tmp <=  0;
        level_code_tmp <=  0;
end
end
else if (level_suffix_refresh) begin
else if (suffix_sel && ena) begin
        level_code_tmp <= (level_prefix << suffixLength) + level_suffix +
        level_code_tmp <= (level_prefix << suffixLength) + level_suffix +
        ((suffixLength == 0 && level_prefix == 15) ? 4'd15 : 0);
        ((suffixLength == 0 && level_prefix == 15) ? 4'd15 : 0);
end
end
 
 
 
 
Line 190... Line 237...
//------------------------
//------------------------
wire level_abs_refresh;
wire level_abs_refresh;
assign level_abs_refresh = calc_sel && ena;
assign level_abs_refresh = calc_sel && ena;
 
 
always @(posedge clk or negedge rst_n)
always @(posedge clk or negedge rst_n)
if (~rst_n) begin
if (!rst_n) begin
        level_abs <= 0;
        level_abs <= 0;
end
end
else if (level_abs_refresh) begin
else if (level_abs_refresh) begin
        level_abs <= level[8] ? -level : level;
        level_abs <= level[8] ? -level : level;
end
end
Line 209... Line 256...
        level_8 <= 0;    level_9 <= 0;    level_10<= 0;    level_11<= 0;
        level_8 <= 0;    level_9 <= 0;    level_10<= 0;    level_11<= 0;
        level_12<= 0;    level_13<= 0;    level_14<= 0;    level_15<= 0;
        level_12<= 0;    level_13<= 0;    level_14<= 0;    level_15<= 0;
end
end
else if (t1s_sel && ena)
else if (t1s_sel && ena)
        case (i)
        case (i)
        0 : level_0 <= rbsp[0]? -1 : 1;
    0 : level_0 <= rbsp_internal[0]? -1 : 1;
        1 : begin
        1 : begin
                        level_1 <= rbsp[0]? -1 : 1;
            level_1 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_0 <= rbsp[1]? -1 : 1;
                level_0 <= rbsp_internal[1]? -1 : 1;
                end
                end
        2 : begin
        2 : begin
                        level_2 <= rbsp[0]? -1 : 1;
            level_2 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_1 <= rbsp[1]? -1 : 1;
                level_1 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_0 <= rbsp[2]? -1 : 1;
                level_0 <= rbsp_internal[2]? -1 : 1;
                end
                end
        3 : begin
        3 : begin
                        level_3 <= rbsp[0]? -1 : 1;
            level_3 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_2 <= rbsp[1]? -1 : 1;
                level_2 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_1 <= rbsp[2]? -1 : 1;
                level_1 <= rbsp_internal[2]? -1 : 1;
                end
                end
        4 : begin
        4 : begin
                        level_4 <= rbsp[0]? -1 : 1;
            level_4 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_3 <= rbsp[1]? -1 : 1;
                level_3 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_2 <= rbsp[2]? -1 : 1;
                level_2 <= rbsp_internal[2]? -1 : 1;
                end
                end
        5 : begin
        5 : begin
                        level_5 <= rbsp[0]? -1 : 1;
            level_5 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_4 <= rbsp[1]? -1 : 1;
                level_4 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_3 <= rbsp[2]? -1 : 1;
                level_3 <= rbsp_internal[2]? -1 : 1;
                end
                end
        6 : begin
        6 : begin
                        level_6 <= rbsp[0]? -1 : 1;
            level_6 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_5 <= rbsp[1]? -1 : 1;
                level_5 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_4 <= rbsp[2]? -1 : 1;
                level_4 <= rbsp_internal[2]? -1 : 1;
                end
                end
        7 : begin
        7 : begin
                        level_7 <= rbsp[0]? -1 : 1;
            level_7 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_6 <= rbsp[1]? -1 : 1;
                level_6 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_5 <= rbsp[2]? -1 : 1;
                level_5 <= rbsp_internal[2]? -1 : 1;
                end
                end
        8 : begin
        8 : begin
                        level_8 <= rbsp[0]? -1 : 1;
            level_8 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_7 <= rbsp[1]? -1 : 1;
                level_7 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_6 <= rbsp[2]? -1 : 1;
                level_6 <= rbsp_internal[2]? -1 : 1;
                end
                end
        9 : begin
        9 : begin
                        level_9 <= rbsp[0]? -1 : 1;
            level_9 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_8 <= rbsp[1]? -1 : 1;
                level_8 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_7 <= rbsp[2]? -1 : 1;
                level_7 <= rbsp_internal[2]? -1 : 1;
                end
                end
        10: begin
        10: begin
                        level_10 <= rbsp[0]? -1 : 1;
            level_10 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_9 <= rbsp[1]? -1 : 1;
                level_9 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_8 <= rbsp[2]? -1 : 1;
                level_8 <= rbsp_internal[2]? -1 : 1;
                end
                end
        11: begin
        11: begin
                        level_11 <= rbsp[0]? -1 : 1;
            level_11 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_10 <= rbsp[1]? -1 : 1;
                level_10 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_9 <= rbsp[2]? -1 : 1;
                level_9 <= rbsp_internal[2]? -1 : 1;
                end
                end
        12: begin
        12: begin
                        level_12 <= rbsp[0]? -1 : 1;
            level_12 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_11 <= rbsp[1]? -1 : 1;
                level_11 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_10 <= rbsp[2]? -1 : 1;
                level_10 <= rbsp_internal[2]? -1 : 1;
                end
                end
        13: begin
        13: begin
                        level_13 <= rbsp[0]? -1 : 1;
            level_13 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_12 <= rbsp[1]? -1 : 1;
                level_12 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_11 <= rbsp[2]? -1 : 1;
                level_11 <= rbsp_internal[2]? -1 : 1;
                end
                end
        14: begin
        14: begin
                        level_14 <= rbsp[0]? -1 : 1;
            level_14 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_13 <= rbsp[1]? -1 : 1;
                level_13 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_12 <= rbsp[2]? -1 : 1;
                level_12 <= rbsp_internal[2]? -1 : 1;
                end
                end
        15: begin
        15: begin
                        level_15 <= rbsp[0]? -1 : 1;
            level_15 <= rbsp_internal[0]? -1 : 1;
                        if (TrailingOnes[1])
                        if (TrailingOnes[1])
                                level_14 <= rbsp[1]? -1 : 1;
                level_14 <= rbsp_internal[1]? -1 : 1;
                        if (TrailingOnes == 3)
                        if (TrailingOnes == 3)
                                level_13 <= rbsp[2]? -1 : 1;
                level_13 <= rbsp_internal[2]? -1 : 1;
                end
                end
endcase
endcase
else if (calc_sel && ena)
else if (calc_sel && ena)
case (i)
case (i)
        0 :level_0 <= level;
        0 :level_0 <= level;

powered by: WebSVN 2.1.0

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