📄 bs_decoding.v
字号:
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 + -