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

📄 inter_mv_decoding.v

📁 a H.264/AVC Baseline Decoder
💻 V
📖 第 1 页 / 共 5 页
字号:
					endcase				endcase				3:				case (sub_mb_type)					0:mvpAx <= mvx_CurrMb2[15:8];					1:	//8x4					case (subMbPartIdx)						0:mvpAx <= mvx_CurrMb2[15:8];	1:mvpAx <= mvx_CurrMb2[31:24];						default:mvpAx <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpAx <= mvx_CurrMb2[15:8];	1:mvpAx <= mvx_CurrMb3[7:0];						default:mvpAx <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpAx <= mvx_CurrMb2[15:8];	1:mvpAx <= mvx_CurrMb3[7:0];						2:mvpAx <= mvx_CurrMb2[31:24];	3:mvpAx <= mvx_CurrMb3[23:16];						endcase				endcase			endcase		else			mvpAx <= 0;		//-------------	//mvpAy	//-------------	always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state 		or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx 		or mvy_mbAddrA or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3		or refIdxL0_A or refIdxL0_B or refIdxL0_C)			//P_skip or Inter16x16		if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))			mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];		//Inter16x8		else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)			begin				if (mbPartIdx == 0)					mvpAy <= {8{refIdxL0_B}} & mvy_mbAddrA[7:0];				else					mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16]; 			end 		//Inter8x16		else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)			begin				if (mbPartIdx == 0)					mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];				else					mvpAy <= {8{refIdxL0_C}} & mvy_CurrMb0[15:8];			end		//Inter8x8		else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)	//sub_mb_pred			case (mbPartIdx)				0:				case (sub_mb_type)					0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];					1:	//8x4					case (subMbPartIdx)						0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];						1:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[15:8];						default:mvpAy <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0]; 						1:mvpAy <= mvy_CurrMb0[7:0];						default:mvpAy <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];						1:mvpAy <= mvy_CurrMb0[7:0];						2:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[15:8];						3:mvpAy <= mvy_CurrMb0[23:16]; 					endcase				endcase				1:				case (sub_mb_type)					0:mvpAy <= mvy_CurrMb0[15:8];					1:	//8x4					case (subMbPartIdx)						0:mvpAy <= mvy_CurrMb0[15:8];	1:mvpAy <= mvy_CurrMb0[31:24];						default:mvpAy <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpAy <= mvy_CurrMb0[15:8];	1:mvpAy <= mvy_CurrMb1[7:0];						default:mvpAy <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpAy <= mvy_CurrMb0[15:8] ;	1:mvpAy <= mvy_CurrMb1[7:0];						2:mvpAy <= mvy_CurrMb0[31:24];	3:mvpAy <= mvy_CurrMb1[23:16];						endcase				endcase				2:				case (sub_mb_type)					0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];					1:	//8x4					case (subMbPartIdx)						0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];						1:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[31:24];						default:mvpAy <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];						1:mvpAy <= mvy_CurrMb2[7:0];						default:mvpAy <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];						1:mvpAy <= mvy_CurrMb2[7:0];						2:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[31:24];						3:mvpAy <= mvy_CurrMb2[23:16]; 					endcase				endcase				3:				case (sub_mb_type)					0:mvpAy <= mvy_CurrMb2[15:8];					1:	//8x4					case (subMbPartIdx)						0:mvpAy <= mvy_CurrMb2[15:8];	1:mvpAy <= mvy_CurrMb2[31:24];						default:mvpAy <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpAy <= mvy_CurrMb2[15:8];	1:mvpAy <= mvy_CurrMb3[7:0];						default:mvpAy <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpAy <= mvy_CurrMb2[15:8];	1:mvpAy <= mvy_CurrMb3[7:0];						2:mvpAy <= mvy_CurrMb2[31:24];	3:mvpAy <= mvy_CurrMb3[23:16];						endcase				endcase			endcase		else			mvpAy <= 0;	//-------------	//mvpBx 	//-------------	//if B is not available,it can be predicted from A when both B and C are not available	always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or sub_mb_type 		or mb_num or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1] 		or mvx_mbAddrA or mvx_mbAddrB_dout or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3		or refIdxL0_A or refIdxL0_B or refIdxL0_C)		//P_skip or Inter16x16 		if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))			begin				if      (mb_num == 0)	mvpBx <= 0;				else if (mb_num_v == 0)	mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];				else 					mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];			end		//Inter16x8		else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)			begin				if (mbPartIdx == 0)					begin						if      (mb_num == 0)	mvpBx <= 0;						else if (mb_num_v == 0)	mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];						else 					mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];					end				else	//for bottom 8x8 block when mbAddrA is not available					mvpBx <= (!refIdxL0_A)? 0:mvx_CurrMb0[23:16];			end		//Inter8x16:for left 8x8 block when mbAddrA is not available		else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)			begin				if (mbPartIdx == 0)	//left blk					mvpBx <= (refIdxL0_A && !refIdxL0_B)? mvx_mbAddrB_dout[31:24]:0;				else				//right blk					case (!refIdxL0_C)						1'b1:mvpBx <= 0;						1'b0:						if (mb_num_v == 0)							mvpBx <= mvx_CurrMb0[7:0];						else							mvpBx <= (!refIdxL0_B)? mvx_mbAddrB_dout[15:8]:0;					endcase			end		//Inter8x8		else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)				case (mbPartIdx)				0:				case (sub_mb_type)					0:if      (mb_num == 0)	  mvpBx <= 0;					  else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];					  else 					  mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];						1:  //8x4					case (subMbPartIdx)						0:if      (mb_num == 0)	  mvpBx <= 0;					  	  else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];					  	  else 					  mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];							1:mvpBx <= mvx_CurrMb0[7:0];  						default:mvpBx <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:if      (mb_num == 0)	  mvpBx <= 0;					  	  else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];					  	  else 				      mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];						1:if      (mb_num_v == 0) mvpBx <= mvx_CurrMb0[7:0];						  else 					  mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];							default:mvpBx <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:if      (mb_num == 0)	  mvpBx <= 0;					  	  else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];					  	  else 					  mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];						1:if      (mb_num_v == 0) mvpBx <= mvx_CurrMb0[7:0];						  else 					  mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];						2:mvpBx <= mvx_CurrMb0[7:0];						3:mvpBx <= mvx_CurrMb0[15:8]; 					endcase				endcase				1:				case (sub_mb_type)					0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]); 					1:	//8x4					case (subMbPartIdx)						0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);						1:mvpBx <= mvx_CurrMb1[7:0];						default:mvpBx <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);						1:mvpBx <= (mb_num_v == 0)? mvx_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0]);						default:mvpBx <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);						1:mvpBx <= (mb_num_v == 0)? mvx_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0]);						2:mvpBx <= mvx_CurrMb1[7:0];						3:mvpBx <= mvx_CurrMb1[15:8]; 					endcase				endcase				2:				case (sub_mb_type)					0:mvpBx <= mvx_CurrMb0[23:16]; 					1:	//8x4					case (subMbPartIdx)						0:mvpBx <= mvx_CurrMb0[23:16];	1:mvpBx <= mvx_CurrMb2[7:0];	default:mvpBx <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpBx <= mvx_CurrMb0[23:16];	1:mvpBx <= mvx_CurrMb0[31:24];	default:mvpBx <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpBx <= mvx_CurrMb0[23:16];	1:mvpBx <= mvx_CurrMb0[31:24];						2:mvpBx <= mvx_CurrMb2[7:0];	3:mvpBx <= mvx_CurrMb2[15:8]; 					endcase				endcase				3:				case (sub_mb_type)					0:mvpBx <= mvx_CurrMb1[23:16]; 					1:	//8x4					case (subMbPartIdx)						0:mvpBx <= mvx_CurrMb1[23:16];	1:mvpBx <= mvx_CurrMb3[7:0];	default:mvpBx <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:mvpBx <= mvx_CurrMb1[23:16];	1:mvpBx <= mvx_CurrMb1[31:24];	default:mvpBx <= 0;					endcase					3:	//4x4					case (subMbPartIdx)						0:mvpBx <= mvx_CurrMb1[23:16];	1:mvpBx <= mvx_CurrMb1[31:24];						2:mvpBx <= mvx_CurrMb3[7:0];	3:mvpBx <= mvx_CurrMb3[15:8]; 					endcase				endcase			endcase		else			mvpBx <= 0;	//-------------	//mvpBy 	//-------------	//if B is not available,it can be predicted from A when both B and C are not available	always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or sub_mb_type 		or mb_num or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1] 		or mvy_mbAddrA or mvy_mbAddrB_dout or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3		or refIdxL0_A or refIdxL0_B or refIdxL0_C)		//P_skip or Inter16x16 		if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))			begin				if      (mb_num == 0)	mvpBy <= 0;				else if (mb_num_v == 0)	mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];				else 					mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];			end		//Inter16x8		else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)			begin				if (mbPartIdx == 0) //upper 8x8 block					begin						if      (mb_num == 0)	mvpBy <= 0;						else if (mb_num_v == 0)	mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];						else 					mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];					end				else	//for bottom 8x8 block when mbAddrA is not available					mvpBy <= (!refIdxL0_A)? 0:mvy_CurrMb0[23:16];			end		//Inter8x16:for left 8x8 block when mbAddrA is not available		else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)			begin				if (mbPartIdx == 0)	//left blk					mvpBy <= (refIdxL0_A && !refIdxL0_B)? mvy_mbAddrB_dout[31:24]:0;				else				//right blk					case (!refIdxL0_C)						1'b1:mvpBy <= 0;						1'b0:						if (mb_num_v == 0)							mvpBy <= mvy_CurrMb0[7:0];						else							mvpBy <= (!refIdxL0_B)? mvy_mbAddrB_dout[15:8]:0;					endcase			end		//Inter8x8		else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)				case (mbPartIdx)				0:				case (sub_mb_type)					0:if      (mb_num == 0)		mvpBy <= 0;					  else if (mb_num_v == 0) 	mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];					  else 						mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];						1:  //8x4					case (subMbPartIdx)						0:if      (mb_num == 0)		mvpBy <= 0;					  	  else if (mb_num_v == 0) 	mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];					  	  else 						mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];							1:mvpBy <= mvy_CurrMb0[7:0];  						default:mvpBy <= 0;					endcase					2:	//4x8					case (subMbPartIdx)						0:if      (mb_num == 0)		mvpBy <= 0;					  	  else if (mb_num_v == 0) 	mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];					  	  else 						mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];						1:if      (mb_num_v == 0) 	mvpBy <= mvy_CurrMb0[7:0];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -