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

📄 sum.v

📁 H.264标准解码器全部verilog源码
💻 V
📖 第 1 页 / 共 2 页
字号:
//--------------------------------------------------------------------------------------------------// Design    : nova// Author(s) : Ke Xu// Email	   : eexuke@yahoo.com// File      : sum.v// Generated : Oct 29, 2005// Copyright (C) 2008 Ke Xu                //-------------------------------------------------------------------------------------------------// Description // Sum module for residual + prediction// Including output transpose and Intra_mbAddrB_RAM write control//-------------------------------------------------------------------------------------------------// synopsys translate_off`include "timescale.v"// synopsys translate_on`include "nova_defines.v"module sum (clk,reset_n,slice_data_state,residual_state,TotalCoeff,curr_CBPLuma_IsZero,CodedBlockPatternChroma,	curr_DC_IsZero,curr_DC_scaled,gclk_pred_output,gclk_blk4x4_sum,trigger_blk4x4_rec_sum,	IQIT_output_0, IQIT_output_1, IQIT_output_2, IQIT_output_3,	IQIT_output_4, IQIT_output_5, IQIT_output_6, IQIT_output_7,	IQIT_output_8, IQIT_output_9, IQIT_output_10,IQIT_output_11,	IQIT_output_12,IQIT_output_13,IQIT_output_14,IQIT_output_15,	mb_type_general,Intra4x4_predmode,Intra16x16_predmode,Intra_chroma_predmode,	Intra_pred_PE0_out,Intra_pred_PE1_out,Intra_pred_PE2_out,Intra_pred_PE3_out,blk4x4_intra_calculate_counter,	Inter_pred_out0,Inter_pred_out1,Inter_pred_out2,Inter_pred_out3,blk4x4_inter_calculate_counter,Inter_chroma2x2_counter,	Inter_blk4x4_pred_output_valid,mv_below8x8_curr,pos_FracL,mb_num_v,mb_num_h,LowerMB_IsSkip,		end_of_one_blk4x4_sum,blk4x4_sum_counter,blk4x4_rec_counter,	blk4x4_sum_PE0_out,blk4x4_sum_PE1_out,blk4x4_sum_PE2_out,blk4x4_sum_PE3_out,	sum_right_column_reg,blk4x4_rec_counter_2_raster_order,	blk4x4_pred_output0, blk4x4_pred_output1, blk4x4_pred_output2,	blk4x4_pred_output4, blk4x4_pred_output5, blk4x4_pred_output6,	blk4x4_pred_output8, blk4x4_pred_output9, blk4x4_pred_output10,	blk4x4_pred_output12,blk4x4_pred_output13,blk4x4_pred_output14,	Intra_mbAddrB_RAM_wr,Intra_mbAddrB_RAM_wr_addr,Intra_mbAddrB_RAM_din	);	input clk,reset_n;	input [3:0] slice_data_state;	input [3:0] residual_state;	input [4:0] TotalCoeff;	input curr_CBPLuma_IsZero;	input [1:0] CodedBlockPatternChroma;	input curr_DC_IsZero;	input [8:0] curr_DC_scaled;	input gclk_pred_output;	input gclk_blk4x4_sum;	input trigger_blk4x4_rec_sum;	//residual from IQIT	input [8:0] IQIT_output_0, IQIT_output_1, IQIT_output_2, IQIT_output_3;	input [8:0] IQIT_output_4, IQIT_output_5, IQIT_output_6, IQIT_output_7;	input [8:0] IQIT_output_8, IQIT_output_9, IQIT_output_10,IQIT_output_11;	input [8:0] IQIT_output_12,IQIT_output_13,IQIT_output_14,IQIT_output_15;	//Intra prediction output	input [3:0] mb_type_general;	input [3:0]	Intra4x4_predmode;	input [1:0] Intra16x16_predmode;	input [1:0] Intra_chroma_predmode;	input [7:0] Intra_pred_PE0_out,Intra_pred_PE1_out,Intra_pred_PE2_out,Intra_pred_PE3_out;	input [2:0] blk4x4_intra_calculate_counter;	//Inter prediction output	input [7:0] Inter_pred_out0,Inter_pred_out1,Inter_pred_out2,Inter_pred_out3;	input [1:0] Inter_blk4x4_pred_output_valid;	input mv_below8x8_curr;	input [3:0] pos_FracL;	input [3:0] blk4x4_inter_calculate_counter;	input [1:0] Inter_chroma2x2_counter;	input [3:0] mb_num_h,mb_num_v;	input LowerMB_IsSkip;		output end_of_one_blk4x4_sum;	output [2:0] blk4x4_sum_counter;	output [4:0] blk4x4_rec_counter;	output [7:0] blk4x4_sum_PE0_out,blk4x4_sum_PE1_out,blk4x4_sum_PE2_out,blk4x4_sum_PE3_out;	output [23:0] sum_right_column_reg;	output [4:0] blk4x4_rec_counter_2_raster_order;	output [7:0] blk4x4_pred_output0, blk4x4_pred_output1, blk4x4_pred_output2;	output [7:0] blk4x4_pred_output4, blk4x4_pred_output5, blk4x4_pred_output6;	output [7:0] blk4x4_pred_output8, blk4x4_pred_output9, blk4x4_pred_output10;	output [7:0] blk4x4_pred_output12,blk4x4_pred_output13,blk4x4_pred_output14;	output Intra_mbAddrB_RAM_wr;	output [6:0] Intra_mbAddrB_RAM_wr_addr;	output [31:0] Intra_mbAddrB_RAM_din; 			reg [2:0] blk4x4_sum_counter;	reg [4:0] blk4x4_rec_counter;	reg [4:0] blk4x4_rec_counter_2_raster_order;	reg [23:0] sum_right_column_reg;			reg [7:0] blk4x4_pred_output0, blk4x4_pred_output1, blk4x4_pred_output2, blk4x4_pred_output3;	reg [7:0] blk4x4_pred_output4, blk4x4_pred_output5, blk4x4_pred_output6, blk4x4_pred_output7;	reg [7:0] blk4x4_pred_output8, blk4x4_pred_output9, blk4x4_pred_output10,blk4x4_pred_output11;	reg [7:0] blk4x4_pred_output12,blk4x4_pred_output13,blk4x4_pred_output14,blk4x4_pred_output15;		always @ (posedge gclk_pred_output or negedge reset_n)		if (reset_n == 1'b0)			begin blk4x4_pred_output0  <= 0; blk4x4_pred_output1 <= 0; blk4x4_pred_output2  <= 0; blk4x4_pred_output3  <= 0; 				  blk4x4_pred_output4  <= 0; blk4x4_pred_output5 <= 0; blk4x4_pred_output6  <= 0; blk4x4_pred_output7  <= 0; 				  blk4x4_pred_output8  <= 0; blk4x4_pred_output9 <= 0; blk4x4_pred_output10 <= 0; blk4x4_pred_output11 <= 0;				  blk4x4_pred_output12 <= 0; blk4x4_pred_output13<= 0; blk4x4_pred_output14 <= 0; blk4x4_pred_output15 <= 0; end		else if (blk4x4_intra_calculate_counter != 0)			begin				//Intra4x4DC or chromaDC intra prediction:output valid only at cycle3 by PE0				if ((mb_type_general[3:2] == 2'b11 && blk4x4_rec_counter < 16 && Intra4x4_predmode == `Intra4x4_DC) ||            (mb_type_general[3]   == 1'b1  && blk4x4_rec_counter > 15 && Intra_chroma_predmode == `Intra_chroma_DC))					begin 						if (blk4x4_intra_calculate_counter == 3'd3) //Intra4x4DC or chromaDC completes calculation at cycle3 by PE0							begin								blk4x4_pred_output0  <= Intra_pred_PE0_out; blk4x4_pred_output1  <= Intra_pred_PE0_out;								blk4x4_pred_output2  <= Intra_pred_PE0_out; blk4x4_pred_output3  <= Intra_pred_PE0_out;								blk4x4_pred_output4  <= Intra_pred_PE0_out; blk4x4_pred_output5  <= Intra_pred_PE0_out;								blk4x4_pred_output6  <= Intra_pred_PE0_out; blk4x4_pred_output7  <= Intra_pred_PE0_out;								blk4x4_pred_output8  <= Intra_pred_PE0_out; blk4x4_pred_output9  <= Intra_pred_PE0_out;								blk4x4_pred_output10 <= Intra_pred_PE0_out; blk4x4_pred_output11 <= Intra_pred_PE0_out;								blk4x4_pred_output12 <= Intra_pred_PE0_out; blk4x4_pred_output13 <= Intra_pred_PE0_out;								blk4x4_pred_output14 <= Intra_pred_PE0_out; blk4x4_pred_output15 <= Intra_pred_PE0_out;							end					end				//Intra16x16DC intra prediction:output valid only at cycle1 by PE0				else if (mb_type_general[3:2] == 2'b10 && blk4x4_rec_counter < 16 && Intra16x16_predmode == `Intra16x16_DC)					begin 						if (blk4x4_rec_counter == 0 && blk4x4_intra_calculate_counter == 3'd1) 							begin								blk4x4_pred_output0  <= Intra_pred_PE0_out; blk4x4_pred_output1  <= Intra_pred_PE0_out;								blk4x4_pred_output2  <= Intra_pred_PE0_out; blk4x4_pred_output3  <= Intra_pred_PE0_out;								blk4x4_pred_output4  <= Intra_pred_PE0_out; blk4x4_pred_output5  <= Intra_pred_PE0_out;								blk4x4_pred_output6  <= Intra_pred_PE0_out; blk4x4_pred_output7  <= Intra_pred_PE0_out;								blk4x4_pred_output8  <= Intra_pred_PE0_out; blk4x4_pred_output9  <= Intra_pred_PE0_out;								blk4x4_pred_output10 <= Intra_pred_PE0_out; blk4x4_pred_output11 <= Intra_pred_PE0_out;								blk4x4_pred_output12 <= Intra_pred_PE0_out; blk4x4_pred_output13 <= Intra_pred_PE0_out;								blk4x4_pred_output14 <= Intra_pred_PE0_out; blk4x4_pred_output15 <= Intra_pred_PE0_out;							end					end				//Besides above DC intra prediction case,other intra prediction modes output valid from cycle4 ~ cycle1				else					case (blk4x4_intra_calculate_counter)						3'd4:begin	blk4x4_pred_output0  <= Intra_pred_PE0_out; blk4x4_pred_output4  <= Intra_pred_PE1_out; 									blk4x4_pred_output8  <= Intra_pred_PE2_out; blk4x4_pred_output12 <= Intra_pred_PE3_out;	end						3'd3:begin	blk4x4_pred_output1  <= Intra_pred_PE0_out; blk4x4_pred_output5  <= Intra_pred_PE1_out; 									blk4x4_pred_output9  <= Intra_pred_PE2_out; blk4x4_pred_output13 <= Intra_pred_PE3_out;	end						3'd2:begin	blk4x4_pred_output2  <= Intra_pred_PE0_out; blk4x4_pred_output6  <= Intra_pred_PE1_out; 									blk4x4_pred_output10 <= Intra_pred_PE2_out; blk4x4_pred_output14 <= Intra_pred_PE3_out;	end						3'd1:begin	blk4x4_pred_output3  <= Intra_pred_PE0_out; blk4x4_pred_output7  <= Intra_pred_PE1_out; 									blk4x4_pred_output11 <= Intra_pred_PE2_out; blk4x4_pred_output15 <= Intra_pred_PE3_out;	end				   	endcase			end		//Inter luma prediction output store		else if (Inter_blk4x4_pred_output_valid == 2'b01)			begin				if (pos_FracL == `pos_i || pos_FracL == `pos_k)					case (blk4x4_inter_calculate_counter)						4'd7:begin	blk4x4_pred_output0  <= Inter_pred_out0; blk4x4_pred_output4  <= Inter_pred_out1; 									blk4x4_pred_output8  <= Inter_pred_out2; blk4x4_pred_output12 <= Inter_pred_out3;	end						4'd5:begin	blk4x4_pred_output1  <= Inter_pred_out0; blk4x4_pred_output5  <= Inter_pred_out1; 									blk4x4_pred_output9  <= Inter_pred_out2; blk4x4_pred_output13 <= Inter_pred_out3;	end						4'd3:begin	blk4x4_pred_output2  <= Inter_pred_out0; blk4x4_pred_output6  <= Inter_pred_out1; 									blk4x4_pred_output10 <= Inter_pred_out2; blk4x4_pred_output14 <= Inter_pred_out3;	end						4'd1:begin	blk4x4_pred_output3  <= Inter_pred_out0; blk4x4_pred_output7  <= Inter_pred_out1; 									blk4x4_pred_output11 <= Inter_pred_out2; blk4x4_pred_output15 <= Inter_pred_out3;	end					endcase				else					case (blk4x4_inter_calculate_counter)						4'd4:begin	blk4x4_pred_output0  <= Inter_pred_out0; blk4x4_pred_output4  <= Inter_pred_out1; 									blk4x4_pred_output8  <= Inter_pred_out2; blk4x4_pred_output12 <= Inter_pred_out3;	end						4'd3:begin	blk4x4_pred_output1  <= Inter_pred_out0; blk4x4_pred_output5  <= Inter_pred_out1; 									blk4x4_pred_output9  <= Inter_pred_out2; blk4x4_pred_output13 <= Inter_pred_out3;	end						4'd2:begin	blk4x4_pred_output2  <= Inter_pred_out0; blk4x4_pred_output6  <= Inter_pred_out1; 									blk4x4_pred_output10 <= Inter_pred_out2; blk4x4_pred_output14 <= Inter_pred_out3;	end						4'd1:begin	blk4x4_pred_output3  <= Inter_pred_out0; blk4x4_pred_output7  <= Inter_pred_out1; 									blk4x4_pred_output11 <= Inter_pred_out2; blk4x4_pred_output15 <= Inter_pred_out3;	end					endcase			end		//Inter chroma prediction output store		else if (Inter_blk4x4_pred_output_valid == 2'b10)				case (mv_below8x8_curr)				1'b1:				case (Inter_chroma2x2_counter)					2'b11:					begin						blk4x4_pred_output0 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out0:0;						blk4x4_pred_output1 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out1:0;						blk4x4_pred_output4 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out2:0;						blk4x4_pred_output5 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out3:0;					end					2'b10:					begin						blk4x4_pred_output2 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out0:0;						blk4x4_pred_output3 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out1:0;						blk4x4_pred_output6 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out2:0;						blk4x4_pred_output7 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out3:0;					end					2'b01:					begin						blk4x4_pred_output8  <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out0:0;						blk4x4_pred_output9  <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out1:0;						blk4x4_pred_output12 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out2:0;						blk4x4_pred_output13 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out3:0;					end					2'b00:					begin						blk4x4_pred_output10 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out0:0;						blk4x4_pred_output11 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out1:0;						blk4x4_pred_output14 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out2:0;						blk4x4_pred_output15 <= (blk4x4_inter_calculate_counter != 0)? Inter_pred_out3:0;					end				endcase				1'b0:				case (blk4x4_inter_calculate_counter)					4'd4:begin	blk4x4_pred_output0  <= Inter_pred_out0; blk4x4_pred_output1  <= Inter_pred_out1;								blk4x4_pred_output4  <= Inter_pred_out2; blk4x4_pred_output5  <= Inter_pred_out3;	end					4'd3:begin	blk4x4_pred_output2  <= Inter_pred_out0; blk4x4_pred_output3  <= Inter_pred_out1;								blk4x4_pred_output6  <= Inter_pred_out2; blk4x4_pred_output7  <= Inter_pred_out3;	end					4'd2:begin	blk4x4_pred_output8  <= Inter_pred_out0; blk4x4_pred_output9  <= Inter_pred_out1;								blk4x4_pred_output12 <= Inter_pred_out2; blk4x4_pred_output13 <= Inter_pred_out3;	end					4'd1:begin	blk4x4_pred_output10 <= Inter_pred_out0; blk4x4_pred_output11 <= Inter_pred_out1;								blk4x4_pred_output14 <= Inter_pred_out2; blk4x4_pred_output15 <= Inter_pred_out3;	end				endcase			endcase				//------------------------------------------------------	//blk4x4_sum_counter	//------------------------------------------------------	always @ (posedge clk)		if (reset_n == 1'b0)			blk4x4_sum_counter <= 3'd4;		else if (trigger_blk4x4_rec_sum == 1'b1)			blk4x4_sum_counter <= 3'd0;		else if (blk4x4_sum_counter != 3'd4)			blk4x4_sum_counter <= blk4x4_sum_counter + 1;		assign end_of_one_blk4x4_sum = (blk4x4_sum_counter == 3'd3)? 1'b1:1'b0;	//------------------------------------------------------	//blk4x4_rec_counter	//------------------------------------------------------			always	@ (posedge clk)		if (reset_n == 1'b0)			blk4x4_rec_counter <= 0;		else if (blk4x4_sum_counter == 3'd3)			blk4x4_rec_counter <= (blk4x4_rec_counter == 5'd23)? 5'd0:(blk4x4_rec_counter + 1);	//------------------------------------------------------	//reconstruction sum	//------------------------------------------------------		//Note:since res_blk4x4_IsAllZero has a higer priority over res_blk4x4_OnlyDC,the conditions	//to assign res_blk4x4_OnlyDC is NOT complete (but when take current assigned res_blk4x4_IsAllZero	//value into account, res_blk4x4_OnlyDC is correct!) 		//res_blk4x4_IsAllZero:curr_DC_IsZero? curr_CBPLuma_IsZero? TotalCoeff is zero? CBPChroma is zero or one?		reg res_blk4x4_IsAllZero;	reg res_blk4x4_onlyDC;	always @ (slice_data_state or residual_state or curr_DC_IsZero or TotalCoeff 		or curr_DC_IsZero or curr_CBPLuma_IsZero or CodedBlockPatternChroma)

⌨️ 快捷键说明

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