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

📄 intra_pred_pipeline.v

📁 a H.264/AVC Baseline Decoder
💻 V
📖 第 1 页 / 共 3 页
字号:
					plane_HV_mux1_sel <= 1'b0;	plane_HV_mux2_sel <= 1'b0;				end				6,3:	//x2,x4				begin					plane_HV_prev_in <= plane_HV_out_reg;	plane_HV_Is7 <= 1'b0;					plane_HV_A1 <= (blk4x4_intra_precompute_counter == 6)? Intra_mbAddrA_reg5:Intra_mbAddrB_reg5;							plane_HV_A2 <= (blk4x4_intra_precompute_counter == 6)? Intra_mbAddrA_reg1:Intra_mbAddrB_reg1;					plane_HV_B1 <= (blk4x4_intra_precompute_counter == 6)? Intra_mbAddrA_reg7:Intra_mbAddrB_reg7;						plane_HV_B2 <= (blk4x4_intra_precompute_counter == 6)? Intra_mbAddrD_window :Intra_mbAddrD_window;					plane_HV_shifter1_len <= 2'b01; plane_HV_shifter2_len <= 2'b01;					plane_HV_mux1_sel <= 1'b1;      plane_HV_mux2_sel <= 1'b1;				end				default:				begin					plane_HV_prev_in <= 0;	plane_HV_Is7 <= 0;					plane_HV_A1 <= 0;	plane_HV_A2 <= 0;	plane_HV_B1 <= 0;	plane_HV_B2 <= 0;					plane_HV_shifter1_len <= 0;	plane_HV_shifter2_len <= 0;					plane_HV_mux1_sel <= 0;     plane_HV_mux2_sel <= 0;				end			endcase		else			begin				plane_HV_prev_in <= 0;	plane_HV_Is7 <= 0;				plane_HV_A1 <= 0;	plane_HV_A2 <= 0;	plane_HV_B1 <= 0;	plane_HV_B2 <= 0;				plane_HV_shifter1_len <= 0;	plane_HV_shifter2_len <= 0;				plane_HV_mux1_sel <= 0;     plane_HV_mux2_sel <= 0;			end				wire Is_HV_latch;	assign Is_HV_latch = ((blk4x4_rec_counter == 0 && blk4x4_intra_precompute_counter != 7 && blk4x4_intra_precompute_counter != 2 && 		blk4x4_intra_precompute_counter != 1 && blk4x4_intra_precompute_counter != 0) || (		(blk4x4_rec_counter == 16 || blk4x4_rec_counter == 20) && (blk4x4_intra_precompute_counter != 5 && 		blk4x4_intra_precompute_counter != 2 && blk4x4_intra_precompute_counter != 1 && blk4x4_intra_precompute_counter != 0)));	always @ (posedge clk)		if (reset_n == 1'b0)			plane_HV_out_reg <= 0;		else if (Is_HV_latch)			plane_HV_out_reg <= plane_HV_out;		//	2.2 precomputation for b,c	reg [14:0] plane_bc_in;	reg plane_bc_IsLuma;	wire [11:0] plane_bc;	plane_bc_precomputation plane_bc_precomputation (		.HV_in(plane_bc_in),		.IsLuma(plane_bc_IsLuma),		.bc_out(plane_bc)		);	always @ (mb_type_general[3:2] or Intra16x16_predmode or blk4x4_rec_counter or blk4x4_intra_precompute_counter or plane_HV_out_reg)		//Intra16x16 plane		if (mb_type_general[3:2] == 2'b10 && Intra16x16_predmode == `Intra16x16_Plane && blk4x4_rec_counter == 0)			case (blk4x4_intra_precompute_counter)				7,2    :begin	plane_bc_in <= plane_HV_out_reg;	plane_bc_IsLuma <= 1'b1;	end				default:begin	plane_bc_in <= 0;                 plane_bc_IsLuma <= 1'b0;	end			endcase		//Chroma Cb,Cr plane		else if (mb_type_general[3] == 1'b1 && (blk4x4_rec_counter == 16 || blk4x4_rec_counter == 20))			case (blk4x4_intra_precompute_counter)				5,2    :begin	plane_bc_in <= plane_HV_out_reg; plane_bc_IsLuma <= 1'b0;	end				default:begin	plane_bc_in <= 0;                plane_bc_IsLuma <= 1'b0;	end			endcase		else			begin	plane_bc_in <= 0;					plane_bc_IsLuma <= 1'b0;	end		wire c_latch_ena;	assign c_latch_ena = ((blk4x4_rec_counter == 0 && blk4x4_intra_precompute_counter == 7) || 		((blk4x4_rec_counter == 16 || blk4x4_rec_counter == 20) && blk4x4_intra_precompute_counter == 5));	always @ (posedge clk)		if (reset_n == 0)			plane_c_reg <= 0;		else if (c_latch_ena) 			plane_c_reg <= plane_bc;	//	2.3 precomputation for a,and latch a & b at the same time at cycle 2	reg [7:0] plane_a_pix_in1,plane_a_pix_in2;	wire [13:0] plane_a;	reg [13:0] plane_a_reg;		plane_a_precomputation plane_a_precomputation(	.pix_in1(plane_a_pix_in1),	.pix_in2(plane_a_pix_in2),	.a_out(plane_a)	);	always @ (blk4x4_rec_counter or blk4x4_intra_precompute_counter or Intra_mbAddrA_reg15 		or Intra_mbAddrB_reg15 or Intra_mbAddrA_reg7 or Intra_mbAddrB_reg7)		//Intra16x16		if (blk4x4_rec_counter == 0 && blk4x4_intra_precompute_counter == 2)			begin					plane_a_pix_in1 <= Intra_mbAddrA_reg15;					plane_a_pix_in2 <= Intra_mbAddrB_reg15;				end		//Chroma 		else if((blk4x4_rec_counter == 16  || blk4x4_rec_counter == 20) && blk4x4_intra_precompute_counter == 2)			begin				plane_a_pix_in1 <= Intra_mbAddrA_reg7;					plane_a_pix_in2 <= Intra_mbAddrB_reg7;				end		else			begin				plane_a_pix_in1 <= 0;				plane_a_pix_in2 <= 0;			end					wire ab_latch_ena;	assign ab_latch_ena = (blk4x4_intra_precompute_counter == 2);	always @ (posedge clk)		if (reset_n == 1'b0)			begin				plane_a_reg <= 0;				plane_b_reg <= 0;			end		else if (ab_latch_ena)			begin				plane_a_reg <= plane_a;				plane_b_reg <= plane_bc;			end	//	2.4 precomputation for main seed @ blk4x4_intra_precompute_counter == 1	wire [13:0] main_seed_a;	wire [11:0] main_seed_b,main_seed_c;	wire main_seed_IsIntra16x16;		main_seed_precomputation main_seed_precomputation (		.a(main_seed_a),		.b(main_seed_b),		.c(main_seed_c),		.IsIntra16x16(main_seed_IsIntra16x16),		.main_seed(main_seed)		); 	assign main_seed_a = (blk4x4_intra_precompute_counter == 1)? plane_a_reg:0;	assign main_seed_b = (blk4x4_intra_precompute_counter == 1)? plane_b_reg:0;	assign main_seed_c = (blk4x4_intra_precompute_counter == 1)? plane_c_reg:0;	assign main_seed_IsIntra16x16 = (blk4x4_intra_precompute_counter == 1)? ((blk4x4_rec_counter == 0)? 1'b1:1'b0):1'b0;	 	//----------------------------------------------------------------------------------------		//3.calculation: by Intra_pred_PE.v 	//----------------------------------------------------------------------------------------	endmodulemodule plane_a_precomputation (pix_in1,pix_in2,a_out);	input [7:0] pix_in1,pix_in2;	output [13:0] a_out;		wire [8:0] sum;	assign sum = pix_in1 + pix_in2;	assign a_out = {1'b0,sum,4'b0};endmodulemodule plane_bc_precomputation (HV_in,IsLuma,bc_out);	input [14:0] HV_in;	input IsLuma;	output [11:0] bc_out;		wire [16:0] multiply_4or16;	wire [16:0] product;	wire [5:0] addend;	wire [16:0] sum;		assign multiply_4or16 = (IsLuma)? {HV_in,2'b0}:{HV_in[12:0],4'b0};	assign product = multiply_4or16 + {{2{HV_in[14]}},HV_in};	assign addend = (IsLuma)? 6'b100000:6'b010000;	//32 for luma,16 for chroma	assign sum = product + addend;	assign bc_out = (IsLuma)? {sum[16],sum[16:6]}:sum[16:5];  	endmodulemodule plane_HV_precomputation (prev_in,A1,A2,B1,B2,shifter1_len,shifter2_len,mux1_sel,mux2_sel,Is7,HV_out);	input [14:0] prev_in;	input [7:0] A1,A2,B1,B2;	input [1:0] shifter1_len,shifter2_len;	input mux1_sel,mux2_sel;	input Is7;	output [14:0] HV_out;		wire [7:0] neg_A2;	wire signed [8:0] A1_minus_A2;	wire signed [11:0] shifter1_out;	wire [11:0] mux1_out;	wire [14:0] adder1_out;	wire [7:0] neg_B2;	wire signed [8:0] B1_minus_B2;	wire signed [11:0] shifter2_out;	wire [9:0] mux2_out;	wire [9:0] neg_mux2_out;	wire [11:0] adder2_out;	//Left part,multiply by 1,2,4,8	assign neg_A2 = ~A2;	assign A1_minus_A2 = {1'b0,A1} + {1'b1,neg_A2} + 1;		assign shifter1_out = A1_minus_A2 <<< shifter1_len;	assign mux1_out = (mux1_sel == 1'b0)? {{3{A1_minus_A2[8]}},A1_minus_A2}:shifter1_out;	assign adder1_out = prev_in + {{3{mux1_out[11]}},mux1_out};	//Right part,multiply by 3,5,6,7	assign neg_B2 = ~B2;	assign B1_minus_B2 = {1'b0,B1} + {1'b1,neg_B2} + 1;	assign shifter2_out = B1_minus_B2 <<< shifter2_len;	assign mux2_out = (mux2_sel == 1'b0)? {B1_minus_B2[8],B1_minus_B2}:{B1_minus_B2,1'b0};	assign neg_mux2_out = (Is7 == 1'b1)? (~mux2_out + 1):mux2_out;	assign adder2_out = shifter2_out + {{2{neg_mux2_out[9]}},neg_mux2_out};	assign HV_out = adder1_out + {{3{adder2_out[11]}},adder2_out};endmodulemodule main_seed_precomputation (a,b,c,IsIntra16x16,main_seed);	input [13:0] a;	input [11:0] b,c;	input IsIntra16x16;	output [15:0] main_seed;		wire [14:0]	b_x8_or_x4;	wire [14:0] c_x8_or_x4;	wire [11:0] neg_b;	wire [14:0] b_x7_or_x3;	wire [15:0] neg_b_x7_or_x3;	wire [15:0] neg_c_x8_or_x4;			assign b_x8_or_x4 = (IsIntra16x16)? {b[11:0],3'b0}:{b[11],b[11:0],2'b0};	assign c_x8_or_x4 = (IsIntra16x16)? {c[11:0],3'b0}:{c[11],c[11:0],2'b0};	assign neg_b = ~ b;	assign b_x7_or_x3 = b_x8_or_x4 + {{3{neg_b[11]}},neg_b} + 1;	assign neg_b_x7_or_x3 = {~b_x7_or_x3[14],~b_x7_or_x3} + 1;	assign neg_c_x8_or_x4 = {~c_x8_or_x4[14],~c_x8_or_x4} + 1;	assign main_seed = {a[13],a[13],a} + (neg_c_x8_or_x4 + neg_b_x7_or_x3);endmodule					

⌨️ 快捷键说明

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