📄 intra_pred_pe.v
字号:
end endcase else begin PE0_in0 <= 0; PE0_in1 <= 0; PE0_in2 <= 0; PE0_in3 <= 0; PE0_IsShift <= 0; PE0_IsStore <= 0; PE0_IsClip <= 0; PE0_full_bypass <= 0; PE0_round_value <= 0; PE0_shift_len <= 0; end //---- //PE1 | //---- always @ (mb_type_general or blk4x4_rec_counter or blk4x4_intra_calculate_counter or Intra4x4_predmode or Intra16x16_predmode or Intra_chroma_predmode or blkAddrA_availability or mbAddrA_availability or mbAddrB_availability or Intra_mbAddrA_window0 or Intra_mbAddrA_window1 or Intra_mbAddrA_window2 or Intra_mbAddrA_window3 or Intra_mbAddrB_window0 or Intra_mbAddrB_window1 or Intra_mbAddrB_window2 or Intra_mbAddrB_window3 or Intra_mbAddrD_window or Intra_mbAddrA_reg4 or Intra_mbAddrA_reg5 or Intra_mbAddrA_reg6 or Intra_mbAddrA_reg7 or Intra_mbAddrB_reg0 or Intra_mbAddrB_reg4 or Intra_mbAddrB_reg5 or Intra_mbAddrB_reg6 or Intra_mbAddrB_reg7 or Intra_mbAddrB_reg8 or Intra_mbAddrB_reg12 or PE1_out_reg or blk4x4_pred_output0 or blk4x4_pred_output1 or blk4x4_pred_output2 or blk4x4_pred_output8 or blk4x4_pred_output9 or blk4x4_pred_output12 or blk4x4_pred_output13 or blk4x4_pred_output14 or seed or b_ext or c_ext) //Intra 4x4 if (mb_type_general[3:2] == 2'b11 && blk4x4_rec_counter < 16) case (Intra4x4_predmode) `Intra4x4_Vertical: //---Vertical--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrB_window0; 3:PE1_in0 <= Intra_mbAddrB_window1; 2:PE1_in0 <= Intra_mbAddrB_window2; 1:PE1_in0 <= Intra_mbAddrB_window3; default:PE1_in0 <= 0; endcase PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 1; PE1_round_value <= 0; PE1_shift_len <= 0; end `Intra4x4_Horizontal: //---Horizontal--- begin PE1_in0 <= (blk4x4_intra_calculate_counter != 0)? Intra_mbAddrA_window1:0; PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 1; PE1_round_value <= 0; PE1_shift_len <= 0; end `Intra4x4_DC: //---DC--- begin PE1_in0 <= (blk4x4_intra_calculate_counter == 4 && blkAddrA_availability == 1)? Intra_mbAddrA_window0:0; PE1_in1 <= (blk4x4_intra_calculate_counter == 4 && blkAddrA_availability == 1)? Intra_mbAddrA_window1:0; PE1_in2 <= (blk4x4_intra_calculate_counter == 4 && blkAddrA_availability == 1)? Intra_mbAddrA_window2:0; PE1_in3 <= (blk4x4_intra_calculate_counter == 4 && blkAddrA_availability == 1)? Intra_mbAddrA_window3:0; PE1_IsStore <= (blk4x4_intra_calculate_counter == 4 && blkAddrA_availability == 1)? 1'b1:1'b0; PE1_full_bypass <= 1'b0; PE1_IsShift <= 0; PE1_IsClip <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end `Intra4x4_Diagonal_Down_Left: //---diagonal down-left--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrB_window1; 3:PE1_in0 <= blk4x4_pred_output8; 2:PE1_in0 <= blk4x4_pred_output12; 1:PE1_in0 <= blk4x4_pred_output13; default:PE1_in0 <= 0; endcase PE1_in1 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrB_window3:0; PE1_in2 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrB_window2:0; PE1_in3 <= 0; PE1_IsShift <= (blk4x4_intra_calculate_counter == 4)? 1'b1:1'b0; PE1_IsStore <= 1'b0; PE1_IsClip <= 1'b0; PE1_full_bypass <= (blk4x4_intra_calculate_counter == 4)? 1'b0:1'b1; PE1_round_value <= (blk4x4_intra_calculate_counter == 4)? 5'b00010:5'b0; // +2 PE1_shift_len <= (blk4x4_intra_calculate_counter == 4)? 3'b010 :3'b0; // >>2 end `Intra4x4_Diagonal_Down_Right: //---diagonal down-right--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrD_window; 3:PE1_in0 <= blk4x4_pred_output0; 2:PE1_in0 <= blk4x4_pred_output1; 1:PE1_in0 <= blk4x4_pred_output2; default:PE1_in0 <= 0; endcase PE1_in1 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrA_window1:0; PE1_in2 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrA_window0:0; PE1_in3 <= 0; PE1_IsShift <= (blk4x4_intra_calculate_counter == 0)? 1'b0:1'b1; PE1_IsStore <= 1'b0; PE1_IsClip <= 1'b0; PE1_full_bypass <= (blk4x4_intra_calculate_counter == 4)? 1'b0:1'b1; PE1_round_value <= (blk4x4_intra_calculate_counter == 0)? 5'b0:5'b00010; // +2 PE1_shift_len <= (blk4x4_intra_calculate_counter == 0)? 3'b0:3'b010; // >>2 end `Intra4x4_Vertical_Right: //---vertical right--- begin case (blk4x4_intra_calculate_counter) 4:begin PE1_in0 <= Intra_mbAddrB_window0; PE1_in1 <= Intra_mbAddrA_window0; PE1_in2 <= Intra_mbAddrD_window; end 3:begin PE1_in0 <= Intra_mbAddrD_window; PE1_in1 <= Intra_mbAddrB_window1; PE1_in2 <= Intra_mbAddrB_window0; end 2:begin PE1_in0 <= Intra_mbAddrB_window0; PE1_in1 <= Intra_mbAddrB_window2; PE1_in2 <= Intra_mbAddrB_window1; end 1:begin PE1_in0 <= Intra_mbAddrB_window1; PE1_in1 <= Intra_mbAddrB_window3; PE1_in2 <= Intra_mbAddrB_window2; end default:begin PE1_in0 <= 0;PE1_in1 <= 0;PE1_in2 <= 0; end endcase PE1_in3 <= 0; PE1_IsShift <= (blk4x4_intra_calculate_counter == 0)? 1'b0:1'b1; PE1_IsStore <= 1'b0; PE1_IsClip <= 1'b0; PE1_full_bypass <= 1'b0; PE1_round_value <= (blk4x4_intra_calculate_counter == 0)? 5'b0:5'b00010; // +2 PE1_shift_len <= (blk4x4_intra_calculate_counter == 0)? 3'b0:3'b010; // >>2 end `Intra4x4_Horizontal_Down: //---horizontal down--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrA_window0; 3:PE1_in0 <= Intra_mbAddrD_window; 2:PE1_in0 <= blk4x4_pred_output0; 1:PE1_in0 <= blk4x4_pred_output1; default:PE1_in0 <= 0; endcase PE1_in1 <= (blk4x4_intra_calculate_counter == 4 || blk4x4_intra_calculate_counter == 3)? Intra_mbAddrA_window1:0; PE1_in2 <= (blk4x4_intra_calculate_counter == 3)? Intra_mbAddrA_window0:0; PE1_in3 <= 0; PE1_IsShift <= (blk4x4_intra_calculate_counter == 3)? 1'b1:1'b0; PE1_IsStore <= 1'b0; PE1_IsClip <= 1'b0; PE1_full_bypass <= (blk4x4_intra_calculate_counter == 2 || blk4x4_intra_calculate_counter == 1)? 1'b1:1'b0; PE1_round_value <= (blk4x4_intra_calculate_counter == 4)? 5'd1: (blk4x4_intra_calculate_counter == 3)? 5'd2:5'd0; PE1_shift_len <= (blk4x4_intra_calculate_counter == 4)? 3'd1: (blk4x4_intra_calculate_counter == 3)? 3'd2:3'd0; end `Intra4x4_Vertical_Left: //---vertical left--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrB_window0; 3:PE1_in0 <= blk4x4_pred_output12; 2:PE1_in0 <= blk4x4_pred_output13; 1:PE1_in0 <= blk4x4_pred_output14; default:PE1_in0 <= 0; endcase PE1_in1 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrB_window2:0; PE1_in2 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrB_window1:0; PE1_in3 <= 0; PE1_IsShift <= (blk4x4_intra_calculate_counter == 4)? 1'b1:1'b0; PE1_IsStore <= 1'b0; PE1_IsClip <= 1'b0; PE1_full_bypass <= (blk4x4_intra_calculate_counter == 4)? 1'b0:1'b1; PE1_round_value <= (blk4x4_intra_calculate_counter == 4)? 5'd2:5'd0; // +2 PE1_shift_len <= (blk4x4_intra_calculate_counter == 4)? 3'd2:3'd0; // >>2 end `Intra4x4_Horizontal_Up: //---horizontal up--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrA_window1; 3:PE1_in0 <= Intra_mbAddrA_window1; 2:PE1_in0 <= blk4x4_pred_output8; 1:PE1_in0 <= blk4x4_pred_output9; default:PE1_in0 <= 0; endcase PE1_in1 <= (blk4x4_intra_calculate_counter == 4)? Intra_mbAddrA_window2: (blk4x4_intra_calculate_counter == 3)? Intra_mbAddrA_window3:0; PE1_in2 <= (blk4x4_intra_calculate_counter == 3)? Intra_mbAddrA_window2:0; PE1_in3 <= 0; PE1_IsShift <= (blk4x4_intra_calculate_counter == 3)? 1'b1:1'b0; PE1_IsStore <= 1'b0; PE1_IsClip <= 1'b0; PE1_full_bypass <= (blk4x4_intra_calculate_counter == 2 || blk4x4_intra_calculate_counter == 1)? 1'b1:1'b0; PE1_round_value <= (blk4x4_intra_calculate_counter == 4)? 5'd1: (blk4x4_intra_calculate_counter == 3)? 5'd2:5'd0; PE1_shift_len <= (blk4x4_intra_calculate_counter == 4)? 3'd1: (blk4x4_intra_calculate_counter == 3)? 3'd2:3'd0; end default: begin PE1_in0 <= 0; PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end endcase //Intra16x16 else if (mb_type_general[3:2] == 2'b10 && blk4x4_rec_counter < 16) case (Intra16x16_predmode) `Intra16x16_Vertical: //---Vertical--- begin case (blk4x4_intra_calculate_counter) 4:PE1_in0 <= Intra_mbAddrB_window0; 3:PE1_in0 <= Intra_mbAddrB_window1; 2:PE1_in0 <= Intra_mbAddrB_window2; 1:PE1_in0 <= Intra_mbAddrB_window3; default:PE1_in0 <= 0; endcase PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 1; PE1_round_value <= 0; PE1_shift_len <= 0; end `Intra16x16_Horizontal: //---Horizontal--- begin PE1_in0 <= (blk4x4_intra_calculate_counter != 0)? Intra_mbAddrA_window1:0; PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 1; PE1_round_value <= 0; PE1_shift_len <= 0; end `Intra16x16_DC: //---DC--- if (blk4x4_rec_counter == 0) case (blk4x4_intra_calculate_counter) 4:begin // E2 + F2 + G2 + H2 PE1_in0 <= (mbAddrA_availability == 0)? 0:Intra_mbAddrA_reg4; PE1_in1 <= (mbAddrA_availability == 0)? 0:Intra_mbAddrA_reg5; PE1_in2 <= (mbAddrA_availability == 0)? 0:Intra_mbAddrA_reg6; PE1_in3 <= (mbAddrA_availability == 0)? 0:Intra_mbAddrA_reg7; PE1_IsShift <= 0; PE1_IsStore <= 1; PE1_IsClip <= 0; PE1_full_bypass <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end 3:begin // PE1 output + F1 + G1 + H1 PE1_in0 <= PE1_out_reg; PE1_in1 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg5; PE1_in2 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg6; PE1_in3 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg7; PE1_IsShift <= 0; PE1_IsStore <= 1; PE1_IsClip <= 0; PE1_full_bypass <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end 2:begin // A1 + E1 + I1 + M1 PE1_in0 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg0; PE1_in1 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg4; PE1_in2 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg8; PE1_in3 <= (mbAddrB_availability == 0)? 0:Intra_mbAddrB_reg12; PE1_IsShift <= 0; PE1_IsStore <= 1; PE1_IsClip <= 0; PE1_full_bypass <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end default:begin PE1_in0 <= 0; PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end endcase else begin PE1_in0 <= 0; PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; PE1_IsShift <= 0; PE1_IsStore <= 0; PE1_IsClip <= 0; PE1_full_bypass <= 0; PE1_round_value <= 0; PE1_shift_len <= 0; end `Intra16x16_Plane: //---plane--- begin if (blk4x4_intra_calculate_counter != 0) //blk0,2,4,6,8,10,12,14,calc counter == 3'b100:PE1_in0 <= seed; //other cases :PE1_in0 <= left pixel output PE1_in0 <= (blk4x4_intra_calculate_counter == 4 && blk4x4_rec_counter[0] == 1'b0)? seed:PE1_out_reg; else PE1_in0 <= 0; if (blk4x4_intra_calculate_counter != 0) //blk0,2,8,10,calc counter == 3'b100:PE1_in1 <= c_ext x 2 //other cases :PE1_in1 <= b_ext PE1_in1 <= (blk4x4_intra_calculate_counter == 4 && !blk4x4_rec_counter[2] && !blk4x4_rec_counter[0])? {c_ext[14:0],1'b0}:b_ext; else PE1_in1 <= 0; //blk4,6,12,14,calc counter == 3'b100:PE1_in2 <= c_ext; //other cases :PE1_in2 <= 0 PE1_in2 <= (blk4x4_intra_calculate_counter == 4 && blk4x4_rec_counter[2] && !blk4x4_rec_counter[0])? c_ext:0; PE1_in3 <= 0; PE1_IsShift <= 1'b0; PE1_IsStore <= (blk4x4_intra_calculate_counter != 0)? 1'b1:1'b0; PE1_IsClip <= (blk4x4_intra_calculate_counter != 0)? 1'b1:1'b0; PE1_full_bypass <= 1'b0; PE1_round_value <= (blk4x4_intra_calculate_counter != 0)? 5'd16:5'd0; PE1_shift_len <= (blk4x4_intra_calculate_counter != 0)? 3'd5 :3'd0; end endcase //Chroma else if (mb_type_general[3] == 1'b1 && blk4x4_rec_counter > 15) case (Intra_chroma_predmode) `Intra_chroma_DC: //---DC--- if (blk4x4_intra_calculate_counter == 4) begin case ({mbAddrA_availability,mbAddrB_availability}) 2'b00,2'b01: begin PE1_in0 <= 0; PE1_in1 <= 0; PE1_in2 <= 0; PE1_in3 <= 0; end 2'b10: begin PE1_in0 <= Intra_mbAddrA_window0; PE1_in1 <= Intra_mbAddrA_window1; PE1_in2 <= Intra_mbAddrA_window2; PE1_in3 <= Intra_mbAddrA_window3; end 2'b11: begin PE1_in0 <= (blk4x4_rec_counter == 17 || blk4x4_rec_counter == 21)? 0:Intra_mbAddrA_window0; PE1_in1 <= (blk4x4_rec_counter == 17 || blk4x4_rec_counter == 21)? 0:Intra_mbAddrA_window1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -