?? bitstream_parser_fsm_gating.v
字號:
//--------------------------------------------------------------------------------------------------// Design : nova// Author(s) : Ke Xu// Email : eexuke@yahoo.com// File : BitStream_parser_FSM_gating.v// Generated : June 26,2005// Copyright (C) 2008 Ke Xu //-------------------------------------------------------------------------------------------------// Description // BitStream_parser_FSM,clock gating version//-------------------------------------------------------------------------------------------------// synopsys translate_off`include "timescale.v"// synopsys translate_on`include "nova_defines.v"module BitStream_parser_FSM (clk,reset_n,end_of_one_blk4x4_sum,end_of_MB_DEC, gclk_parser,gclk_nal,gclk_slice,gclk_sps,gclk_pps,gclk_slice_header, gclk_slice_data,gclk_residual,gclk_cavlc, trigger_CAVLC,BitStream_buffer_valid_n,nal_unit_type, slice_type,num_ref_idx_active_override_flag, deblocking_filter_control_present_flag,disable_deblocking_filter_idc, mb_skip_run,mb_type_general,prev_intra4x4_pred_mode_flag,CodedBlockPatternLuma, CodedBlockPatternChroma,pc_2to0,NumSubMbPart,NumMbPart, TotalCoeff,TrailingOnes,maxNumCoeff,zerosLeft,run, parser_state,nal_unit_state,slice_layer_wo_partitioning_state,slice_header_state,slice_header_s6, ref_pic_list_reordering_state,dec_ref_pic_marking_state,slice_data_state,sub_mb_pred_state, mb_pred_state,seq_parameter_set_state,pic_parameter_set_state,residual_state,cavlc_decoder_state, heading_one_en,pic_num,mb_num,mb_num_h,mb_num_v, NextMB_IsSkip,LowerMB_IsSkip,Is_skip_run_entry,Is_skip_run_end, luma4x4BlkIdx,mbPartIdx,subMbPartIdx,compIdx,i8x8,i4x4,i4x4_CbCr, coeffNum,i_level,i_run,i_TotalCoeff, suffix_length_initialized,IsRunLoop); input clk; input reset_n; input end_of_one_blk4x4_sum; input end_of_MB_DEC; input gclk_parser; input gclk_nal; input gclk_slice; input gclk_sps; input gclk_pps; input gclk_slice_header; input gclk_slice_data; input gclk_residual; input gclk_cavlc; input trigger_CAVLC; input BitStream_buffer_valid_n; input [4:0] nal_unit_type; input [2:0] slice_type; input num_ref_idx_active_override_flag; input deblocking_filter_control_present_flag; input [1:0] disable_deblocking_filter_idc; input [6:0] mb_skip_run; input [3:0] mb_type_general; input prev_intra4x4_pred_mode_flag; input [3:0] CodedBlockPatternLuma; input [1:0] CodedBlockPatternChroma; input [2:0] pc_2to0; input [2:0] NumMbPart; input [2:0] NumSubMbPart; input [4:0] TotalCoeff; input [1:0] TrailingOnes; input [4:0] maxNumCoeff; input [3:0] zerosLeft; input [3:0] run; output [1:0] parser_state; output [2:0] nal_unit_state; output [1:0] slice_layer_wo_partitioning_state; output [3:0] slice_header_state; output slice_header_s6; output [2:0] ref_pic_list_reordering_state; output [1:0] dec_ref_pic_marking_state; output [3:0] slice_data_state; output [1:0] sub_mb_pred_state; output [2:0] mb_pred_state; output [3:0] seq_parameter_set_state; output [3:0] pic_parameter_set_state; output [3:0] residual_state; output [3:0] cavlc_decoder_state; output heading_one_en; output [5:0] pic_num; output [6:0] mb_num; output [3:0] mb_num_h; output [3:0] mb_num_v; output NextMB_IsSkip; output LowerMB_IsSkip; output Is_skip_run_entry; output Is_skip_run_end; output [3:0] luma4x4BlkIdx; output [1:0] mbPartIdx; output [1:0] subMbPartIdx; output compIdx; output [1:0] i8x8,i4x4; output [1:0] i4x4_CbCr; output [3:0] coeffNum; output [3:0] i_level; output [3:0] i_run; output [3:0] i_TotalCoeff; output suffix_length_initialized; output IsRunLoop; reg [1:0] parser_state; reg [2:0] nal_unit_state; reg [1:0] slice_layer_wo_partitioning_state; reg [3:0] seq_parameter_set_state; reg [3:0] pic_parameter_set_state; reg [3:0] slice_header_state; reg [2:0] ref_pic_list_reordering_state; reg [1:0] dec_ref_pic_marking_state; reg [3:0] slice_data_state; reg [2:0] mb_pred_state; reg [1:0] sub_mb_pred_state; reg [3:0] residual_state; reg [3:0] cavlc_decoder_state; wire heading_one_en; reg [6:0] mb_num; reg [3:0] mb_num_h; reg [3:0] mb_num_v; reg [1:0] mbPartIdx; reg [1:0] subMbPartIdx; reg compIdx; reg [1:0] i8x8,i4x4; reg [1:0] i4x4_CbCr; reg [3:0] coeffNum; reg [3:0] coeffNum_reg; reg [3:0] i_level,i_run,i_TotalCoeff; reg [6:0] count_mb_skip_run;//number of MBs to be skipped reg [7:0] count_pcm_byte; reg [3:0] luma4x4BlkIdx; reg [5:0] pic_num; reg suffix_length_initialized; reg IsRunLoop; /* // synopsys translate_off integer tracefile; initial begin tracefile = $fopen("trace.txt"); end // synopsys translate_on */ //-------------- //parser_state //-------------- always @ (posedge gclk_parser or negedge reset_n) if (reset_n == 0) parser_state <= `rst_parser; else case (parser_state) `rst_parser :parser_state <= (BitStream_buffer_valid_n == 1'b0)? `start_code_prefix:`rst_parser; `start_code_prefix:parser_state <= `nal_unit; `nal_unit :parser_state <= `rst_parser; endcase //--------------- //nal_unit_state //--------------- always @ (posedge gclk_nal or negedge reset_n) if (reset_n == 0) nal_unit_state <= `rst_nal_unit; else case (nal_unit_state) `rst_nal_unit:nal_unit_state <= `forbidden_zero_bit_2_nal_unit_type; `forbidden_zero_bit_2_nal_unit_type: case (nal_unit_type) 5'b00001:nal_unit_state <= `slice_layer_non_IDR_rbsp; 5'b00101:nal_unit_state <= `slice_layer_IDR_rbsp; 5'b00111:nal_unit_state <= `seq_parameter_set_rbsp; 5'b01000:nal_unit_state <= `pic_parameter_set_rbsp; endcase `slice_layer_non_IDR_rbsp,`slice_layer_IDR_rbsp:nal_unit_state <= `rbsp_trailing_one_bit; `seq_parameter_set_rbsp :nal_unit_state <= `rbsp_trailing_one_bit; `pic_parameter_set_rbsp :nal_unit_state <= `rbsp_trailing_one_bit; `rbsp_trailing_one_bit :nal_unit_state <= (pc_2to0 == 3'b000)? `rst_nal_unit:`rbsp_trailing_zero_bits; `rbsp_trailing_zero_bits:nal_unit_state <= `rst_nal_unit; endcase //---------------------------------- //slice_layer_wo_partitioning_state //---------------------------------- always @ (posedge gclk_slice or negedge reset_n) if (reset_n == 1'b0) slice_layer_wo_partitioning_state <= `rst_slice_layer_wo_partitioning; else case (slice_layer_wo_partitioning_state) `rst_slice_layer_wo_partitioning :slice_layer_wo_partitioning_state <= `slice_header; `slice_header :slice_layer_wo_partitioning_state <= `slice_data; `slice_data :slice_layer_wo_partitioning_state <= `rst_slice_layer_wo_partitioning; endcase //------------------------ //seq_parameter_set_state //------------------------ always @ (posedge gclk_sps or negedge reset_n) if (reset_n == 0) seq_parameter_set_state <= `rst_seq_parameter_set; else case (seq_parameter_set_state) `rst_seq_parameter_set :seq_parameter_set_state <= `fixed_header; `fixed_header :seq_parameter_set_state <= `level_idc_s; `level_idc_s :seq_parameter_set_state <= `seq_parameter_set_id_sps_s; `seq_parameter_set_id_sps_s :seq_parameter_set_state <= `log2_max_frame_num_minus4_s; `log2_max_frame_num_minus4_s :seq_parameter_set_state <= `pic_order_cnt_type_s; `pic_order_cnt_type_s :seq_parameter_set_state <= `log2_max_pic_order_cnt_lsb_minus4_s; `log2_max_pic_order_cnt_lsb_minus4_s :seq_parameter_set_state <= `num_ref_frames_s; `num_ref_frames_s :seq_parameter_set_state <= `gaps_in_frame_num_value_allowed_flag_s; `gaps_in_frame_num_value_allowed_flag_s :seq_parameter_set_state <= `pic_width_in_mbs_minus1_s; `pic_width_in_mbs_minus1_s :seq_parameter_set_state <= `pic_height_in_map_units_minus1_s; `pic_height_in_map_units_minus1_s :seq_parameter_set_state <= `frame_mbs_only_flag_2_frame_cropping_flag; `frame_mbs_only_flag_2_frame_cropping_flag:seq_parameter_set_state <= `vui_parameter_present_flag_s; `vui_parameter_present_flag_s :seq_parameter_set_state <= `rst_seq_parameter_set; endcase //------------------------ //pic_parameter_set_state //------------------------ always @ (posedge gclk_pps or negedge reset_n) if (reset_n == 0) pic_parameter_set_state <= `rst_pic_parameter_set; else case (pic_parameter_set_state) `rst_pic_parameter_set :pic_parameter_set_state <= `pic_parameter_set_id_pps_s; `pic_parameter_set_id_pps_s :pic_parameter_set_state <= `seq_parameter_set_id_pps_s; `seq_parameter_set_id_pps_s :pic_parameter_set_state <= `entropy_coding_mode_flag_2_pic_order_present_flag; `entropy_coding_mode_flag_2_pic_order_present_flag :pic_parameter_set_state <= `num_slice_groups_minus1_s; `num_slice_groups_minus1_s :pic_parameter_set_state <= `num_ref_idx_l0_active_minus1_pps_s; `num_ref_idx_l0_active_minus1_pps_s :pic_parameter_set_state <= `num_ref_idx_l1_active_minus1_pps_s; `num_ref_idx_l1_active_minus1_pps_s :pic_parameter_set_state <= `weighted_pred_flag_2_weighted_bipred_idc; `weighted_pred_flag_2_weighted_bipred_idc :pic_parameter_set_state <= `pic_init_qp_minus26_s; `pic_init_qp_minus26_s :pic_parameter_set_state <= `pic_init_qs_minus26_s; `pic_init_qs_minus26_s :pic_parameter_set_state <= `chroma_qp_index_offset_s; `chroma_qp_index_offset_s :pic_parameter_set_state <= `deblocking_filter_control_2_redundant_pic_cnt_present_flag; `deblocking_filter_control_2_redundant_pic_cnt_present_flag:pic_parameter_set_state <= `rst_pic_parameter_set; endcase //------------------- //slice_header_state //------------------- always @ (posedge gclk_slice_header or negedge reset_n) if (reset_n == 0) begin slice_header_state <= `rst_slice_header; ref_pic_list_reordering_state <= `rst_ref_pic_list_reordering; dec_ref_pic_marking_state <= `rst_dec_ref_pic_marking; end else case (slice_header_state) `rst_slice_header :slice_header_state <= `first_mb_in_slice_s; `first_mb_in_slice_s :slice_header_state <= `slice_type_s; `slice_type_s :slice_header_state <= `pic_parameter_set_id_slice_header_s; `pic_parameter_set_id_slice_header_s:slice_header_state <= `frame_num_s; `frame_num_s: if (nal_unit_type == 5'b00101) slice_header_state <= `idr_pic_id_s; else slice_header_state <= `pic_order_cnt_lsb_s; `idr_pic_id_s :slice_header_state <= `pic_order_cnt_lsb_s; `pic_order_cnt_lsb_s: if (slice_type == 3'b101) slice_header_state <= `num_ref_idx_active_override_flag_s; else slice_header_state <= `dec_ref_pic_marking; `num_ref_idx_active_override_flag_s: if (num_ref_idx_active_override_flag == 1'b1) slice_header_state <= `num_ref_idx_l0_active_minus1_slice_header_s; else slice_header_state <= `ref_pic_list_reordering; `num_ref_idx_l0_active_minus1_slice_header_s :slice_header_state <= `ref_pic_list_reordering; `ref_pic_list_reordering: case (ref_pic_list_reordering_state) `rst_ref_pic_list_reordering: if (slice_type == 3'b101) ref_pic_list_reordering_state <= `ref_pic_list_reordering_flag_l0_s; else begin ref_pic_list_reordering_state <= `rst_ref_pic_list_reordering; slice_header_state <= `dec_ref_pic_marking; end `ref_pic_list_reordering_flag_l0_s: begin ref_pic_list_reordering_state <= `rst_ref_pic_list_reordering; slice_header_state <= `dec_ref_pic_marking; end endcase `dec_ref_pic_marking: case (dec_ref_pic_marking_state) `rst_dec_ref_pic_marking: dec_ref_pic_marking_state <= (nal_unit_type == 3'b101)? `no_output_of_prior_pics_flag_2_long_term_reference_flag:`adaptive_ref_pic_marking_mode_flag_s; `no_output_of_prior_pics_flag_2_long_term_reference_flag: begin dec_ref_pic_marking_state <= `rst_dec_ref_pic_marking; slice_header_state <= `slice_qp_delta_s; end `adaptive_ref_pic_marking_mode_flag_s: begin dec_ref_pic_marking_state <= `rst_dec_ref_pic_marking; slice_header_state <= `slice_qp_delta_s; end endcase `slice_qp_delta_s: slice_header_state <= (deblocking_filter_control_present_flag == 1'b1)? `disable_deblocking_filter_idc_s:`rst_slice_header; `disable_deblocking_filter_idc_s: slice_header_state <= (disable_deblocking_filter_idc != 2'b01)? `slice_alpha_c0_offset_div2_s:`rst_slice_header; `slice_alpha_c0_offset_div2_s:slice_header_state <= `slice_beta_offset_div2_s; `slice_beta_offset_div2_s :slice_header_state <= `rst_slice_header; endcase assign slice_header_s6 = (slice_header_state == `frame_num_s)? 1'b1:1'b0; //------------------ //slice_data_state //------------------ reg Is_skip_run_entry; //for trigger inter pred.Originally it's a wire type which will trigger inter_pred signal too early //than expected:cause inter_pred rise up before mv_below8x8 is set to 4'b0 for P_skip.Thus the //preload_counter after inter_pred will sample wrong mv_below8x8/mv_below8x8_curr. //Then it is changed to reg type to appear one cycle later @ May 15,2006 wire Is_skip_run_end; //for stop triggering inter pred always @ (posedge clk) if (reset_n == 1'b0) Is_skip_run_entry <= 1'b0; else if (slice_data_state == `mb_skip_run_s && mb_skip_run != 0) Is_skip_run_entry <= 1'b1; else Is_skip_run_entry <= 1'b0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -