⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syntax_decoding.v

📁 H.264标准解码器全部verilog源码
💻 V
📖 第 1 页 / 共 2 页
字号:
//--------------------------------------------------------------------------------------------------// 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 + -