📄 syntax_decoding.v
字号:
//--------------------------------------------------------------------------------------------------// Design : nova// Author(s) : Ke Xu// Email : eexuke@yahoo.com// File : syntax_decoding.v// Generated : May 23, 2005// Copyright (C) 2008 Ke Xu //-------------------------------------------------------------------------------------------------// Description // Decoding each sytax inside the bitstream//-------------------------------------------------------------------------------------------------// synopsys translate_off`include "timescale.v"// synopsys translate_on`include "nova_defines.v"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, 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, nal_unit_type,start_code_prefix_found, deblocking_filter_control_present_flag,disable_deblocking_filter_idc,disable_DF, slice_alpha_c0_offset_div2,slice_beta_offset_div2, mb_skip_run,NumMbPart,NumSubMbPart, MBTypeGen_mbAddrA,MBTypeGen_mbAddrD,MBTypeGen_mbAddrB_reg, 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, slice_type,mb_type,mb_type_general,sub_mb_type,Intra16x16_predmode,intra_chroma_pred_mode, pic_init_qp_minus26,chroma_qp_index_offset, rem_intra4x4_pred_mode,prev_intra4x4_pred_mode_flag,mvd,mv_below8x8); input clk,reset_n; input [3:0] mb_num_h,mb_num_v; input end_of_MB_DEC; input pin_disable_DF; input [1:0] parser_state; input [2:0] nal_unit_state; input [3:0] seq_parameter_set_state; input [3:0] pic_parameter_set_state; input [3:0] slice_header_state; input [3:0] slice_data_state; input [2:0] mb_pred_state; input [1:0] sub_mb_pred_state; input [15:0] BitStream_buffer_output; input [7:0] exp_golomb_decoding_output; input [9:0] dependent_variable_decoding_output; input [1:0] mbPartIdx; output [4:0] nal_unit_type; output start_code_prefix_found; output deblocking_filter_control_present_flag; output [1:0] disable_deblocking_filter_idc; output disable_DF; output [3:0] slice_alpha_c0_offset_div2; output [3:0] slice_beta_offset_div2; output [6:0] mb_skip_run; output [2:0] NumMbPart; output [2:0] NumSubMbPart; output [1:0] MBTypeGen_mbAddrA; output MBTypeGen_mbAddrD; output [21:0] MBTypeGen_mbAddrB_reg; output [3:0] log2_max_frame_num_minus4; output [3:0] log2_max_pic_order_cnt_lsb_minus4; output constrained_intra_pred_flag; output num_ref_idx_active_override_flag; output [2:0] num_ref_idx_l0_active_minus1; output [2:0] slice_type; output [4:0] mb_type; output [3:0] mb_type_general; output [1:0] Intra16x16_predmode; output [1:0] intra_chroma_pred_mode; output [1:0] sub_mb_type; output [5:0] pic_init_qp_minus26; output [4:0] chroma_qp_index_offset; output [2:0] rem_intra4x4_pred_mode; output prev_intra4x4_pred_mode_flag; output [7:0] mvd; output [3:0] mv_below8x8; //-------------------------- //start_code_prefix //-------------------------- reg start_code_prefix_found; always @ (parser_state or BitStream_buffer_output) if (parser_state == `start_code_prefix) begin if (BitStream_buffer_output == 16'b0000000000000001) start_code_prefix_found <= 1; else start_code_prefix_found <= 0; end else start_code_prefix_found <= 0; //-------------------------- //nal_unit //-------------------------- reg forbidden_zero_bit; reg [1:0] nal_ref_idc; reg [4:0] nal_unit_type_reg; 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; always @ (posedge clk) if (reset_n == 0) begin forbidden_zero_bit <= 0; nal_ref_idc <= 0; nal_unit_type_reg <= 0; end else if (nal_unit_state == `forbidden_zero_bit_2_nal_unit_type) begin forbidden_zero_bit <= BitStream_buffer_output[15]; nal_ref_idc <= BitStream_buffer_output[14:13]; nal_unit_type_reg <= nal_unit_type; end //-------------------------- //seq_parameter_set //-------------------------- reg [7:0] profile_idc; reg constraint_set0_flag,constraint_set1_flag,constraint_set2_flag,constraint_set3_flag; reg [3:0] reserved_zero_4bits; reg [7:0] level_idc; reg [4:0] seq_parameter_set_id_sps; reg [3:0] log2_max_frame_num_minus4; reg [1:0] pic_order_cnt_type; 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 gaps_in_frame_num_value_allowed_flag; reg [3:0] pic_width_in_mbs_minus1; reg [3:0] pic_height_in_map_units_minus1; reg frame_mbs_only_flag; reg direct_8x8_inference_flag; reg frame_cropping_flag; reg vui_parameter_present_flag; always @ (posedge clk) if (reset_n == 0) begin profile_idc <= 0; constraint_set0_flag <= 0; constraint_set1_flag <= 0; constraint_set2_flag <= 0; constraint_set3_flag <= 0; reserved_zero_4bits <= 0; level_idc <= 0; seq_parameter_set_id_sps <= 0; log2_max_frame_num_minus4 <= 0; pic_order_cnt_type <= 0; log2_max_pic_order_cnt_lsb_minus4 <= 0; num_ref_frames <= 0; gaps_in_frame_num_value_allowed_flag <= 0; pic_width_in_mbs_minus1 <= 0; pic_height_in_map_units_minus1 <= 0; frame_mbs_only_flag <= 0; direct_8x8_inference_flag <= 0; frame_cropping_flag <= 0; vui_parameter_present_flag <= 0; end else case (seq_parameter_set_state) `fixed_header: begin profile_idc <= BitStream_buffer_output[15:8]; constraint_set0_flag <= BitStream_buffer_output[7]; constraint_set1_flag <= BitStream_buffer_output[6]; constraint_set2_flag <= BitStream_buffer_output[5]; constraint_set3_flag <= BitStream_buffer_output[4]; reserved_zero_4bits <= BitStream_buffer_output[3:0]; end `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]; `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]; `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]; `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_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: begin frame_mbs_only_flag <= BitStream_buffer_output[15]; direct_8x8_inference_flag <= BitStream_buffer_output[14]; frame_cropping_flag <= BitStream_buffer_output[13]; end `vui_parameter_present_flag_s:vui_parameter_present_flag <= BitStream_buffer_output[15]; endcase //-------------------------- //pic_parameter_set //-------------------------- reg [7:0] pic_parameter_set_id_pps; reg [4:0] seq_parameter_set_id_pps; reg entropy_coding_mode_flag; reg pic_order_present_flag; reg [2:0] num_slice_groups_minus1; reg [2:0] num_ref_idx_l0_active_minus1; reg [2:0] num_ref_idx_l1_active_minus1; reg weighted_pred_flag; reg [1:0] weighted_bipred_idc; reg [5:0] pic_init_qp_minus26,pic_init_qs_minus26; reg [4:0] chroma_qp_index_offset; reg deblocking_filter_control_present_flag; reg constrained_intra_pred_flag; reg redundant_pic_cnt_present_flag; always @ (posedge clk) if (reset_n == 0) begin pic_parameter_set_id_pps <= 0; seq_parameter_set_id_pps <= 0; entropy_coding_mode_flag <= 0; pic_order_present_flag <= 0; num_slice_groups_minus1 <= 0; num_ref_idx_l0_active_minus1 <= 0; num_ref_idx_l1_active_minus1 <= 0; weighted_pred_flag <= 0; weighted_bipred_idc <= 0; pic_init_qp_minus26 <= 0; pic_init_qs_minus26 <= 0; chroma_qp_index_offset <= 0; deblocking_filter_control_present_flag <= 0; constrained_intra_pred_flag <= 0; redundant_pic_cnt_present_flag <= 0; end else case (pic_parameter_set_state) `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]; `entropy_coding_mode_flag_2_pic_order_present_flag: begin entropy_coding_mode_flag <= BitStream_buffer_output[15]; pic_order_present_flag <= BitStream_buffer_output[14]; end `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_l1_active_minus1_pps_s:num_ref_idx_l1_active_minus1 <= exp_golomb_decoding_output[2:0]; `weighted_pred_flag_2_weighted_bipred_idc: begin weighted_pred_flag <= BitStream_buffer_output[15]; weighted_bipred_idc <= BitStream_buffer_output[14:13]; end `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]; `chroma_qp_index_offset_s:chroma_qp_index_offset <= exp_golomb_decoding_output[4:0]; `deblocking_filter_control_2_redundant_pic_cnt_present_flag: begin deblocking_filter_control_present_flag <= BitStream_buffer_output[15]; constrained_intra_pred_flag <= BitStream_buffer_output[14]; redundant_pic_cnt_present_flag <= BitStream_buffer_output[13]; end endcase //-------------------------- //slice_header //-------------------------- reg first_mb_in_slice; reg [2:0] slice_type; reg [7:0] pic_parameter_set_id_slice_header; reg [3:0] frame_num; reg idr_pic_id; reg [9:0] pic_order_cnt_lsb; reg num_ref_idx_active_override_flag; reg [1:0] disable_deblocking_filter_idc; reg [3:0] slice_alpha_c0_offset_div2_dec; reg [3:0] slice_beta_offset_div2_dec; always @ (posedge clk) if (reset_n == 0) begin first_mb_in_slice <= 0; slice_type <= 0; pic_parameter_set_id_slice_header <= 0; frame_num <= 0; idr_pic_id <= 0; pic_order_cnt_lsb <= 0; num_ref_idx_active_override_flag <= 0; disable_deblocking_filter_idc <= 0; slice_alpha_c0_offset_div2_dec <= 0; slice_beta_offset_div2_dec <= 0; end else case (slice_header_state) `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]; `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]; `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]; `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: //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]; `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_group_change_cycle_s: endcase wire [3:0] slice_alpha_c0_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_beta_offset_div2 = {4{deblocking_filter_control_present_flag}} & slice_beta_offset_div2_dec; reg sw_disable_DF; always @ (posedge clk) if (reset_n == 0) sw_disable_DF <= 0; else if (slice_header_state == `disable_deblocking_filter_idc_s && disable_deblocking_filter_idc == 1) sw_disable_DF <= 1; else sw_disable_DF <= 0; assign disable_DF = sw_disable_DF | pin_disable_DF; //-------------------------- //slice_data //-------------------------- wire [6:0] mb_skip_run; reg [6:0] mb_skip_run_reg;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -