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

Subversion Repositories nova

[/] [nova/] [tags/] [Start/] [src/] [syntax_decoding.v] - Diff between revs 3 and 11

Only display areas with differences | Details | Blame | View Log

Rev 3 Rev 11
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// Design    : nova
// Design    : nova
// Author(s) : Ke Xu
// Author(s) : Ke Xu
// Email           : eexuke@yahoo.com
// Email           : eexuke@yahoo.com
// File      : syntax_decoding.v
// File      : syntax_decoding.v
// Generated : May 23, 2005
// Generated : May 23, 2005
// Copyright (C) 2008 Ke Xu                
// Copyright (C) 2008 Ke Xu                
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// Description 
// Description 
// Decoding each sytax inside the bitstream
// Decoding each sytax inside the bitstream
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
 
 
// synopsys translate_off
// synopsys translate_off
`include "timescale.v"
`include "timescale.v"
// synopsys translate_on
// synopsys translate_on
`include "nova_defines.v"
`include "nova_defines.v"
 
 
module syntax_decoding (clk,reset_n,mb_num_h,mb_num_v,end_of_MB_DEC,pin_disable_DF,
module syntax_decoding (clk,reset_n,mb_num_h,mb_num_v,end_of_MB_DEC,pin_disable_DF,
        parser_state,nal_unit_state,seq_parameter_set_state,pic_parameter_set_state,
        parser_state,nal_unit_state,seq_parameter_set_state,pic_parameter_set_state,
        slice_header_state,slice_data_state,mb_pred_state,sub_mb_pred_state,
        slice_header_state,slice_data_state,mb_pred_state,sub_mb_pred_state,
        exp_golomb_decoding_output,BitStream_buffer_output,dependent_variable_decoding_output,mbPartIdx,
        exp_golomb_decoding_output,BitStream_buffer_output,dependent_variable_decoding_output,mbPartIdx,
 
 
        nal_unit_type,start_code_prefix_found,
        nal_unit_type,start_code_prefix_found,
        deblocking_filter_control_present_flag,disable_deblocking_filter_idc,disable_DF,
        deblocking_filter_control_present_flag,disable_deblocking_filter_idc,disable_DF,
        slice_alpha_c0_offset_div2,slice_beta_offset_div2,
        slice_alpha_c0_offset_div2,slice_beta_offset_div2,
        mb_skip_run,NumMbPart,NumSubMbPart,
        mb_skip_run,NumMbPart,NumSubMbPart,
        MBTypeGen_mbAddrA,MBTypeGen_mbAddrD,MBTypeGen_mbAddrB_reg,
        MBTypeGen_mbAddrA,MBTypeGen_mbAddrD,MBTypeGen_mbAddrB_reg,
        log2_max_frame_num_minus4,log2_max_pic_order_cnt_lsb_minus4,constrained_intra_pred_flag,
        log2_max_frame_num_minus4,log2_max_pic_order_cnt_lsb_minus4,constrained_intra_pred_flag,
        num_ref_idx_active_override_flag,num_ref_idx_l0_active_minus1,
        num_ref_idx_active_override_flag,num_ref_idx_l0_active_minus1,
        slice_type,mb_type,mb_type_general,sub_mb_type,Intra16x16_predmode,intra_chroma_pred_mode,
        slice_type,mb_type,mb_type_general,sub_mb_type,Intra16x16_predmode,intra_chroma_pred_mode,
        pic_init_qp_minus26,chroma_qp_index_offset,
        pic_init_qp_minus26,chroma_qp_index_offset,
        rem_intra4x4_pred_mode,prev_intra4x4_pred_mode_flag,mvd,mv_below8x8);
        rem_intra4x4_pred_mode,prev_intra4x4_pred_mode_flag,mvd,mv_below8x8);
        input clk,reset_n;
        input clk,reset_n;
        input [3:0] mb_num_h,mb_num_v;
        input [3:0] mb_num_h,mb_num_v;
        input end_of_MB_DEC;
        input end_of_MB_DEC;
        input pin_disable_DF;
        input pin_disable_DF;
        input [1:0] parser_state;
        input [1:0] parser_state;
        input [2:0] nal_unit_state;
        input [2:0] nal_unit_state;
        input [3:0] seq_parameter_set_state;
        input [3:0] seq_parameter_set_state;
        input [3:0] pic_parameter_set_state;
        input [3:0] pic_parameter_set_state;
        input [3:0] slice_header_state;
        input [3:0] slice_header_state;
        input [3:0] slice_data_state;
        input [3:0] slice_data_state;
        input [2:0] mb_pred_state;
        input [2:0] mb_pred_state;
        input [1:0] sub_mb_pred_state;
        input [1:0] sub_mb_pred_state;
        input [15:0] BitStream_buffer_output;
        input [15:0] BitStream_buffer_output;
        input [7:0] exp_golomb_decoding_output;
        input [7:0] exp_golomb_decoding_output;
        input [9:0] dependent_variable_decoding_output;
        input [9:0] dependent_variable_decoding_output;
        input [1:0] mbPartIdx;
        input [1:0] mbPartIdx;
 
 
        output [4:0] nal_unit_type;
        output [4:0] nal_unit_type;
        output start_code_prefix_found;
        output start_code_prefix_found;
        output deblocking_filter_control_present_flag;
        output deblocking_filter_control_present_flag;
        output [1:0] disable_deblocking_filter_idc;
        output [1:0] disable_deblocking_filter_idc;
        output disable_DF;
        output disable_DF;
        output [3:0] slice_alpha_c0_offset_div2;
        output [3:0] slice_alpha_c0_offset_div2;
        output [3:0] slice_beta_offset_div2;
        output [3:0] slice_beta_offset_div2;
        output [6:0] mb_skip_run;
        output [6:0] mb_skip_run;
        output [2:0] NumMbPart;
        output [2:0] NumMbPart;
        output [2:0] NumSubMbPart;
        output [2:0] NumSubMbPart;
        output [1:0] MBTypeGen_mbAddrA;
        output [1:0] MBTypeGen_mbAddrA;
        output MBTypeGen_mbAddrD;
        output MBTypeGen_mbAddrD;
        output [21:0] MBTypeGen_mbAddrB_reg;
        output [21:0] MBTypeGen_mbAddrB_reg;
        output [3:0] log2_max_frame_num_minus4;
        output [3:0] log2_max_frame_num_minus4;
        output [3:0] log2_max_pic_order_cnt_lsb_minus4;
        output [3:0] log2_max_pic_order_cnt_lsb_minus4;
        output constrained_intra_pred_flag;
        output constrained_intra_pred_flag;
        output num_ref_idx_active_override_flag;
        output num_ref_idx_active_override_flag;
        output [2:0] num_ref_idx_l0_active_minus1;
        output [2:0] num_ref_idx_l0_active_minus1;
        output [2:0] slice_type;
        output [2:0] slice_type;
        output [4:0] mb_type;
        output [4:0] mb_type;
        output [3:0] mb_type_general;
        output [3:0] mb_type_general;
        output [1:0] Intra16x16_predmode;
        output [1:0] Intra16x16_predmode;
        output [1:0] intra_chroma_pred_mode;
        output [1:0] intra_chroma_pred_mode;
        output [1:0] sub_mb_type;
        output [1:0] sub_mb_type;
        output [5:0] pic_init_qp_minus26;
        output [5:0] pic_init_qp_minus26;
        output [4:0] chroma_qp_index_offset;
        output [4:0] chroma_qp_index_offset;
        output [2:0] rem_intra4x4_pred_mode;
        output [2:0] rem_intra4x4_pred_mode;
        output prev_intra4x4_pred_mode_flag;
        output prev_intra4x4_pred_mode_flag;
        output [7:0] mvd;
        output [7:0] mvd;
        output [3:0] mv_below8x8;
        output [3:0] mv_below8x8;
        //--------------------------
        //--------------------------
        //start_code_prefix
        //start_code_prefix
        //--------------------------
        //--------------------------
        reg start_code_prefix_found;
        reg start_code_prefix_found;
        always @ (parser_state or BitStream_buffer_output)
        always @ (parser_state or BitStream_buffer_output)
                if (parser_state == `start_code_prefix)
                if (parser_state == `start_code_prefix)
                        begin
                        begin
                                if (BitStream_buffer_output == 16'b0000000000000001)
                                if (BitStream_buffer_output == 16'b0000000000000001)
                                        start_code_prefix_found <= 1;
                                        start_code_prefix_found <= 1;
                                else
                                else
                                        start_code_prefix_found <= 0;
                                        start_code_prefix_found <= 0;
                        end
                        end
                else
                else
                        start_code_prefix_found <= 0;
                        start_code_prefix_found <= 0;
        //--------------------------
        //--------------------------
        //nal_unit
        //nal_unit
        //--------------------------
        //--------------------------
        reg forbidden_zero_bit;
        reg forbidden_zero_bit;
        reg [1:0] nal_ref_idc;
        reg [1:0] nal_ref_idc;
        reg [4:0] nal_unit_type_reg;
        reg [4:0] nal_unit_type_reg;
        wire [4:0] nal_unit_type;
        wire [4:0] nal_unit_type;
        assign nal_unit_type = (nal_unit_state == `forbidden_zero_bit_2_nal_unit_type)? BitStream_buffer_output[12:8]:nal_unit_type_reg;
        assign nal_unit_type = (nal_unit_state == `forbidden_zero_bit_2_nal_unit_type)? BitStream_buffer_output[12:8]:nal_unit_type_reg;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                forbidden_zero_bit <= 0;
                                forbidden_zero_bit <= 0;
                                nal_ref_idc        <= 0;
                                nal_ref_idc        <= 0;
                                nal_unit_type_reg  <= 0;
                                nal_unit_type_reg  <= 0;
                        end
                        end
                else if (nal_unit_state == `forbidden_zero_bit_2_nal_unit_type)
                else if (nal_unit_state == `forbidden_zero_bit_2_nal_unit_type)
                        begin
                        begin
                                forbidden_zero_bit <= BitStream_buffer_output[15];
                                forbidden_zero_bit <= BitStream_buffer_output[15];
                                nal_ref_idc        <= BitStream_buffer_output[14:13];
                                nal_ref_idc        <= BitStream_buffer_output[14:13];
                                nal_unit_type_reg  <= nal_unit_type;
                                nal_unit_type_reg  <= nal_unit_type;
                        end
                        end
        //--------------------------
        //--------------------------
        //seq_parameter_set
        //seq_parameter_set
        //--------------------------
        //--------------------------
        reg [7:0] profile_idc;
        reg [7:0] profile_idc;
        reg constraint_set0_flag,constraint_set1_flag,constraint_set2_flag,constraint_set3_flag;
        reg constraint_set0_flag,constraint_set1_flag,constraint_set2_flag,constraint_set3_flag;
        reg [3:0] reserved_zero_4bits;
        reg [3:0] reserved_zero_4bits;
        reg [7:0] level_idc;
        reg [7:0] level_idc;
        reg [4:0] seq_parameter_set_id_sps;
        reg [4:0] seq_parameter_set_id_sps;
        reg [3:0] log2_max_frame_num_minus4;
        reg [3:0] log2_max_frame_num_minus4;
        reg [1:0] pic_order_cnt_type;
        reg [1:0] pic_order_cnt_type;
        reg [3:0] log2_max_pic_order_cnt_lsb_minus4;
        reg [3:0] log2_max_pic_order_cnt_lsb_minus4;
        reg [2:0] num_ref_frames; //however,we only support 1 reference frame currently
        reg [2:0] num_ref_frames; //however,we only support 1 reference frame currently
        reg gaps_in_frame_num_value_allowed_flag;
        reg gaps_in_frame_num_value_allowed_flag;
        reg [3:0] pic_width_in_mbs_minus1;
        reg [3:0] pic_width_in_mbs_minus1;
        reg [3:0] pic_height_in_map_units_minus1;
        reg [3:0] pic_height_in_map_units_minus1;
        reg frame_mbs_only_flag;
        reg frame_mbs_only_flag;
        reg direct_8x8_inference_flag;
        reg direct_8x8_inference_flag;
        reg frame_cropping_flag;
        reg frame_cropping_flag;
        reg vui_parameter_present_flag;
        reg vui_parameter_present_flag;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                profile_idc                          <= 0;
                                profile_idc                          <= 0;
                                constraint_set0_flag                 <= 0;
                                constraint_set0_flag                 <= 0;
                                constraint_set1_flag                 <= 0;
                                constraint_set1_flag                 <= 0;
                                constraint_set2_flag                 <= 0;
                                constraint_set2_flag                 <= 0;
                                constraint_set3_flag                 <= 0;
                                constraint_set3_flag                 <= 0;
                                reserved_zero_4bits                      <= 0;
                                reserved_zero_4bits                      <= 0;
                                level_idc                            <= 0;
                                level_idc                            <= 0;
                                seq_parameter_set_id_sps             <= 0;
                                seq_parameter_set_id_sps             <= 0;
                                log2_max_frame_num_minus4            <= 0;
                                log2_max_frame_num_minus4            <= 0;
                                pic_order_cnt_type                   <= 0;
                                pic_order_cnt_type                   <= 0;
                                log2_max_pic_order_cnt_lsb_minus4    <= 0;
                                log2_max_pic_order_cnt_lsb_minus4    <= 0;
                                num_ref_frames                       <= 0;
                                num_ref_frames                       <= 0;
                                gaps_in_frame_num_value_allowed_flag <= 0;
                                gaps_in_frame_num_value_allowed_flag <= 0;
                                pic_width_in_mbs_minus1              <= 0;
                                pic_width_in_mbs_minus1              <= 0;
                                pic_height_in_map_units_minus1       <= 0;
                                pic_height_in_map_units_minus1       <= 0;
                                frame_mbs_only_flag                  <= 0;
                                frame_mbs_only_flag                  <= 0;
                                direct_8x8_inference_flag            <= 0;
                                direct_8x8_inference_flag            <= 0;
                                frame_cropping_flag                  <= 0;
                                frame_cropping_flag                  <= 0;
                                vui_parameter_present_flag           <= 0;
                                vui_parameter_present_flag           <= 0;
                        end
                        end
                else
                else
                        case (seq_parameter_set_state)
                        case (seq_parameter_set_state)
                                `fixed_header:
                                `fixed_header:
                                begin
                                begin
                                        profile_idc <= BitStream_buffer_output[15:8];
                                        profile_idc <= BitStream_buffer_output[15:8];
                                        constraint_set0_flag <= BitStream_buffer_output[7];
                                        constraint_set0_flag <= BitStream_buffer_output[7];
                                        constraint_set1_flag <= BitStream_buffer_output[6];
                                        constraint_set1_flag <= BitStream_buffer_output[6];
                                        constraint_set2_flag <= BitStream_buffer_output[5];
                                        constraint_set2_flag <= BitStream_buffer_output[5];
                                        constraint_set3_flag <= BitStream_buffer_output[4];
                                        constraint_set3_flag <= BitStream_buffer_output[4];
                                        reserved_zero_4bits  <= BitStream_buffer_output[3:0];
                                        reserved_zero_4bits  <= BitStream_buffer_output[3:0];
                                end
                                end
                                `level_idc_s                           :level_idc                            <= BitStream_buffer_output[15:8];
                                `level_idc_s                           :level_idc                            <= BitStream_buffer_output[15:8];
                                `seq_parameter_set_id_sps_s            :seq_parameter_set_id_sps             <= exp_golomb_decoding_output[4:0];
                                `seq_parameter_set_id_sps_s            :seq_parameter_set_id_sps             <= exp_golomb_decoding_output[4:0];
                                `log2_max_frame_num_minus4_s           :log2_max_frame_num_minus4            <= exp_golomb_decoding_output[3:0];
                                `log2_max_frame_num_minus4_s           :log2_max_frame_num_minus4            <= exp_golomb_decoding_output[3:0];
                                `pic_order_cnt_type_s                  :pic_order_cnt_type                   <= exp_golomb_decoding_output[1:0];
                                `pic_order_cnt_type_s                  :pic_order_cnt_type                   <= exp_golomb_decoding_output[1:0];
                                `log2_max_pic_order_cnt_lsb_minus4_s   :log2_max_pic_order_cnt_lsb_minus4    <= exp_golomb_decoding_output[3:0];
                                `log2_max_pic_order_cnt_lsb_minus4_s   :log2_max_pic_order_cnt_lsb_minus4    <= exp_golomb_decoding_output[3:0];
                                `num_ref_frames_s                      :num_ref_frames                       <= exp_golomb_decoding_output[0];
                                `num_ref_frames_s                      :num_ref_frames                       <= exp_golomb_decoding_output[0];
                                `gaps_in_frame_num_value_allowed_flag_s:gaps_in_frame_num_value_allowed_flag <= BitStream_buffer_output[15];
                                `gaps_in_frame_num_value_allowed_flag_s:gaps_in_frame_num_value_allowed_flag <= BitStream_buffer_output[15];
                                `pic_width_in_mbs_minus1_s             :pic_width_in_mbs_minus1              <= exp_golomb_decoding_output[3:0];
                                `pic_width_in_mbs_minus1_s             :pic_width_in_mbs_minus1              <= exp_golomb_decoding_output[3:0];
                                `pic_height_in_map_units_minus1_s      :pic_height_in_map_units_minus1       <= exp_golomb_decoding_output[3:0];
                                `pic_height_in_map_units_minus1_s      :pic_height_in_map_units_minus1       <= exp_golomb_decoding_output[3:0];
                                `frame_mbs_only_flag_2_frame_cropping_flag:
                                `frame_mbs_only_flag_2_frame_cropping_flag:
                                begin
                                begin
                                        frame_mbs_only_flag       <= BitStream_buffer_output[15];
                                        frame_mbs_only_flag       <= BitStream_buffer_output[15];
                                        direct_8x8_inference_flag <= BitStream_buffer_output[14];
                                        direct_8x8_inference_flag <= BitStream_buffer_output[14];
                                        frame_cropping_flag       <= BitStream_buffer_output[13];
                                        frame_cropping_flag       <= BitStream_buffer_output[13];
                                end
                                end
                                `vui_parameter_present_flag_s:vui_parameter_present_flag <= BitStream_buffer_output[15];
                                `vui_parameter_present_flag_s:vui_parameter_present_flag <= BitStream_buffer_output[15];
                        endcase
                        endcase
        //--------------------------
        //--------------------------
        //pic_parameter_set
        //pic_parameter_set
        //--------------------------
        //--------------------------
        reg [7:0] pic_parameter_set_id_pps;
        reg [7:0] pic_parameter_set_id_pps;
        reg [4:0] seq_parameter_set_id_pps;
        reg [4:0] seq_parameter_set_id_pps;
        reg entropy_coding_mode_flag;
        reg entropy_coding_mode_flag;
        reg pic_order_present_flag;
        reg pic_order_present_flag;
        reg [2:0] num_slice_groups_minus1;
        reg [2:0] num_slice_groups_minus1;
        reg [2:0] num_ref_idx_l0_active_minus1;
        reg [2:0] num_ref_idx_l0_active_minus1;
        reg [2:0] num_ref_idx_l1_active_minus1;
        reg [2:0] num_ref_idx_l1_active_minus1;
        reg weighted_pred_flag;
        reg weighted_pred_flag;
        reg [1:0] weighted_bipred_idc;
        reg [1:0] weighted_bipred_idc;
        reg [5:0] pic_init_qp_minus26,pic_init_qs_minus26;
        reg [5:0] pic_init_qp_minus26,pic_init_qs_minus26;
        reg [4:0] chroma_qp_index_offset;
        reg [4:0] chroma_qp_index_offset;
        reg deblocking_filter_control_present_flag;
        reg deblocking_filter_control_present_flag;
        reg constrained_intra_pred_flag;
        reg constrained_intra_pred_flag;
        reg redundant_pic_cnt_present_flag;
        reg redundant_pic_cnt_present_flag;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                pic_parameter_set_id_pps               <= 0;
                                pic_parameter_set_id_pps               <= 0;
                                seq_parameter_set_id_pps               <= 0;
                                seq_parameter_set_id_pps               <= 0;
                                entropy_coding_mode_flag               <= 0;
                                entropy_coding_mode_flag               <= 0;
                                pic_order_present_flag                 <= 0;
                                pic_order_present_flag                 <= 0;
                                num_slice_groups_minus1                <= 0;
                                num_slice_groups_minus1                <= 0;
                                num_ref_idx_l0_active_minus1           <= 0;
                                num_ref_idx_l0_active_minus1           <= 0;
                                num_ref_idx_l1_active_minus1           <= 0;
                                num_ref_idx_l1_active_minus1           <= 0;
                                weighted_pred_flag                     <= 0;
                                weighted_pred_flag                     <= 0;
                                weighted_bipred_idc                    <= 0;
                                weighted_bipred_idc                    <= 0;
                                pic_init_qp_minus26                    <= 0;
                                pic_init_qp_minus26                    <= 0;
                                pic_init_qs_minus26                    <= 0;
                                pic_init_qs_minus26                    <= 0;
                                chroma_qp_index_offset                 <= 0;
                                chroma_qp_index_offset                 <= 0;
                                deblocking_filter_control_present_flag <= 0;
                                deblocking_filter_control_present_flag <= 0;
                                constrained_intra_pred_flag            <= 0;
                                constrained_intra_pred_flag            <= 0;
                                redundant_pic_cnt_present_flag         <= 0;
                                redundant_pic_cnt_present_flag         <= 0;
                        end
                        end
                else
                else
                        case (pic_parameter_set_state)
                        case (pic_parameter_set_state)
                                `pic_parameter_set_id_pps_s:pic_parameter_set_id_pps <= exp_golomb_decoding_output[7:0];
                                `pic_parameter_set_id_pps_s:pic_parameter_set_id_pps <= exp_golomb_decoding_output[7:0];
                                `seq_parameter_set_id_pps_s:seq_parameter_set_id_pps <= exp_golomb_decoding_output[4:0];
                                `seq_parameter_set_id_pps_s:seq_parameter_set_id_pps <= exp_golomb_decoding_output[4:0];
                                `entropy_coding_mode_flag_2_pic_order_present_flag:
                                `entropy_coding_mode_flag_2_pic_order_present_flag:
                                begin
                                begin
                                        entropy_coding_mode_flag <= BitStream_buffer_output[15];
                                        entropy_coding_mode_flag <= BitStream_buffer_output[15];
                                        pic_order_present_flag   <= BitStream_buffer_output[14];
                                        pic_order_present_flag   <= BitStream_buffer_output[14];
                                end
                                end
                                `num_slice_groups_minus1_s         :num_slice_groups_minus1 <= exp_golomb_decoding_output[2:0];
                                `num_slice_groups_minus1_s         :num_slice_groups_minus1 <= exp_golomb_decoding_output[2:0];
                                `num_ref_idx_l0_active_minus1_pps_s:num_ref_idx_l0_active_minus1 <= exp_golomb_decoding_output[2:0];
                                `num_ref_idx_l0_active_minus1_pps_s:num_ref_idx_l0_active_minus1 <= exp_golomb_decoding_output[2:0];
                                `num_ref_idx_l1_active_minus1_pps_s:num_ref_idx_l1_active_minus1 <= exp_golomb_decoding_output[2:0];
                                `num_ref_idx_l1_active_minus1_pps_s:num_ref_idx_l1_active_minus1 <= exp_golomb_decoding_output[2:0];
                                `weighted_pred_flag_2_weighted_bipred_idc:
                                `weighted_pred_flag_2_weighted_bipred_idc:
                                begin
                                begin
                                        weighted_pred_flag  <= BitStream_buffer_output[15];
                                        weighted_pred_flag  <= BitStream_buffer_output[15];
                                        weighted_bipred_idc <= BitStream_buffer_output[14:13];
                                        weighted_bipred_idc <= BitStream_buffer_output[14:13];
                                end
                                end
                                `pic_init_qp_minus26_s   :pic_init_qp_minus26 <= exp_golomb_decoding_output[5:0];
                                `pic_init_qp_minus26_s   :pic_init_qp_minus26 <= exp_golomb_decoding_output[5:0];
                                `pic_init_qs_minus26_s   :pic_init_qs_minus26 <= exp_golomb_decoding_output[5:0];
                                `pic_init_qs_minus26_s   :pic_init_qs_minus26 <= exp_golomb_decoding_output[5:0];
                                `chroma_qp_index_offset_s:chroma_qp_index_offset <= exp_golomb_decoding_output[4:0];
                                `chroma_qp_index_offset_s:chroma_qp_index_offset <= exp_golomb_decoding_output[4:0];
                                `deblocking_filter_control_2_redundant_pic_cnt_present_flag:
                                `deblocking_filter_control_2_redundant_pic_cnt_present_flag:
                                begin
                                begin
                                        deblocking_filter_control_present_flag <= BitStream_buffer_output[15];
                                        deblocking_filter_control_present_flag <= BitStream_buffer_output[15];
                                        constrained_intra_pred_flag            <= BitStream_buffer_output[14];
                                        constrained_intra_pred_flag            <= BitStream_buffer_output[14];
                                        redundant_pic_cnt_present_flag         <= BitStream_buffer_output[13];
                                        redundant_pic_cnt_present_flag         <= BitStream_buffer_output[13];
                                end
                                end
                        endcase
                        endcase
        //--------------------------
        //--------------------------
        //slice_header
        //slice_header
        //--------------------------
        //--------------------------
        reg first_mb_in_slice;
        reg first_mb_in_slice;
        reg [2:0] slice_type;
        reg [2:0] slice_type;
        reg [7:0] pic_parameter_set_id_slice_header;
        reg [7:0] pic_parameter_set_id_slice_header;
        reg [3:0] frame_num;
        reg [3:0] frame_num;
        reg idr_pic_id;
        reg idr_pic_id;
        reg [9:0] pic_order_cnt_lsb;
        reg [9:0] pic_order_cnt_lsb;
        reg num_ref_idx_active_override_flag;
        reg num_ref_idx_active_override_flag;
        reg [1:0] disable_deblocking_filter_idc;
        reg [1:0] disable_deblocking_filter_idc;
        reg [3:0] slice_alpha_c0_offset_div2_dec;
        reg [3:0] slice_alpha_c0_offset_div2_dec;
        reg [3:0] slice_beta_offset_div2_dec;
        reg [3:0] slice_beta_offset_div2_dec;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                first_mb_in_slice                 <= 0;
                                first_mb_in_slice                 <= 0;
                                slice_type                        <= 0;
                                slice_type                        <= 0;
                                pic_parameter_set_id_slice_header <= 0;
                                pic_parameter_set_id_slice_header <= 0;
                                frame_num                         <= 0;
                                frame_num                         <= 0;
                                idr_pic_id                        <= 0;
                                idr_pic_id                        <= 0;
                                pic_order_cnt_lsb                 <= 0;
                                pic_order_cnt_lsb                 <= 0;
                                num_ref_idx_active_override_flag  <= 0;
                                num_ref_idx_active_override_flag  <= 0;
                                disable_deblocking_filter_idc     <= 0;
                                disable_deblocking_filter_idc     <= 0;
                                slice_alpha_c0_offset_div2_dec    <= 0;
                                slice_alpha_c0_offset_div2_dec    <= 0;
                                slice_beta_offset_div2_dec        <= 0;
                                slice_beta_offset_div2_dec        <= 0;
                        end
                        end
                else
                else
                        case (slice_header_state)
                        case (slice_header_state)
                                `first_mb_in_slice_s                :first_mb_in_slice                 <= exp_golomb_decoding_output[0];
                                `first_mb_in_slice_s                :first_mb_in_slice                 <= exp_golomb_decoding_output[0];
                                `slice_type_s                       :slice_type                        <= exp_golomb_decoding_output[2:0];
                                `slice_type_s                       :slice_type                        <= exp_golomb_decoding_output[2:0];
                                `pic_parameter_set_id_slice_header_s:pic_parameter_set_id_slice_header <= exp_golomb_decoding_output;
                                `pic_parameter_set_id_slice_header_s:pic_parameter_set_id_slice_header <= exp_golomb_decoding_output;
                                `frame_num_s                        :frame_num                         <= dependent_variable_decoding_output[3:0];
                                `frame_num_s                        :frame_num                         <= dependent_variable_decoding_output[3:0];
                                `idr_pic_id_s                       :idr_pic_id                        <= exp_golomb_decoding_output[0];
                                `idr_pic_id_s                       :idr_pic_id                        <= exp_golomb_decoding_output[0];
                                `pic_order_cnt_lsb_s                :pic_order_cnt_lsb                 <= dependent_variable_decoding_output[9:0];
                                `pic_order_cnt_lsb_s                :pic_order_cnt_lsb                 <= dependent_variable_decoding_output[9:0];
                                `num_ref_idx_active_override_flag_s :num_ref_idx_active_override_flag  <= BitStream_buffer_output[15];
                                `num_ref_idx_active_override_flag_s :num_ref_idx_active_override_flag  <= BitStream_buffer_output[15];
                                //num_ref_idx_l0_active_minus1_slice_header_s:
                                //num_ref_idx_l0_active_minus1_slice_header_s:
                                //slice_qp_delta_s:slice_qp_delta <= exp_golomb_decoding_output[5:0];
                                //slice_qp_delta_s:slice_qp_delta <= exp_golomb_decoding_output[5:0];
                                `disable_deblocking_filter_idc_s    :disable_deblocking_filter_idc     <= exp_golomb_decoding_output[1:0];
                                `disable_deblocking_filter_idc_s    :disable_deblocking_filter_idc     <= exp_golomb_decoding_output[1:0];
                                `slice_alpha_c0_offset_div2_s       :slice_alpha_c0_offset_div2_dec    <= exp_golomb_decoding_output[3:0];
                                `slice_alpha_c0_offset_div2_s       :slice_alpha_c0_offset_div2_dec    <= exp_golomb_decoding_output[3:0];
                                `slice_beta_offset_div2_s           :slice_beta_offset_div2_dec              <= exp_golomb_decoding_output[3:0];
                                `slice_beta_offset_div2_s           :slice_beta_offset_div2_dec              <= exp_golomb_decoding_output[3:0];
                                //slice_group_change_cycle_s:
                                //slice_group_change_cycle_s:
                        endcase
                        endcase
 
 
        wire [3:0] slice_alpha_c0_offset_div2;
        wire [3:0] slice_alpha_c0_offset_div2;
        wire [3:0] slice_beta_offset_div2;
        wire [3:0] slice_beta_offset_div2;
        assign slice_alpha_c0_offset_div2 = {4{deblocking_filter_control_present_flag}} & slice_alpha_c0_offset_div2_dec;
        assign slice_alpha_c0_offset_div2 = {4{deblocking_filter_control_present_flag}} & slice_alpha_c0_offset_div2_dec;
        assign slice_beta_offset_div2     = {4{deblocking_filter_control_present_flag}} & slice_beta_offset_div2_dec;
        assign slice_beta_offset_div2     = {4{deblocking_filter_control_present_flag}} & slice_beta_offset_div2_dec;
 
 
        reg sw_disable_DF;
        reg sw_disable_DF;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        sw_disable_DF <= 0;
                        sw_disable_DF <= 0;
                else if (slice_header_state == `disable_deblocking_filter_idc_s && disable_deblocking_filter_idc == 1)
                else if (slice_header_state == `disable_deblocking_filter_idc_s && disable_deblocking_filter_idc == 1)
                        sw_disable_DF <= 1;
                        sw_disable_DF <= 1;
                else
                else
                        sw_disable_DF <= 0;
                        sw_disable_DF <= 0;
 
 
        assign disable_DF = sw_disable_DF | pin_disable_DF;
        assign disable_DF = sw_disable_DF | pin_disable_DF;
        //--------------------------
        //--------------------------
        //slice_data
        //slice_data
        //--------------------------
        //--------------------------
        wire [6:0] mb_skip_run;
        wire [6:0] mb_skip_run;
        reg [6:0] mb_skip_run_reg;
        reg [6:0] mb_skip_run_reg;
        reg [4:0] mb_type;
        reg [4:0] mb_type;
        reg [3:0] mb_type_general;
        reg [3:0] mb_type_general;
        reg [3:0] mb_type_general_reg;
        reg [3:0] mb_type_general_reg;
        reg [1:0] Intra16x16_predmode;
        reg [1:0] Intra16x16_predmode;
 
 
        //mb_type_general
        //mb_type_general
        assign mb_skip_run = (slice_data_state == `mb_skip_run_s)? exp_golomb_decoding_output[6:0]:mb_skip_run_reg;
        assign mb_skip_run = (slice_data_state == `mb_skip_run_s)? exp_golomb_decoding_output[6:0]:mb_skip_run_reg;
        always @ (slice_data_state or slice_type or exp_golomb_decoding_output or mb_type_general_reg)
        always @ (slice_data_state or slice_type or exp_golomb_decoding_output or mb_type_general_reg)
                if (slice_data_state == `skip_run_duration)
                if (slice_data_state == `skip_run_duration)
                        mb_type_general <= `MB_P_skip;
                        mb_type_general <= `MB_P_skip;
                else if (slice_data_state == `mb_type_s)
                else if (slice_data_state == `mb_type_s)
                        begin
                        begin
                                if (slice_type == 2 || slice_type == 7) //I slice
                                if (slice_type == 2 || slice_type == 7) //I slice
                                        case (exp_golomb_decoding_output)
                                        case (exp_golomb_decoding_output)
                                                0:                      mb_type_general <= `MB_Intra4x4;
                                                0:                      mb_type_general <= `MB_Intra4x4;
                                                1,2,3,4,13,14,15,16:    mb_type_general <= `MB_Intra16x16_CBPChroma0;
                                                1,2,3,4,13,14,15,16:    mb_type_general <= `MB_Intra16x16_CBPChroma0;
                                                5,6,7,8,17,18,19,20:    mb_type_general <= `MB_Intra16x16_CBPChroma1;
                                                5,6,7,8,17,18,19,20:    mb_type_general <= `MB_Intra16x16_CBPChroma1;
                                                9,10,11,12,21,22,23,24: mb_type_general <= `MB_Intra16x16_CBPChroma2;
                                                9,10,11,12,21,22,23,24: mb_type_general <= `MB_Intra16x16_CBPChroma2;
                                                default:                mb_type_general <= `MB_Inter16x16;
                                                default:                mb_type_general <= `MB_Inter16x16;
                                        endcase
                                        endcase
                                else                                    //P slice
                                else                                    //P slice
                                        case (exp_golomb_decoding_output)
                                        case (exp_golomb_decoding_output)
                                                0:                      mb_type_general <= `MB_Inter16x16;
                                                0:                      mb_type_general <= `MB_Inter16x16;
                                                1:                      mb_type_general <= `MB_Inter16x8;
                                                1:                      mb_type_general <= `MB_Inter16x8;
                                                2:                      mb_type_general <= `MB_Inter8x16;
                                                2:                      mb_type_general <= `MB_Inter8x16;
                                                3:                      mb_type_general <= `MB_P_8x8;
                                                3:                      mb_type_general <= `MB_P_8x8;
                                                4:                      mb_type_general <= `MB_P_8x8ref0;
                                                4:                      mb_type_general <= `MB_P_8x8ref0;
                                                5:                      mb_type_general <= `MB_Intra4x4;
                                                5:                      mb_type_general <= `MB_Intra4x4;
                                                6,7,8,9,18,19,20,21:    mb_type_general <= `MB_Intra16x16_CBPChroma0;
                                                6,7,8,9,18,19,20,21:    mb_type_general <= `MB_Intra16x16_CBPChroma0;
                                                10,11,12,13,22,23,24,25:mb_type_general <= `MB_Intra16x16_CBPChroma1;
                                                10,11,12,13,22,23,24,25:mb_type_general <= `MB_Intra16x16_CBPChroma1;
                                                14,15,16,17,26,27,28,29:mb_type_general <= `MB_Intra16x16_CBPChroma0;
                                                14,15,16,17,26,27,28,29:mb_type_general <= `MB_Intra16x16_CBPChroma0;
                                                default:                mb_type_general <= `MB_Inter16x8;
                                                default:                mb_type_general <= `MB_Inter16x8;
                                        endcase
                                        endcase
                        end
                        end
                else
                else
                        mb_type_general <= mb_type_general_reg;
                        mb_type_general <= mb_type_general_reg;
 
 
        //Intra16x16_predmode
        //Intra16x16_predmode
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        Intra16x16_predmode <= 2'b0;
                        Intra16x16_predmode <= 2'b0;
                else if (slice_data_state == `mb_type_s)
                else if (slice_data_state == `mb_type_s)
                        begin
                        begin
                                if (slice_type == 2 || slice_type == 7) //I slice
                                if (slice_type == 2 || slice_type == 7) //I slice
                                        begin
                                        begin
                                                if (exp_golomb_decoding_output != 0)
                                                if (exp_golomb_decoding_output != 0)
                                                        case (exp_golomb_decoding_output[1:0])
                                                        case (exp_golomb_decoding_output[1:0])
                                                                2'b00:Intra16x16_predmode <= 2'b11;
                                                                2'b00:Intra16x16_predmode <= 2'b11;
                                                                2'b01:Intra16x16_predmode <= 2'b00;
                                                                2'b01:Intra16x16_predmode <= 2'b00;
                                                                2'b10:Intra16x16_predmode <= 2'b01;
                                                                2'b10:Intra16x16_predmode <= 2'b01;
                                                                2'b11:Intra16x16_predmode <= 2'b10;
                                                                2'b11:Intra16x16_predmode <= 2'b10;
                                                        endcase
                                                        endcase
                                        end
                                        end
                                else if (exp_golomb_decoding_output[4:0] > 5) //P slice
                                else if (exp_golomb_decoding_output[4:0] > 5) //P slice
                                        case (exp_golomb_decoding_output[1:0])
                                        case (exp_golomb_decoding_output[1:0])
                                                2'b00:Intra16x16_predmode <= 2'b10;
                                                2'b00:Intra16x16_predmode <= 2'b10;
                                                2'b01:Intra16x16_predmode <= 2'b11;
                                                2'b01:Intra16x16_predmode <= 2'b11;
                                                2'b10:Intra16x16_predmode <= 2'b00;
                                                2'b10:Intra16x16_predmode <= 2'b00;
                                                2'b11:Intra16x16_predmode <= 2'b01;
                                                2'b11:Intra16x16_predmode <= 2'b01;
                                        endcase
                                        endcase
                        end
                        end
 
 
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                mb_skip_run_reg <= 0;
                                mb_skip_run_reg <= 0;
                                mb_type <= 0;
                                mb_type <= 0;
                                mb_type_general_reg <= `MB_type_rst;
                                mb_type_general_reg <= `MB_type_rst;
                        end
                        end
                else
                else
                        case (slice_data_state)
                        case (slice_data_state)
                                `mb_skip_run_s:mb_skip_run_reg <= mb_skip_run;
                                `mb_skip_run_s:mb_skip_run_reg <= mb_skip_run;
                                `skip_run_duration:
                                `skip_run_duration:
                                begin
                                begin
                                        mb_type <= 5'd31;
                                        mb_type <= 5'd31;
                                        mb_type_general_reg <= mb_type_general;
                                        mb_type_general_reg <= mb_type_general;
                                end
                                end
                                `mb_type_s:
                                `mb_type_s:
                                begin
                                begin
                                        mb_type <= exp_golomb_decoding_output[4:0];
                                        mb_type <= exp_golomb_decoding_output[4:0];
                                        mb_type_general_reg <= mb_type_general;
                                        mb_type_general_reg <= mb_type_general;
                                end
                                end
                                //pcm_byte_s: --> Currently no deal with it
                                //pcm_byte_s: --> Currently no deal with it
                                //coded_block_pattern_s: --> See CodedBlockPattern_decoding.v
                                //coded_block_pattern_s: --> See CodedBlockPattern_decoding.v
                                //mb_qp_delta_s:mb_qp_delta <= exp_golomb_decoding_output;
                                //mb_qp_delta_s:mb_qp_delta <= exp_golomb_decoding_output;
                        endcase
                        endcase
        //Update MBTypeGen information
        //Update MBTypeGen information
        reg [1:0] MBTypeGen_mbAddrA;
        reg [1:0] MBTypeGen_mbAddrA;
        reg MBTypeGen_mbAddrD_tmp;
        reg MBTypeGen_mbAddrD_tmp;
        reg MBTypeGen_mbAddrD;
        reg MBTypeGen_mbAddrD;
        reg [21:0] MBTypeGen_mbAddrB_reg;
        reg [21:0] MBTypeGen_mbAddrB_reg;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                MBTypeGen_mbAddrA <= 0;
                                MBTypeGen_mbAddrA <= 0;
                                MBTypeGen_mbAddrD_tmp <= 0;
                                MBTypeGen_mbAddrD_tmp <= 0;
                                MBTypeGen_mbAddrB_reg <= 0;
                                MBTypeGen_mbAddrB_reg <= 0;
                        end
                        end
                else if (slice_data_state == `skip_run_duration && end_of_MB_DEC)//for P_skip
                else if (slice_data_state == `skip_run_duration && end_of_MB_DEC)//for P_skip
                        begin
                        begin
                                if (mb_num_h != 10)
                                if (mb_num_h != 10)
                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_P_skip;
                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_P_skip;
                                if (mb_num_h == 9)
                                if (mb_num_h == 9)
                                        MBTypeGen_mbAddrD_tmp <= 1'b0;
                                        MBTypeGen_mbAddrD_tmp <= 1'b0;
                                if (mb_num_v != 8)
                                if (mb_num_v != 8)
                                        case (mb_num_h)
                                        case (mb_num_h)
                                                0:MBTypeGen_mbAddrB_reg[1:0]    <= `MB_addrA_addrB_P_skip;1:MBTypeGen_mbAddrB_reg[3:2]     <= `MB_addrA_addrB_P_skip;
                                                0:MBTypeGen_mbAddrB_reg[1:0]    <= `MB_addrA_addrB_P_skip;1:MBTypeGen_mbAddrB_reg[3:2]     <= `MB_addrA_addrB_P_skip;
                                                2:MBTypeGen_mbAddrB_reg[5:4]    <= `MB_addrA_addrB_P_skip;3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_P_skip;
                                                2:MBTypeGen_mbAddrB_reg[5:4]    <= `MB_addrA_addrB_P_skip;3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_P_skip;
                                                4:MBTypeGen_mbAddrB_reg[9:8]    <= `MB_addrA_addrB_P_skip;5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_P_skip;
                                                4:MBTypeGen_mbAddrB_reg[9:8]    <= `MB_addrA_addrB_P_skip;5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_P_skip;
                                                6:MBTypeGen_mbAddrB_reg[13:12]  <= `MB_addrA_addrB_P_skip;7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_P_skip;
                                                6:MBTypeGen_mbAddrB_reg[13:12]  <= `MB_addrA_addrB_P_skip;7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_P_skip;
                                                8:MBTypeGen_mbAddrB_reg[17:16]  <= `MB_addrA_addrB_P_skip;9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_P_skip;
                                                8:MBTypeGen_mbAddrB_reg[17:16]  <= `MB_addrA_addrB_P_skip;9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_P_skip;
                                                10:MBTypeGen_mbAddrB_reg[21:20] <= `MB_addrA_addrB_P_skip;
                                                10:MBTypeGen_mbAddrB_reg[21:20] <= `MB_addrA_addrB_P_skip;
                                        endcase
                                        endcase
                        end
                        end
                else if (slice_data_state == `mb_num_update)
                else if (slice_data_state == `mb_num_update)
                        begin
                        begin
                                if (mb_num_h != 10)
                                if (mb_num_h != 10)
                                        begin
                                        begin
                                                if (mb_type_general[3] == 1'b0)
                                                if (mb_type_general[3] == 1'b0)
                                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_Inter;
                                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_Inter;
                                                else if (mb_type_general[3:2] == 2'b10)
                                                else if (mb_type_general[3:2] == 2'b10)
                                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_Intra16x16;
                                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_Intra16x16;
                                                else if (mb_type_general == `MB_Intra4x4)
                                                else if (mb_type_general == `MB_Intra4x4)
                                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_Intra4x4;
                                                        MBTypeGen_mbAddrA <= `MB_addrA_addrB_Intra4x4;
                                        end
                                        end
                                if (mb_num_h == 9)
                                if (mb_num_h == 9)
                                        MBTypeGen_mbAddrD_tmp <= mb_type_general[3];
                                        MBTypeGen_mbAddrD_tmp <= mb_type_general[3];
                                if (mb_num_v != 8)
                                if (mb_num_v != 8)
                                        begin
                                        begin
                                                if (mb_type_general[3] == 1'b0)
                                                if (mb_type_general[3] == 1'b0)
                                                        case (mb_num_h)
                                                        case (mb_num_h)
                                                                0:MBTypeGen_mbAddrB_reg[1:0]   <= `MB_addrA_addrB_Inter; 1:MBTypeGen_mbAddrB_reg[3:2]   <= `MB_addrA_addrB_Inter;
                                                                0:MBTypeGen_mbAddrB_reg[1:0]   <= `MB_addrA_addrB_Inter; 1:MBTypeGen_mbAddrB_reg[3:2]   <= `MB_addrA_addrB_Inter;
                                                                2:MBTypeGen_mbAddrB_reg[5:4]   <= `MB_addrA_addrB_Inter; 3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_Inter;
                                                                2:MBTypeGen_mbAddrB_reg[5:4]   <= `MB_addrA_addrB_Inter; 3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_Inter;
                                                                4:MBTypeGen_mbAddrB_reg[9:8]   <= `MB_addrA_addrB_Inter; 5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_Inter;
                                                                4:MBTypeGen_mbAddrB_reg[9:8]   <= `MB_addrA_addrB_Inter; 5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_Inter;
                                                                6:MBTypeGen_mbAddrB_reg[13:12] <= `MB_addrA_addrB_Inter; 7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_Inter;
                                                                6:MBTypeGen_mbAddrB_reg[13:12] <= `MB_addrA_addrB_Inter; 7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_Inter;
                                                                8:MBTypeGen_mbAddrB_reg[17:16] <= `MB_addrA_addrB_Inter; 9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_Inter;
                                                                8:MBTypeGen_mbAddrB_reg[17:16] <= `MB_addrA_addrB_Inter; 9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_Inter;
                                                                10:MBTypeGen_mbAddrB_reg[21:20]<= `MB_addrA_addrB_Inter;
                                                                10:MBTypeGen_mbAddrB_reg[21:20]<= `MB_addrA_addrB_Inter;
                                                        endcase
                                                        endcase
                                                else if (mb_type_general[3:2] == 2'b10)
                                                else if (mb_type_general[3:2] == 2'b10)
                                                        case (mb_num_h)
                                                        case (mb_num_h)
                                                                0:MBTypeGen_mbAddrB_reg[1:0]   <= `MB_addrA_addrB_Intra16x16; 1:MBTypeGen_mbAddrB_reg[3:2]   <= `MB_addrA_addrB_Intra16x16;
                                                                0:MBTypeGen_mbAddrB_reg[1:0]   <= `MB_addrA_addrB_Intra16x16; 1:MBTypeGen_mbAddrB_reg[3:2]   <= `MB_addrA_addrB_Intra16x16;
                                                                2:MBTypeGen_mbAddrB_reg[5:4]   <= `MB_addrA_addrB_Intra16x16; 3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_Intra16x16;
                                                                2:MBTypeGen_mbAddrB_reg[5:4]   <= `MB_addrA_addrB_Intra16x16; 3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_Intra16x16;
                                                                4:MBTypeGen_mbAddrB_reg[9:8]   <= `MB_addrA_addrB_Intra16x16; 5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_Intra16x16;
                                                                4:MBTypeGen_mbAddrB_reg[9:8]   <= `MB_addrA_addrB_Intra16x16; 5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_Intra16x16;
                                                                6:MBTypeGen_mbAddrB_reg[13:12] <= `MB_addrA_addrB_Intra16x16; 7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_Intra16x16;
                                                                6:MBTypeGen_mbAddrB_reg[13:12] <= `MB_addrA_addrB_Intra16x16; 7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_Intra16x16;
                                                                8:MBTypeGen_mbAddrB_reg[17:16] <= `MB_addrA_addrB_Intra16x16; 9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_Intra16x16;
                                                                8:MBTypeGen_mbAddrB_reg[17:16] <= `MB_addrA_addrB_Intra16x16; 9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_Intra16x16;
                                                                10:MBTypeGen_mbAddrB_reg[21:20]<= `MB_addrA_addrB_Intra16x16;
                                                                10:MBTypeGen_mbAddrB_reg[21:20]<= `MB_addrA_addrB_Intra16x16;
                                                        endcase
                                                        endcase
                                                else if (mb_type_general == `MB_Intra4x4)
                                                else if (mb_type_general == `MB_Intra4x4)
                                                        case (mb_num_h)
                                                        case (mb_num_h)
                                                                0:MBTypeGen_mbAddrB_reg[1:0]   <= `MB_addrA_addrB_Intra4x4;       1:MBTypeGen_mbAddrB_reg[3:2]   <= `MB_addrA_addrB_Intra4x4;
                                                                0:MBTypeGen_mbAddrB_reg[1:0]   <= `MB_addrA_addrB_Intra4x4;       1:MBTypeGen_mbAddrB_reg[3:2]   <= `MB_addrA_addrB_Intra4x4;
                                                                2:MBTypeGen_mbAddrB_reg[5:4]   <= `MB_addrA_addrB_Intra4x4;     3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_Intra4x4;
                                                                2:MBTypeGen_mbAddrB_reg[5:4]   <= `MB_addrA_addrB_Intra4x4;     3:MBTypeGen_mbAddrB_reg[7:6]   <= `MB_addrA_addrB_Intra4x4;
                                                                4:MBTypeGen_mbAddrB_reg[9:8]   <= `MB_addrA_addrB_Intra4x4;     5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_Intra4x4;
                                                                4:MBTypeGen_mbAddrB_reg[9:8]   <= `MB_addrA_addrB_Intra4x4;     5:MBTypeGen_mbAddrB_reg[11:10] <= `MB_addrA_addrB_Intra4x4;
                                                                6:MBTypeGen_mbAddrB_reg[13:12] <= `MB_addrA_addrB_Intra4x4; 7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_Intra4x4;
                                                                6:MBTypeGen_mbAddrB_reg[13:12] <= `MB_addrA_addrB_Intra4x4; 7:MBTypeGen_mbAddrB_reg[15:14] <= `MB_addrA_addrB_Intra4x4;
                                                                8:MBTypeGen_mbAddrB_reg[17:16] <= `MB_addrA_addrB_Intra4x4; 9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_Intra4x4;
                                                                8:MBTypeGen_mbAddrB_reg[17:16] <= `MB_addrA_addrB_Intra4x4; 9:MBTypeGen_mbAddrB_reg[19:18] <= `MB_addrA_addrB_Intra4x4;
                                                                10:MBTypeGen_mbAddrB_reg[21:20]<= `MB_addrA_addrB_Intra4x4;
                                                                10:MBTypeGen_mbAddrB_reg[21:20]<= `MB_addrA_addrB_Intra4x4;
                                                        endcase
                                                        endcase
                                        end
                                        end
                        end
                        end
 
 
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 1'b0)
                if (reset_n == 1'b0)
                        MBTypeGen_mbAddrD <= 0;
                        MBTypeGen_mbAddrD <= 0;
                else if (mb_num_h == 0)
                else if (mb_num_h == 0)
                        MBTypeGen_mbAddrD <= MBTypeGen_mbAddrD_tmp;
                        MBTypeGen_mbAddrD <= MBTypeGen_mbAddrD_tmp;
 
 
        //----------------------------------------------------------------------
        //----------------------------------------------------------------------
        //mb_pred & sub_mb_pred 
        //mb_pred & sub_mb_pred 
        //      --> Also refer to Intra4x4_PredMode_decoding.v & Inter_mv_decoding.v
        //      --> Also refer to Intra4x4_PredMode_decoding.v & Inter_mv_decoding.v
        //----------------------------------------------------------------------
        //----------------------------------------------------------------------
        wire prev_intra4x4_pred_mode_flag;
        wire prev_intra4x4_pred_mode_flag;
        reg prev_intra4x4_pred_mode_flag_reg;
        reg prev_intra4x4_pred_mode_flag_reg;
        wire [2:0] rem_intra4x4_pred_mode;
        wire [2:0] rem_intra4x4_pred_mode;
        reg [2:0] rem_intra4x4_pred_mode_reg;
        reg [2:0] rem_intra4x4_pred_mode_reg;
        reg [1:0] intra_chroma_pred_mode;
        reg [1:0] intra_chroma_pred_mode;
        wire [7:0] mvd;
        wire [7:0] mvd;
        reg [7:0] mvd_reg;
        reg [7:0] mvd_reg;
        reg [7:0] sub_mb_type_reg;
        reg [7:0] sub_mb_type_reg;
        assign prev_intra4x4_pred_mode_flag = (mb_pred_state == `prev_intra4x4_pred_mode_flag_s)? BitStream_buffer_output[15]:prev_intra4x4_pred_mode_flag_reg;
        assign prev_intra4x4_pred_mode_flag = (mb_pred_state == `prev_intra4x4_pred_mode_flag_s)? BitStream_buffer_output[15]:prev_intra4x4_pred_mode_flag_reg;
        assign rem_intra4x4_pred_mode = (mb_pred_state == `rem_intra4x4_pred_mode_s)? BitStream_buffer_output[15:13]:rem_intra4x4_pred_mode_reg;
        assign rem_intra4x4_pred_mode = (mb_pred_state == `rem_intra4x4_pred_mode_s)? BitStream_buffer_output[15:13]:rem_intra4x4_pred_mode_reg;
        assign mvd = ((mb_pred_state == `mvd_l0_s) || (sub_mb_pred_state == `sub_mvd_l0_s))? exp_golomb_decoding_output[7:0]:mvd_reg;
        assign mvd = ((mb_pred_state == `mvd_l0_s) || (sub_mb_pred_state == `sub_mvd_l0_s))? exp_golomb_decoding_output[7:0]:mvd_reg;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 0)
                if (reset_n == 0)
                        begin
                        begin
                                prev_intra4x4_pred_mode_flag_reg <= 0;
                                prev_intra4x4_pred_mode_flag_reg <= 0;
                                rem_intra4x4_pred_mode_reg       <= 0;
                                rem_intra4x4_pred_mode_reg       <= 0;
                                intra_chroma_pred_mode           <= 0;
                                intra_chroma_pred_mode           <= 0;
                                mvd_reg                          <= 0;
                                mvd_reg                          <= 0;
                                sub_mb_type_reg                  <= 0;
                                sub_mb_type_reg                  <= 0;
                        end
                        end
                else
                else
                        begin
                        begin
                                case (mb_pred_state)
                                case (mb_pred_state)
                                        `prev_intra4x4_pred_mode_flag_s:prev_intra4x4_pred_mode_flag_reg <= prev_intra4x4_pred_mode_flag;
                                        `prev_intra4x4_pred_mode_flag_s:prev_intra4x4_pred_mode_flag_reg <= prev_intra4x4_pred_mode_flag;
                                        `rem_intra4x4_pred_mode_s      :rem_intra4x4_pred_mode_reg       <= rem_intra4x4_pred_mode;
                                        `rem_intra4x4_pred_mode_s      :rem_intra4x4_pred_mode_reg       <= rem_intra4x4_pred_mode;
                                        `intra_chroma_pred_mode_s      :intra_chroma_pred_mode           <= exp_golomb_decoding_output[1:0];
                                        `intra_chroma_pred_mode_s      :intra_chroma_pred_mode           <= exp_golomb_decoding_output[1:0];
                                        //ref_idx_l0_s: --> only 1 reference frame,so never jump into this state
                                        //ref_idx_l0_s: --> only 1 reference frame,so never jump into this state
                                        `mvd_l0_s:      mvd_reg <= mvd;
                                        `mvd_l0_s:      mvd_reg <= mvd;
                                endcase
                                endcase
                                case (sub_mb_pred_state)
                                case (sub_mb_pred_state)
                                        `sub_mb_type_s:
                                        `sub_mb_type_s:
                                        case (mbPartIdx)
                                        case (mbPartIdx)
                                                0:sub_mb_type_reg[1:0] <= exp_golomb_decoding_output[1:0];
                                                0:sub_mb_type_reg[1:0] <= exp_golomb_decoding_output[1:0];
                                                1:sub_mb_type_reg[3:2] <= exp_golomb_decoding_output[1:0];
                                                1:sub_mb_type_reg[3:2] <= exp_golomb_decoding_output[1:0];
                                                2:sub_mb_type_reg[5:4] <= exp_golomb_decoding_output[1:0];
                                                2:sub_mb_type_reg[5:4] <= exp_golomb_decoding_output[1:0];
                                                3:sub_mb_type_reg[7:6] <= exp_golomb_decoding_output[1:0];
                                                3:sub_mb_type_reg[7:6] <= exp_golomb_decoding_output[1:0];
                                        endcase
                                        endcase
                                        //sub_ref_idx_l0_s: --> only 1 reference frame,so never jump into this state
                                        //sub_ref_idx_l0_s: --> only 1 reference frame,so never jump into this state
                                        `sub_mvd_l0_s: mvd_reg <= mvd;
                                        `sub_mvd_l0_s: mvd_reg <= mvd;
                                endcase
                                endcase
                        end
                        end
        reg [2:0] NumMbPart;
        reg [2:0] NumMbPart;
        reg [2:0] NumSubMbPart;
        reg [2:0] NumSubMbPart;
        reg [1:0] sub_mb_type;
        reg [1:0] sub_mb_type;
        always @ (sub_mb_pred_state or sub_mb_type_reg or mbPartIdx)
        always @ (sub_mb_pred_state or sub_mb_type_reg or mbPartIdx)
                if (sub_mb_pred_state == `sub_mvd_l0_s)
                if (sub_mb_pred_state == `sub_mvd_l0_s)
                        case (mbPartIdx)
                        case (mbPartIdx)
                                0:sub_mb_type <= sub_mb_type_reg[1:0];
                                0:sub_mb_type <= sub_mb_type_reg[1:0];
                                1:sub_mb_type <= sub_mb_type_reg[3:2];
                                1:sub_mb_type <= sub_mb_type_reg[3:2];
                                2:sub_mb_type <= sub_mb_type_reg[5:4];
                                2:sub_mb_type <= sub_mb_type_reg[5:4];
                                3:sub_mb_type <= sub_mb_type_reg[7:6];
                                3:sub_mb_type <= sub_mb_type_reg[7:6];
                        endcase
                        endcase
                else
                else
                        sub_mb_type <= 0;
                        sub_mb_type <= 0;
        always @ (mb_pred_state or mb_type_general or sub_mb_pred_state)
        always @ (mb_pred_state or mb_type_general or sub_mb_pred_state)
                if (mb_pred_state == `mvd_l0_s)
                if (mb_pred_state == `mvd_l0_s)
                        case (mb_type_general)
                        case (mb_type_general)
                                0:NumMbPart <= 3'd1;
                                0:NumMbPart <= 3'd1;
                                default:NumMbPart <= 3'd2;
                                default:NumMbPart <= 3'd2;
                        endcase
                        endcase
                else if (sub_mb_pred_state == `sub_mvd_l0_s)
                else if (sub_mb_pred_state == `sub_mvd_l0_s)
                        NumMbPart <= 3'd4;
                        NumMbPart <= 3'd4;
                else
                else
                        NumMbPart <= 3'd0;
                        NumMbPart <= 3'd0;
        always @ (sub_mb_pred_state or mbPartIdx or sub_mb_type_reg)
        always @ (sub_mb_pred_state or mbPartIdx or sub_mb_type_reg)
                if (sub_mb_pred_state == `sub_mvd_l0_s)
                if (sub_mb_pred_state == `sub_mvd_l0_s)
                        case (mbPartIdx)
                        case (mbPartIdx)
                                0:
                                0:
                                case (sub_mb_type_reg[1:0])
                                case (sub_mb_type_reg[1:0])
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                endcase
                                endcase
                                1:
                                1:
                                case (sub_mb_type_reg[3:2])
                                case (sub_mb_type_reg[3:2])
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                endcase
                                endcase
                                2:
                                2:
                                case (sub_mb_type_reg[5:4])
                                case (sub_mb_type_reg[5:4])
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                endcase
                                endcase
                                3:
                                3:
                                case (sub_mb_type_reg[7:6])
                                case (sub_mb_type_reg[7:6])
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b00      :NumSubMbPart <= 3'd1;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b01,2'b10:NumSubMbPart <= 3'd2;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                        2'b11      :NumSubMbPart <= 3'd4;
                                endcase
                                endcase
                        endcase
                        endcase
                else
                else
                        NumSubMbPart <= 0;
                        NumSubMbPart <= 0;
 
 
        //mv_below8x8
        //mv_below8x8
        reg [3:0] mv_below8x8;
        reg [3:0] mv_below8x8;
        always @ (posedge clk)
        always @ (posedge clk)
                if (reset_n == 1'b0)
                if (reset_n == 1'b0)
                        mv_below8x8 <= 4'b0;
                        mv_below8x8 <= 4'b0;
                else if (sub_mb_pred_state == `sub_mb_type_s)
                else if (sub_mb_pred_state == `sub_mb_type_s)
                        case (mbPartIdx)
                        case (mbPartIdx)
                                0:mv_below8x8[0] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                0:mv_below8x8[0] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                1:mv_below8x8[1] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                1:mv_below8x8[1] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                2:mv_below8x8[2] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                2:mv_below8x8[2] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                3:mv_below8x8[3] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                                3:mv_below8x8[3] <= (exp_golomb_decoding_output[1:0] == 2'b00)? 1'b0:1'b1;
                        endcase
                        endcase
                else if (slice_data_state == `mb_pred || slice_data_state == `skip_run_duration)
                else if (slice_data_state == `mb_pred || slice_data_state == `skip_run_duration)
                        mv_below8x8 <= 4'b0;
                        mv_below8x8 <= 4'b0;
 
 
endmodule
endmodule
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

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