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

📄 bs_decoding.v

📁 a H.264/AVC Baseline Decoder
💻 V
📖 第 1 页 / 共 4 页
字号:
									always @ (end_of_MB_DEC or disable_DF or bs_dec_counter or mb_type_general_DF		or mb_num_v or MBTypeGen_mbAddrB or MB_inter_size 		or mbAddrB_mvx or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3		or mbAddrB_mvy or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3)		if ((end_of_MB_DEC && disable_DF == 1'b0) || bs_dec_counter != 0)			begin				//-----------------------				//Current MB is P_skip				//-----------------------				if (mb_type_general_DF == `MB_P_skip && bs_dec_counter == 2'b00)	//H0					begin						if (mb_num_v != 0 && MBTypeGen_mbAddrB == `MB_addrA_addrB_P_skip)		//mbAddrB is P_skip							begin 								mvx_H0_diff_a <= mbAddrB_mvx[31:24]; mvx_H0_diff_b <= mvx_CurrMb0[7:0];								mvx_H1_diff_a <= 0; mvx_H1_diff_b <= 0;	 								mvx_H2_diff_a <= 0; mvx_H2_diff_b <= 0;								mvx_H3_diff_a <= 0; mvx_H3_diff_b <= 0;									mvy_H0_diff_a <= mbAddrB_mvy[31:24]; mvy_H0_diff_b <= mvy_CurrMb0[7:0];								mvy_H1_diff_a <= 0; mvy_H1_diff_b <= 0;	 								mvy_H2_diff_a <= 0; mvy_H2_diff_b <= 0;								mvy_H3_diff_a <= 0; mvy_H3_diff_b <= 0;							end 						else if (mb_num_v != 0 && MBTypeGen_mbAddrB == 2'b00)	//mbAddrB is Inter							begin								mvx_H0_diff_a <= mbAddrB_mvx[31:24]; mvx_H0_diff_b <= mvx_CurrMb0[7:0];								mvx_H1_diff_a <= mbAddrB_mvx[23:16]; mvx_H1_diff_b <= mvx_CurrMb0[7:0];								mvx_H2_diff_a <= mbAddrB_mvx[15:8];  mvx_H2_diff_b <= mvx_CurrMb0[7:0];								mvx_H3_diff_a <= mbAddrB_mvx[7:0];   mvx_H3_diff_b <= mvx_CurrMb0[7:0];								mvy_H0_diff_a <= mbAddrB_mvy[31:24]; mvy_H0_diff_b <= mvy_CurrMb0[7:0];								mvy_H1_diff_a <= mbAddrB_mvy[23:16]; mvy_H1_diff_b <= mvy_CurrMb0[7:0];								mvy_H2_diff_a <= mbAddrB_mvy[15:8];  mvy_H2_diff_b <= mvy_CurrMb0[7:0];								mvy_H3_diff_a <= mbAddrB_mvy[7:0];   mvy_H3_diff_b <= mvy_CurrMb0[7:0];							end						else								begin 								mvx_H0_diff_a <= 0; mvx_H0_diff_b <= 0;								mvx_H1_diff_a <= 0; mvx_H1_diff_b <= 0;	 								mvx_H2_diff_a <= 0; mvx_H2_diff_b <= 0;								mvx_H3_diff_a <= 0; mvx_H3_diff_b <= 0;									mvy_H0_diff_a <= 0; mvy_H0_diff_b <= 0;								mvy_H1_diff_a <= 0; mvy_H1_diff_b <= 0;	 								mvy_H2_diff_a <= 0; mvy_H2_diff_b <= 0;								mvy_H3_diff_a <= 0; mvy_H3_diff_b <= 0;							end					end					//-----------------------				//Current MB is Inter				//-----------------------				else if (mb_type_general_DF[3] == 1'b0)					case (bs_dec_counter)						2'b00:	//H0						if (mb_num_v != 0 && (MBTypeGen_mbAddrB[1] == 1'b0))//mbAddrB is P_skip or Inter							begin								mvx_H0_diff_a <= mbAddrB_mvx[31:24]; mvx_H0_diff_b <= mvx_CurrMb0[7:0];																mvx_H1_diff_a <= mbAddrB_mvx[23:16]; 								mvx_H1_diff_b <= (MB_inter_size == `I16x16)? mvx_CurrMb0[7:0]:mvx_CurrMb0[15:8];																mvx_H2_diff_a <= mbAddrB_mvx[15:8];  								mvx_H2_diff_b <= (MB_inter_size == `I16x16)? mvx_CurrMb0[7:0]:mvx_CurrMb1[7:0];																mvx_H3_diff_a <= mbAddrB_mvx[7:0];   								mvx_H3_diff_b <= (MB_inter_size == `I16x16)? mvx_CurrMb0[7:0]:mvx_CurrMb1[15:8];																mvy_H0_diff_a <= mbAddrB_mvy[31:24]; mvy_H0_diff_b <= mvy_CurrMb0[7:0];																mvy_H1_diff_a <= mbAddrB_mvy[23:16]; 								mvy_H1_diff_b <= (MB_inter_size == `I16x16)? mvy_CurrMb0[7:0]:mvy_CurrMb0[15:8];																mvy_H2_diff_a <= mbAddrB_mvy[15:8];  								mvy_H2_diff_b <= (MB_inter_size == `I16x16)? mvy_CurrMb0[7:0]:mvy_CurrMb1[7:0];																mvy_H3_diff_a <= mbAddrB_mvy[7:0];   								mvy_H3_diff_b <= (MB_inter_size == `I16x16)? mvy_CurrMb0[7:0]:mvy_CurrMb1[15:8];							end						else							begin 								mvx_H0_diff_a <= 0; mvx_H0_diff_b <= 0;								mvx_H1_diff_a <= 0; mvx_H1_diff_b <= 0;	 								mvx_H2_diff_a <= 0; mvx_H2_diff_b <= 0;								mvx_H3_diff_a <= 0; mvx_H3_diff_b <= 0;									mvy_H0_diff_a <= 0; mvy_H0_diff_b <= 0;								mvy_H1_diff_a <= 0; mvy_H1_diff_b <= 0;	 								mvy_H2_diff_a <= 0; mvy_H2_diff_b <= 0;								mvy_H3_diff_a <= 0; mvy_H3_diff_b <= 0;							end						2'b11:	//H1						begin							mvx_H0_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb0[7:0];  							mvx_H0_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb0[23:16];							mvx_H1_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb0[15:8]; 							mvx_H1_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb0[31:24];							mvx_H2_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb1[7:0];							mvx_H2_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb1[23:16];							mvx_H3_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb1[15:8];							mvx_H3_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb1[31:24];															mvy_H0_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb0[7:0];  							mvy_H0_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb0[23:16];							mvy_H1_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb0[15:8]; 							mvy_H1_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb0[31:24];							mvy_H2_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb1[7:0];							mvy_H2_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb1[23:16];							mvy_H3_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb1[15:8];							mvy_H3_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb1[31:24];							end						2'b10:	//H2						begin							mvx_H0_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb0[23:16];  							mvx_H0_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb2[7:0];							mvx_H1_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb0[31:24]; 							mvx_H1_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb2[15:8];							mvx_H2_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb1[23:16];							mvx_H2_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb3[7:0];							mvx_H3_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb1[31:24];							mvx_H3_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvx_CurrMb3[15:8]; 														mvy_H0_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb0[23:16];  							mvy_H0_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb2[7:0];							mvy_H1_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb0[31:24]; 							mvy_H1_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb2[15:8];							mvy_H2_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb1[23:16];							mvy_H2_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb3[7:0];							mvy_H3_diff_a <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb1[31:24];							mvy_H3_diff_b <= (MB_inter_size == `I16x16 || MB_inter_size == `I8x16)? 0:mvy_CurrMb3[15:8]; 													end						2'b01:	//H3						begin							mvx_H0_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb2[7:0];  							mvx_H0_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb2[23:16];							mvx_H1_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb2[15:8]; 							mvx_H1_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb2[31:24];							mvx_H2_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb3[7:0];							mvx_H2_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb3[23:16];							mvx_H3_diff_a <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb3[15:8];							mvx_H3_diff_b <= (MB_inter_size != `I8x8)? 0:mvx_CurrMb3[31:24];														mvy_H0_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb2[7:0];  							mvy_H0_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb2[23:16];							mvy_H1_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb2[15:8]; 							mvy_H1_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb2[31:24];							mvy_H2_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb3[7:0];							mvy_H2_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb3[23:16];							mvy_H3_diff_a <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb3[15:8];							mvy_H3_diff_b <= (MB_inter_size != `I8x8)? 0:mvy_CurrMb3[31:24];						end						endcase				else					begin 						mvx_H0_diff_a <= 0; mvx_H0_diff_b <= 0;						mvx_H1_diff_a <= 0; mvx_H1_diff_b <= 0;	 						mvx_H2_diff_a <= 0; mvx_H2_diff_b <= 0;						mvx_H3_diff_a <= 0; mvx_H3_diff_b <= 0;						mvy_H0_diff_a <= 0; mvy_H0_diff_b <= 0;						mvy_H1_diff_a <= 0; mvy_H1_diff_b <= 0;	 						mvy_H2_diff_a <= 0; mvy_H2_diff_b <= 0;						mvy_H3_diff_a <= 0; mvy_H3_diff_b <= 0;					end			end		else			begin 				mvx_H0_diff_a <= 0; mvx_H0_diff_b <= 0;				mvx_H1_diff_a <= 0; mvx_H1_diff_b <= 0;	 				mvx_H2_diff_a <= 0; mvx_H2_diff_b <= 0;				mvx_H3_diff_a <= 0; mvx_H3_diff_b <= 0;				mvy_H0_diff_a <= 0; mvy_H0_diff_b <= 0;				mvy_H1_diff_a <= 0; mvy_H1_diff_b <= 0;	 				mvy_H2_diff_a <= 0; mvy_H2_diff_b <= 0;				mvy_H3_diff_a <= 0; mvy_H3_diff_b <= 0;			end	/*			// synopsys translate_off	integer	tracefile;	integer pic_num;	wire [6:0] mb_num;	assign mb_num = mb_num_v * 11 + mb_num_h;		initial		begin			tracefile = $fopen("bs_trace.txt");		end	reg bs_dec_will_end;	always @ (posedge clk)		if (bs_dec_counter == 2'b01)			bs_dec_will_end <= 1'b1;		else			bs_dec_will_end <= 1'b0;	always @ (posedge clk or negedge reset_n)		if (reset_n == 1'b0)			pic_num <= 0;		else if (bs_dec_will_end)			begin				$fdisplay (tracefile, "-------------------------------");				if (mb_num == 0)					$fdisplay (tracefile, " Pic_num = %3d,MB_num =  98",(pic_num - 1));				else					$fdisplay (tracefile, " Pic_num = %3d,MB_num = %3d",pic_num,(mb_num - 1));				$fdisplay (tracefile, " Vertical   Edge 0:Bs = %d,%d,%d,%d",bs_V0[2:0],bs_V0[5:3],bs_V0[8:6],bs_V0[11:9]);				$fdisplay (tracefile, " Vertical   Edge 1:Bs = %d,%d,%d,%d",bs_V1[2:0],bs_V1[5:3],bs_V1[8:6],bs_V1[11:9]);				$fdisplay (tracefile, " Vertical   Edge 2:Bs = %d,%d,%d,%d",bs_V2[2:0],bs_V2[5:3],bs_V2[8:6],bs_V2[11:9]);				$fdisplay (tracefile, " Vertical   Edge 3:Bs = %d,%d,%d,%d",bs_V3[2:0],bs_V3[5:3],bs_V3[8:6],bs_V3[11:9]);				$fdisplay (tracefile, " Horizontal Edge 0:Bs = %d,%d,%d,%d",bs_H0[2:0],bs_H0[5:3],bs_H0[8:6],bs_H0[11:9]);				$fdisplay (tracefile, " Horizontal Edge 1:Bs = %d,%d,%d,%d",bs_H1[2:0],bs_H1[5:3],bs_H1[8:6],bs_H1[11:9]);				$fdisplay (tracefile, " Horizontal Edge 2:Bs = %d,%d,%d,%d",bs_H2[2:0],bs_H2[5:3],bs_H2[8:6],bs_H2[11:9]);				$fdisplay (tracefile, " Horizontal Edge 3:Bs = %d,%d,%d,%d",bs_H3[2:0],bs_H3[5:3],bs_H3[8:6],bs_H3[11:9]);				if (mb_num == 98)					pic_num <= pic_num + 1;			end	// synopsys translate_on	*/endmodule			module mv_diff_GE4 (mv_a,mv_b,diff_GE4);	input [7:0] mv_a,mv_b;	output diff_GE4;	wire [7:0] diff_tmp;	wire [6:0] diff;	assign diff_tmp = mv_a + ~ mv_b + 1;	assign diff	= (diff_tmp[7] == 1'b1)? (~diff_tmp[6:0] + 1):diff_tmp[6:0];	assign diff_GE4 = (diff[6:2] != 0)? 1'b1:1'b0;endmodule						

⌨️ 快捷键说明

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