//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
// Design : nova
|
// Design : nova
|
// Author(s) : Ke Xu
|
// Author(s) : Ke Xu
|
// Email : eexuke@yahoo.com
|
// Email : eexuke@yahoo.com
|
// File : Inter_mv_decoding.v
|
// File : Inter_mv_decoding.v
|
// Generated : May 25, 2005
|
// Generated : May 25, 2005
|
// Copyright (C) 2008 Ke Xu
|
// Copyright (C) 2008 Ke Xu
|
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
// Description
|
// Description
|
// Decoding the motion vector x and motion vector y for Inter prediction and P_skip
|
// Decoding the motion vector x and motion vector y for Inter prediction and P_skip
|
// SearchRange = 16pix -> 64 -> -64 ~ + 64 -> mvd[7:0], mv[7:0], mvp[7:0]
|
// SearchRange = 16pix -> 64 -> -64 ~ + 64 -> mvd[7:0], mv[7:0], mvp[7:0]
|
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
|
|
// synopsys translate_off
|
// synopsys translate_off
|
`include "timescale.v"
|
`include "timescale.v"
|
// synopsys translate_on
|
// synopsys translate_on
|
`include "nova_defines.v"
|
`include "nova_defines.v"
|
|
|
module Inter_mv_decoding (clk,reset_n,Is_skip_run_entry,Is_skip_run_end,
|
module Inter_mv_decoding (clk,reset_n,Is_skip_run_entry,Is_skip_run_end,
|
slice_data_state,mb_pred_state,sub_mb_pred_state,mvd,
|
slice_data_state,mb_pred_state,sub_mb_pred_state,mvd,
|
mb_num,mb_num_h,mb_num_v,mb_type_general,sub_mb_type,end_of_MB_DEC,mbPartIdx,subMbPartIdx,compIdx,
|
mb_num,mb_num_h,mb_num_v,mb_type_general,sub_mb_type,end_of_MB_DEC,mbPartIdx,subMbPartIdx,compIdx,
|
MBTypeGen_mbAddrA,MBTypeGen_mbAddrB_reg,MBTypeGen_mbAddrD,
|
MBTypeGen_mbAddrA,MBTypeGen_mbAddrB_reg,MBTypeGen_mbAddrD,
|
mvx_mbAddrB_dout,mvy_mbAddrB_dout,mvx_mbAddrC_dout,mvy_mbAddrC_dout,mv_mbAddrB_rd_for_DF,
|
mvx_mbAddrB_dout,mvy_mbAddrB_dout,mvx_mbAddrC_dout,mvy_mbAddrC_dout,mv_mbAddrB_rd_for_DF,
|
|
|
skip_mv_calc,Is_skipMB_mv_calc,mvx_mbAddrA,mvy_mbAddrA,
|
skip_mv_calc,Is_skipMB_mv_calc,mvx_mbAddrA,mvy_mbAddrA,
|
mvx_mbAddrB_cs_n,mvx_mbAddrB_wr_n,mvx_mbAddrB_rd_addr,mvx_mbAddrB_wr_addr,mvx_mbAddrB_din,
|
mvx_mbAddrB_cs_n,mvx_mbAddrB_wr_n,mvx_mbAddrB_rd_addr,mvx_mbAddrB_wr_addr,mvx_mbAddrB_din,
|
mvy_mbAddrB_cs_n,mvy_mbAddrB_wr_n,mvy_mbAddrB_rd_addr,mvy_mbAddrB_wr_addr,mvy_mbAddrB_din,
|
mvy_mbAddrB_cs_n,mvy_mbAddrB_wr_n,mvy_mbAddrB_rd_addr,mvy_mbAddrB_wr_addr,mvy_mbAddrB_din,
|
mvx_mbAddrC_cs_n,mvx_mbAddrC_wr_n,mvx_mbAddrC_rd_addr,mvx_mbAddrC_wr_addr,mvx_mbAddrC_din,
|
mvx_mbAddrC_cs_n,mvx_mbAddrC_wr_n,mvx_mbAddrC_rd_addr,mvx_mbAddrC_wr_addr,mvx_mbAddrC_din,
|
mvy_mbAddrC_cs_n,mvy_mbAddrC_wr_n,mvy_mbAddrC_rd_addr,mvy_mbAddrC_wr_addr,mvy_mbAddrC_din,
|
mvy_mbAddrC_cs_n,mvy_mbAddrC_wr_n,mvy_mbAddrC_rd_addr,mvy_mbAddrC_wr_addr,mvy_mbAddrC_din,
|
mv_is16x16,
|
mv_is16x16,
|
mvx_CurrMb0,mvx_CurrMb1,mvx_CurrMb2,mvx_CurrMb3,
|
mvx_CurrMb0,mvx_CurrMb1,mvx_CurrMb2,mvx_CurrMb3,
|
mvy_CurrMb0,mvy_CurrMb1,mvy_CurrMb2,mvy_CurrMb3);
|
mvy_CurrMb0,mvy_CurrMb1,mvy_CurrMb2,mvy_CurrMb3);
|
input clk,reset_n;
|
input clk,reset_n;
|
input Is_skip_run_entry;
|
input Is_skip_run_entry;
|
input Is_skip_run_end;
|
input Is_skip_run_end;
|
input [3:0] slice_data_state;
|
input [3:0] slice_data_state;
|
input [2:0] mb_pred_state;
|
input [2:0] mb_pred_state;
|
input [1:0] sub_mb_pred_state;
|
input [1:0] sub_mb_pred_state;
|
input [7:0] mvd;
|
input [7:0] mvd;
|
input [6:0] mb_num;
|
input [6:0] mb_num;
|
input [3:0] mb_num_h;
|
input [3:0] mb_num_h;
|
input [3:0] mb_num_v;
|
input [3:0] mb_num_v;
|
input [3:0] mb_type_general;
|
input [3:0] mb_type_general;
|
input [1:0] sub_mb_type;
|
input [1:0] sub_mb_type;
|
input end_of_MB_DEC;
|
input end_of_MB_DEC;
|
input [1:0] mbPartIdx,subMbPartIdx;
|
input [1:0] mbPartIdx,subMbPartIdx;
|
input compIdx;
|
input compIdx;
|
input [1:0] MBTypeGen_mbAddrA;
|
input [1:0] MBTypeGen_mbAddrA;
|
input MBTypeGen_mbAddrD;
|
input MBTypeGen_mbAddrD;
|
input [21:0] MBTypeGen_mbAddrB_reg;
|
input [21:0] MBTypeGen_mbAddrB_reg;
|
input [31:0] mvx_mbAddrB_dout,mvy_mbAddrB_dout;
|
input [31:0] mvx_mbAddrB_dout,mvy_mbAddrB_dout;
|
input [7:0] mvx_mbAddrC_dout,mvy_mbAddrC_dout;
|
input [7:0] mvx_mbAddrC_dout,mvy_mbAddrC_dout;
|
input mv_mbAddrB_rd_for_DF;
|
input mv_mbAddrB_rd_for_DF;
|
|
|
output skip_mv_calc;
|
output skip_mv_calc;
|
output Is_skipMB_mv_calc;
|
output Is_skipMB_mv_calc;
|
output [31:0] mvx_mbAddrA,mvy_mbAddrA;
|
output [31:0] mvx_mbAddrA,mvy_mbAddrA;
|
output mvx_mbAddrB_cs_n,mvy_mbAddrB_cs_n,mvx_mbAddrC_cs_n,mvy_mbAddrC_cs_n;
|
output mvx_mbAddrB_cs_n,mvy_mbAddrB_cs_n,mvx_mbAddrC_cs_n,mvy_mbAddrC_cs_n;
|
output mvx_mbAddrB_wr_n,mvy_mbAddrB_wr_n,mvx_mbAddrC_wr_n,mvy_mbAddrC_wr_n;
|
output mvx_mbAddrB_wr_n,mvy_mbAddrB_wr_n,mvx_mbAddrC_wr_n,mvy_mbAddrC_wr_n;
|
output [3:0] mvx_mbAddrB_rd_addr,mvy_mbAddrB_rd_addr,mvx_mbAddrC_rd_addr,mvy_mbAddrC_rd_addr;
|
output [3:0] mvx_mbAddrB_rd_addr,mvy_mbAddrB_rd_addr,mvx_mbAddrC_rd_addr,mvy_mbAddrC_rd_addr;
|
output [3:0] mvx_mbAddrB_wr_addr,mvy_mbAddrB_wr_addr,mvx_mbAddrC_wr_addr,mvy_mbAddrC_wr_addr;
|
output [3:0] mvx_mbAddrB_wr_addr,mvy_mbAddrB_wr_addr,mvx_mbAddrC_wr_addr,mvy_mbAddrC_wr_addr;
|
output [31:0] mvx_mbAddrB_din,mvy_mbAddrB_din;
|
output [31:0] mvx_mbAddrB_din,mvy_mbAddrB_din;
|
output [7:0] mvx_mbAddrC_din,mvy_mbAddrC_din;
|
output [7:0] mvx_mbAddrC_din,mvy_mbAddrC_din;
|
output mv_is16x16;
|
output mv_is16x16;
|
output [31:0] mvx_CurrMb0,mvx_CurrMb1,mvx_CurrMb2,mvx_CurrMb3;
|
output [31:0] mvx_CurrMb0,mvx_CurrMb1,mvx_CurrMb2,mvx_CurrMb3;
|
output [31:0] mvy_CurrMb0,mvy_CurrMb1,mvy_CurrMb2,mvy_CurrMb3;
|
output [31:0] mvy_CurrMb0,mvy_CurrMb1,mvy_CurrMb2,mvy_CurrMb3;
|
reg mvx_mbAddrB_cs_n,mvy_mbAddrB_cs_n,mvx_mbAddrC_cs_n,mvy_mbAddrC_cs_n;
|
reg mvx_mbAddrB_cs_n,mvy_mbAddrB_cs_n,mvx_mbAddrC_cs_n,mvy_mbAddrC_cs_n;
|
reg mvx_mbAddrB_wr_n,mvy_mbAddrB_wr_n,mvx_mbAddrC_wr_n,mvy_mbAddrC_wr_n;
|
reg mvx_mbAddrB_wr_n,mvy_mbAddrB_wr_n,mvx_mbAddrC_wr_n,mvy_mbAddrC_wr_n;
|
reg [3:0] mvx_mbAddrB_rd_addr,mvy_mbAddrB_rd_addr,mvx_mbAddrC_rd_addr,mvy_mbAddrC_rd_addr;
|
reg [3:0] mvx_mbAddrB_rd_addr,mvy_mbAddrB_rd_addr,mvx_mbAddrC_rd_addr,mvy_mbAddrC_rd_addr;
|
reg [3:0] mvx_mbAddrB_wr_addr,mvy_mbAddrB_wr_addr,mvx_mbAddrC_wr_addr,mvy_mbAddrC_wr_addr;
|
reg [3:0] mvx_mbAddrB_wr_addr,mvy_mbAddrB_wr_addr,mvx_mbAddrC_wr_addr,mvy_mbAddrC_wr_addr;
|
reg [31:0] mvx_mbAddrB_din,mvy_mbAddrB_din;
|
reg [31:0] mvx_mbAddrB_din,mvy_mbAddrB_din;
|
reg [7:0] mvx_mbAddrC_din,mvy_mbAddrC_din;
|
reg [7:0] mvx_mbAddrC_din,mvy_mbAddrC_din;
|
reg mv_is16x16;
|
reg mv_is16x16;
|
reg [31:0] mvx_CurrMb0,mvx_CurrMb1,mvx_CurrMb2,mvx_CurrMb3;
|
reg [31:0] mvx_CurrMb0,mvx_CurrMb1,mvx_CurrMb2,mvx_CurrMb3;
|
reg [31:0] mvy_CurrMb0,mvy_CurrMb1,mvy_CurrMb2,mvy_CurrMb3;
|
reg [31:0] mvy_CurrMb0,mvy_CurrMb1,mvy_CurrMb2,mvy_CurrMb3;
|
|
|
reg [7:0] mvpAx,mvpAy,mvpBx,mvpBy,mvpCx,mvpCy;
|
reg [7:0] mvpAx,mvpAy,mvpBx,mvpBy,mvpCx,mvpCy;
|
reg [31:0] mvx_mbAddrA,mvy_mbAddrA;
|
reg [31:0] mvx_mbAddrA,mvy_mbAddrA;
|
wire [7:0] mvx_mbAddrD,mvy_mbAddrD;
|
wire [7:0] mvx_mbAddrD,mvy_mbAddrD;
|
reg [7:0] mvpx,mvpy,mvx,mvy;
|
reg [7:0] mvpx,mvpy,mvx,mvy;
|
|
|
reg skip_mv_calc; //This signal is of reg type and is active for one cycle after end_of_MB_DEC and before
|
reg skip_mv_calc; //This signal is of reg type and is active for one cycle after end_of_MB_DEC and before
|
//trigger_blk4x4_inter_pred.It is used to direct motion vector prediction for skipped MB
|
//trigger_blk4x4_inter_pred.It is used to direct motion vector prediction for skipped MB
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
skip_mv_calc <= 1'b0;
|
skip_mv_calc <= 1'b0;
|
else if (slice_data_state == `skip_run_duration && end_of_MB_DEC && !Is_skip_run_end)
|
else if (slice_data_state == `skip_run_duration && end_of_MB_DEC && !Is_skip_run_end)
|
skip_mv_calc <= 1'b1;
|
skip_mv_calc <= 1'b1;
|
else
|
else
|
skip_mv_calc <= 1'b0;
|
skip_mv_calc <= 1'b0;
|
|
|
wire Is_skipMB_mv_calc;
|
wire Is_skipMB_mv_calc;
|
assign Is_skipMB_mv_calc = Is_skip_run_entry | skip_mv_calc;
|
assign Is_skipMB_mv_calc = Is_skip_run_entry | skip_mv_calc;
|
|
|
reg [1:0] MBTypeGen_mbAddrB;
|
reg [1:0] MBTypeGen_mbAddrB;
|
reg [1:0] MBTypeGen_mbAddrC;
|
reg [1:0] MBTypeGen_mbAddrC;
|
always @ (mb_num_h or MBTypeGen_mbAddrB_reg)
|
always @ (mb_num_h or MBTypeGen_mbAddrB_reg)
|
case (mb_num_h)
|
case (mb_num_h)
|
0 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[1:0];
|
0 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[1:0];
|
1 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[3:2];
|
1 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[3:2];
|
2 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[5:4];
|
2 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[5:4];
|
3 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[7:6];
|
3 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[7:6];
|
4 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[9:8];
|
4 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[9:8];
|
5 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[11:10];
|
5 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[11:10];
|
6 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[13:12];
|
6 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[13:12];
|
7 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[15:14];
|
7 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[15:14];
|
8 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[17:16];
|
8 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[17:16];
|
9 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[19:18];
|
9 :MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[19:18];
|
10:MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[21:20];
|
10:MBTypeGen_mbAddrB <= MBTypeGen_mbAddrB_reg[21:20];
|
default:MBTypeGen_mbAddrB <= 0;
|
default:MBTypeGen_mbAddrB <= 0;
|
endcase
|
endcase
|
always @ (mb_num_h or MBTypeGen_mbAddrB_reg)
|
always @ (mb_num_h or MBTypeGen_mbAddrB_reg)
|
case (mb_num_h)
|
case (mb_num_h)
|
0:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[3:2];
|
0:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[3:2];
|
1:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[5:4];
|
1:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[5:4];
|
2:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[7:6];
|
2:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[7:6];
|
3:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[9:8];
|
3:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[9:8];
|
4:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[11:10];
|
4:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[11:10];
|
5:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[13:12];
|
5:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[13:12];
|
6:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[15:14];
|
6:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[15:14];
|
7:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[17:16];
|
7:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[17:16];
|
8:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[19:18];
|
8:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[19:18];
|
9:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[21:20];
|
9:MBTypeGen_mbAddrC <= MBTypeGen_mbAddrB_reg[21:20];
|
default:MBTypeGen_mbAddrC <= 0;
|
default:MBTypeGen_mbAddrC <= 0;
|
endcase
|
endcase
|
|
|
wire refIdxL0_A; //Here refIdxL0_A == 1'b1 is equal to refIdxL0_A == -1 in Page122 of H.264 2003.5 standard
|
wire refIdxL0_A; //Here refIdxL0_A == 1'b1 is equal to refIdxL0_A == -1 in Page122 of H.264 2003.5 standard
|
wire refIdxL0_B; //Here refIdxL0_B == 1'b1 is equal to refIdxL0_B == -1 in Page122 of H.264 2003.5 standard
|
wire refIdxL0_B; //Here refIdxL0_B == 1'b1 is equal to refIdxL0_B == -1 in Page122 of H.264 2003.5 standard
|
reg refIdxL0_C; //Here refIdxL0_C == 1'b1 is equal to refIdxL0_C == -1 in Page122 of H.264 2003.5 standard
|
reg refIdxL0_C; //Here refIdxL0_C == 1'b1 is equal to refIdxL0_C == -1 in Page122 of H.264 2003.5 standard
|
|
|
assign refIdxL0_A = (
|
assign refIdxL0_A = (
|
//P_skip
|
//P_skip
|
(Is_skipMB_mv_calc ||
|
(Is_skipMB_mv_calc ||
|
//Inter16x16,Inter16x8,Inter8x16 left blk
|
//Inter16x16,Inter16x8,Inter8x16 left blk
|
(mb_pred_state == `mvd_l0_s && (mb_type_general == `MB_Inter16x16 || mb_type_general == `MB_Inter16x8 || (mb_type_general == `MB_Inter8x16 && mbPartIdx == 0))) ||
|
(mb_pred_state == `mvd_l0_s && (mb_type_general == `MB_Inter16x16 || mb_type_general == `MB_Inter16x8 || (mb_type_general == `MB_Inter8x16 && mbPartIdx == 0))) ||
|
//Inter8x8,left most blk
|
//Inter8x8,left most blk
|
(sub_mb_pred_state == `sub_mvd_l0_s && (mbPartIdx == 0 || mbPartIdx == 2) && (
|
(sub_mb_pred_state == `sub_mvd_l0_s && (mbPartIdx == 0 || mbPartIdx == 2) && (
|
sub_mb_type == 0 ||
|
sub_mb_type == 0 ||
|
sub_mb_type == 1 ||
|
sub_mb_type == 1 ||
|
(sub_mb_type == 2 && subMbPartIdx == 0) ||
|
(sub_mb_type == 2 && subMbPartIdx == 0) ||
|
(sub_mb_type == 3 && (subMbPartIdx == 0 || subMbPartIdx == 2))))) &&
|
(sub_mb_type == 3 && (subMbPartIdx == 0 || subMbPartIdx == 2))))) &&
|
(mb_num_h == 0 || MBTypeGen_mbAddrA[1] == 1))? 1'b1:1'b0;
|
(mb_num_h == 0 || MBTypeGen_mbAddrA[1] == 1))? 1'b1:1'b0;
|
|
|
assign refIdxL0_B = (
|
assign refIdxL0_B = (
|
//P_skip
|
//P_skip
|
(Is_skipMB_mv_calc ||
|
(Is_skipMB_mv_calc ||
|
//Inter16x16,Inter16x8 upper blk,Inter8x16
|
//Inter16x16,Inter16x8 upper blk,Inter8x16
|
(mb_pred_state == `mvd_l0_s && (mb_type_general == `MB_Inter16x16 || (mb_type_general == `MB_Inter16x8 && mbPartIdx == 0) || mb_type_general == `MB_Inter8x16)) ||
|
(mb_pred_state == `mvd_l0_s && (mb_type_general == `MB_Inter16x16 || (mb_type_general == `MB_Inter16x8 && mbPartIdx == 0) || mb_type_general == `MB_Inter8x16)) ||
|
//Inter8x8,left most blk
|
//Inter8x8,left most blk
|
(sub_mb_pred_state == `sub_mvd_l0_s && (mbPartIdx == 0 || mbPartIdx == 1) && (
|
(sub_mb_pred_state == `sub_mvd_l0_s && (mbPartIdx == 0 || mbPartIdx == 1) && (
|
sub_mb_type == 0 ||
|
sub_mb_type == 0 ||
|
sub_mb_type == 2 ||
|
sub_mb_type == 2 ||
|
(sub_mb_type == 1 && subMbPartIdx == 0) ||
|
(sub_mb_type == 1 && subMbPartIdx == 0) ||
|
(sub_mb_type == 3 && (subMbPartIdx == 0 || subMbPartIdx == 1))))) &&
|
(sub_mb_type == 3 && (subMbPartIdx == 0 || subMbPartIdx == 1))))) &&
|
(mb_num_v == 0 || MBTypeGen_mbAddrB[1] == 1))? 1'b1:1'b0;
|
(mb_num_v == 0 || MBTypeGen_mbAddrB[1] == 1))? 1'b1:1'b0;
|
|
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or mb_num_v or mb_num_h
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or mb_num_v or mb_num_h
|
or sub_mb_type or mbPartIdx or subMbPartIdx or MBTypeGen_mbAddrC[1] or MBTypeGen_mbAddrD
|
or sub_mb_type or mbPartIdx or subMbPartIdx or MBTypeGen_mbAddrC[1] or MBTypeGen_mbAddrD
|
or refIdxL0_A or refIdxL0_B)
|
or refIdxL0_A or refIdxL0_B)
|
//P_skip,Inter16x16
|
//P_skip,Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16))
|
begin
|
begin
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
else if (mb_num_h == 10) refIdxL0_C <= (MBTypeGen_mbAddrD == `MB_addrD_Intra)? 1'b1:1'b0;
|
else if (mb_num_h == 10) refIdxL0_C <= (MBTypeGen_mbAddrD == `MB_addrD_Intra)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8)
|
begin
|
begin
|
if (mbPartIdx == 0) //upper blk
|
if (mbPartIdx == 0) //upper blk
|
begin
|
begin
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
else if (mb_num_h == 10) refIdxL0_C <= (MBTypeGen_mbAddrD == `MB_addrD_Intra)? 1'b1:1'b0;
|
else if (mb_num_h == 10) refIdxL0_C <= (MBTypeGen_mbAddrD == `MB_addrD_Intra)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
end
|
end
|
else //bottom blk
|
else //bottom blk
|
refIdxL0_C <= refIdxL0_A;
|
refIdxL0_C <= refIdxL0_A;
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16)
|
begin
|
begin
|
if (mbPartIdx == 0) //left blk
|
if (mbPartIdx == 0) //left blk
|
refIdxL0_C <= refIdxL0_B;
|
refIdxL0_C <= refIdxL0_B;
|
else //right blk
|
else //right blk
|
begin
|
begin
|
if (mb_num_v == 0 || mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
if (mb_num_v == 0 || mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
end
|
end
|
end
|
end
|
//Inter8x8 and below
|
//Inter8x8 and below
|
else if (sub_mb_pred_state == `sub_mvd_l0_s)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
2'b00: //left-top 8x8 blk
|
2'b00: //left-top 8x8 blk
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:refIdxL0_C <= refIdxL0_B;
|
0:refIdxL0_C <= refIdxL0_B;
|
1:refIdxL0_C <= (subMbPartIdx == 0)? refIdxL0_B:refIdxL0_A;
|
1:refIdxL0_C <= (subMbPartIdx == 0)? refIdxL0_B:refIdxL0_A;
|
2:refIdxL0_C <= refIdxL0_B;
|
2:refIdxL0_C <= refIdxL0_B;
|
3:
|
3:
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0,1:refIdxL0_C <= refIdxL0_B;
|
0,1:refIdxL0_C <= refIdxL0_B;
|
2,3:refIdxL0_C <= 1'b0;
|
2,3:refIdxL0_C <= 1'b0;
|
endcase
|
endcase
|
endcase
|
endcase
|
2'b01: //right-top 8x8 blk
|
2'b01: //right-top 8x8 blk
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
1: //8x4
|
1: //8x4
|
if (subMbPartIdx == 0)
|
if (subMbPartIdx == 0)
|
begin
|
begin
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
end
|
end
|
else
|
else
|
refIdxL0_C <= 1'b0;
|
refIdxL0_C <= 1'b0;
|
2: //4x8
|
2: //4x8
|
if (subMbPartIdx == 0) refIdxL0_C <= refIdxL0_B;
|
if (subMbPartIdx == 0) refIdxL0_C <= refIdxL0_B;
|
else
|
else
|
begin
|
begin
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
end
|
end
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:refIdxL0_C <= refIdxL0_B;
|
0:refIdxL0_C <= refIdxL0_B;
|
1:
|
1:
|
begin
|
begin
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
if (mb_num_v == 0) refIdxL0_C <= 1'b1;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else if (mb_num_h == 10) refIdxL0_C <= refIdxL0_B;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
else refIdxL0_C <= (MBTypeGen_mbAddrC[1] == 1'b1)? 1'b1:1'b0;
|
end
|
end
|
2,3:refIdxL0_C <= 1'b0;
|
2,3:refIdxL0_C <= 1'b0;
|
endcase
|
endcase
|
endcase
|
endcase
|
2'b10: //left-bottom 8x8 blk
|
2'b10: //left-bottom 8x8 blk
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:refIdxL0_C <= 1'b0;
|
0:refIdxL0_C <= 1'b0;
|
1:refIdxL0_C <= (subMbPartIdx == 0)? 1'b0:refIdxL0_A;
|
1:refIdxL0_C <= (subMbPartIdx == 0)? 1'b0:refIdxL0_A;
|
2:refIdxL0_C <= 1'b0;
|
2:refIdxL0_C <= 1'b0;
|
3:refIdxL0_C <= 1'b0;
|
3:refIdxL0_C <= 1'b0;
|
endcase
|
endcase
|
2'b11: //right-bottom 8x8 blk
|
2'b11: //right-bottom 8x8 blk
|
refIdxL0_C <= 1'b0;
|
refIdxL0_C <= 1'b0;
|
endcase
|
endcase
|
else
|
else
|
refIdxL0_C <= 1'b0;
|
refIdxL0_C <= 1'b0;
|
|
|
//-------------
|
//-------------
|
//mvpAx
|
//mvpAx
|
//-------------
|
//-------------
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or mvx_mbAddrA or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3
|
or mvx_mbAddrA or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
//P_skip or Inter16x16
|
//P_skip or Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
mvpAx <= {8{refIdxL0_B}} & mvx_mbAddrA[7:0];
|
mvpAx <= {8{refIdxL0_B}} & mvx_mbAddrA[7:0];
|
else
|
else
|
mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
else
|
else
|
mvpAx <= {8{refIdxL0_C}} & mvx_CurrMb0[15:8];
|
mvpAx <= {8{refIdxL0_C}} & mvx_CurrMb0[15:8];
|
end
|
end
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0) //sub_mb_pred
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0) //sub_mb_pred
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
1:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[15:8];
|
1:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[15:8];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
1:mvpAx <= mvx_CurrMb0[7:0];
|
1:mvpAx <= mvx_CurrMb0[7:0];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[7:0];
|
1:mvpAx <= mvx_CurrMb0[7:0];
|
1:mvpAx <= mvx_CurrMb0[7:0];
|
2:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[15:8];
|
2:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[15:8];
|
3:mvpAx <= mvx_CurrMb0[23:16];
|
3:mvpAx <= mvx_CurrMb0[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAx <= mvx_CurrMb0[15:8];
|
0:mvpAx <= mvx_CurrMb0[15:8];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= mvx_CurrMb0[15:8]; 1:mvpAx <= mvx_CurrMb0[31:24];
|
0:mvpAx <= mvx_CurrMb0[15:8]; 1:mvpAx <= mvx_CurrMb0[31:24];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= mvx_CurrMb0[15:8]; 1:mvpAx <= mvx_CurrMb1[7:0];
|
0:mvpAx <= mvx_CurrMb0[15:8]; 1:mvpAx <= mvx_CurrMb1[7:0];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= mvx_CurrMb0[15:8] ; 1:mvpAx <= mvx_CurrMb1[7:0];
|
0:mvpAx <= mvx_CurrMb0[15:8] ; 1:mvpAx <= mvx_CurrMb1[7:0];
|
2:mvpAx <= mvx_CurrMb0[31:24]; 3:mvpAx <= mvx_CurrMb1[23:16];
|
2:mvpAx <= mvx_CurrMb0[31:24]; 3:mvpAx <= mvx_CurrMb1[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
1:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[31:24];
|
1:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[31:24];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
1:mvpAx <= mvx_CurrMb2[7:0];
|
1:mvpAx <= mvx_CurrMb2[7:0];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
0:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[23:16];
|
1:mvpAx <= mvx_CurrMb2[7:0];
|
1:mvpAx <= mvx_CurrMb2[7:0];
|
2:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[31:24];
|
2:mvpAx <= {8{~refIdxL0_A}} & mvx_mbAddrA[31:24];
|
3:mvpAx <= mvx_CurrMb2[23:16];
|
3:mvpAx <= mvx_CurrMb2[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAx <= mvx_CurrMb2[15:8];
|
0:mvpAx <= mvx_CurrMb2[15:8];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= mvx_CurrMb2[15:8]; 1:mvpAx <= mvx_CurrMb2[31:24];
|
0:mvpAx <= mvx_CurrMb2[15:8]; 1:mvpAx <= mvx_CurrMb2[31:24];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= mvx_CurrMb2[15:8]; 1:mvpAx <= mvx_CurrMb3[7:0];
|
0:mvpAx <= mvx_CurrMb2[15:8]; 1:mvpAx <= mvx_CurrMb3[7:0];
|
default:mvpAx <= 0;
|
default:mvpAx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAx <= mvx_CurrMb2[15:8]; 1:mvpAx <= mvx_CurrMb3[7:0];
|
0:mvpAx <= mvx_CurrMb2[15:8]; 1:mvpAx <= mvx_CurrMb3[7:0];
|
2:mvpAx <= mvx_CurrMb2[31:24]; 3:mvpAx <= mvx_CurrMb3[23:16];
|
2:mvpAx <= mvx_CurrMb2[31:24]; 3:mvpAx <= mvx_CurrMb3[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
mvpAx <= 0;
|
mvpAx <= 0;
|
|
|
//-------------
|
//-------------
|
//mvpAy
|
//mvpAy
|
//-------------
|
//-------------
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or mvy_mbAddrA or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3
|
or mvy_mbAddrA or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
//P_skip or Inter16x16
|
//P_skip or Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
mvpAy <= {8{refIdxL0_B}} & mvy_mbAddrA[7:0];
|
mvpAy <= {8{refIdxL0_B}} & mvy_mbAddrA[7:0];
|
else
|
else
|
mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
else
|
else
|
mvpAy <= {8{refIdxL0_C}} & mvy_CurrMb0[15:8];
|
mvpAy <= {8{refIdxL0_C}} & mvy_CurrMb0[15:8];
|
end
|
end
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1) //sub_mb_pred
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1) //sub_mb_pred
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
1:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[15:8];
|
1:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[15:8];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
1:mvpAy <= mvy_CurrMb0[7:0];
|
1:mvpAy <= mvy_CurrMb0[7:0];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[7:0];
|
1:mvpAy <= mvy_CurrMb0[7:0];
|
1:mvpAy <= mvy_CurrMb0[7:0];
|
2:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[15:8];
|
2:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[15:8];
|
3:mvpAy <= mvy_CurrMb0[23:16];
|
3:mvpAy <= mvy_CurrMb0[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAy <= mvy_CurrMb0[15:8];
|
0:mvpAy <= mvy_CurrMb0[15:8];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= mvy_CurrMb0[15:8]; 1:mvpAy <= mvy_CurrMb0[31:24];
|
0:mvpAy <= mvy_CurrMb0[15:8]; 1:mvpAy <= mvy_CurrMb0[31:24];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= mvy_CurrMb0[15:8]; 1:mvpAy <= mvy_CurrMb1[7:0];
|
0:mvpAy <= mvy_CurrMb0[15:8]; 1:mvpAy <= mvy_CurrMb1[7:0];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= mvy_CurrMb0[15:8] ; 1:mvpAy <= mvy_CurrMb1[7:0];
|
0:mvpAy <= mvy_CurrMb0[15:8] ; 1:mvpAy <= mvy_CurrMb1[7:0];
|
2:mvpAy <= mvy_CurrMb0[31:24]; 3:mvpAy <= mvy_CurrMb1[23:16];
|
2:mvpAy <= mvy_CurrMb0[31:24]; 3:mvpAy <= mvy_CurrMb1[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
1:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[31:24];
|
1:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[31:24];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
1:mvpAy <= mvy_CurrMb2[7:0];
|
1:mvpAy <= mvy_CurrMb2[7:0];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
0:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[23:16];
|
1:mvpAy <= mvy_CurrMb2[7:0];
|
1:mvpAy <= mvy_CurrMb2[7:0];
|
2:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[31:24];
|
2:mvpAy <= {8{~refIdxL0_A}} & mvy_mbAddrA[31:24];
|
3:mvpAy <= mvy_CurrMb2[23:16];
|
3:mvpAy <= mvy_CurrMb2[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpAy <= mvy_CurrMb2[15:8];
|
0:mvpAy <= mvy_CurrMb2[15:8];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= mvy_CurrMb2[15:8]; 1:mvpAy <= mvy_CurrMb2[31:24];
|
0:mvpAy <= mvy_CurrMb2[15:8]; 1:mvpAy <= mvy_CurrMb2[31:24];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= mvy_CurrMb2[15:8]; 1:mvpAy <= mvy_CurrMb3[7:0];
|
0:mvpAy <= mvy_CurrMb2[15:8]; 1:mvpAy <= mvy_CurrMb3[7:0];
|
default:mvpAy <= 0;
|
default:mvpAy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpAy <= mvy_CurrMb2[15:8]; 1:mvpAy <= mvy_CurrMb3[7:0];
|
0:mvpAy <= mvy_CurrMb2[15:8]; 1:mvpAy <= mvy_CurrMb3[7:0];
|
2:mvpAy <= mvy_CurrMb2[31:24]; 3:mvpAy <= mvy_CurrMb3[23:16];
|
2:mvpAy <= mvy_CurrMb2[31:24]; 3:mvpAy <= mvy_CurrMb3[23:16];
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
mvpAy <= 0;
|
mvpAy <= 0;
|
//-------------
|
//-------------
|
//mvpBx
|
//mvpBx
|
//-------------
|
//-------------
|
//if B is not available,it can be predicted from A when both B and C are not available
|
//if B is not available,it can be predicted from A when both B and C are not available
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or sub_mb_type
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or sub_mb_type
|
or mb_num or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1]
|
or mb_num or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1]
|
or mvx_mbAddrA or mvx_mbAddrB_dout or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3
|
or mvx_mbAddrA or mvx_mbAddrB_dout or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
//P_skip or Inter16x16
|
//P_skip or Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
begin
|
begin
|
if (mb_num == 0) mvpBx <= 0;
|
if (mb_num == 0) mvpBx <= 0;
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
begin
|
begin
|
if (mb_num == 0) mvpBx <= 0;
|
if (mb_num == 0) mvpBx <= 0;
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
end
|
end
|
else //for bottom 8x8 block when mbAddrA is not available
|
else //for bottom 8x8 block when mbAddrA is not available
|
mvpBx <= (!refIdxL0_A)? 0:mvx_CurrMb0[23:16];
|
mvpBx <= (!refIdxL0_A)? 0:mvx_CurrMb0[23:16];
|
end
|
end
|
//Inter8x16:for left 8x8 block when mbAddrA is not available
|
//Inter8x16:for left 8x8 block when mbAddrA is not available
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
begin
|
begin
|
if (mbPartIdx == 0) //left blk
|
if (mbPartIdx == 0) //left blk
|
mvpBx <= (refIdxL0_A && !refIdxL0_B)? mvx_mbAddrB_dout[31:24]:0;
|
mvpBx <= (refIdxL0_A && !refIdxL0_B)? mvx_mbAddrB_dout[31:24]:0;
|
else //right blk
|
else //right blk
|
case (!refIdxL0_C)
|
case (!refIdxL0_C)
|
1'b1:mvpBx <= 0;
|
1'b1:mvpBx <= 0;
|
1'b0:
|
1'b0:
|
if (mb_num_v == 0)
|
if (mb_num_v == 0)
|
mvpBx <= mvx_CurrMb0[7:0];
|
mvpBx <= mvx_CurrMb0[7:0];
|
else
|
else
|
mvpBx <= (!refIdxL0_B)? mvx_mbAddrB_dout[15:8]:0;
|
mvpBx <= (!refIdxL0_B)? mvx_mbAddrB_dout[15:8]:0;
|
endcase
|
endcase
|
end
|
end
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:if (mb_num == 0) mvpBx <= 0;
|
0:if (mb_num == 0) mvpBx <= 0;
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpBx <= 0;
|
0:if (mb_num == 0) mvpBx <= 0;
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
1:mvpBx <= mvx_CurrMb0[7:0];
|
1:mvpBx <= mvx_CurrMb0[7:0];
|
default:mvpBx <= 0;
|
default:mvpBx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpBx <= 0;
|
0:if (mb_num == 0) mvpBx <= 0;
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
1:if (mb_num_v == 0) mvpBx <= mvx_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpBx <= mvx_CurrMb0[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
default:mvpBx <= 0;
|
default:mvpBx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpBx <= 0;
|
0:if (mb_num == 0) mvpBx <= 0;
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[31:24];
|
1:if (mb_num_v == 0) mvpBx <= mvx_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpBx <= mvx_CurrMb0[7:0];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpBx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
2:mvpBx <= mvx_CurrMb0[7:0];
|
2:mvpBx <= mvx_CurrMb0[7:0];
|
3:mvpBx <= mvx_CurrMb0[15:8];
|
3:mvpBx <= mvx_CurrMb0[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
1:mvpBx <= mvx_CurrMb1[7:0];
|
1:mvpBx <= mvx_CurrMb1[7:0];
|
default:mvpBx <= 0;
|
default:mvpBx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
1:mvpBx <= (mb_num_v == 0)? mvx_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0]);
|
1:mvpBx <= (mb_num_v == 0)? mvx_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0]);
|
default:mvpBx <= 0;
|
default:mvpBx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
0:mvpBx <= (mb_num_v == 0)? mvx_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8]);
|
1:mvpBx <= (mb_num_v == 0)? mvx_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0]);
|
1:mvpBx <= (mb_num_v == 0)? mvx_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0]);
|
2:mvpBx <= mvx_CurrMb1[7:0];
|
2:mvpBx <= mvx_CurrMb1[7:0];
|
3:mvpBx <= mvx_CurrMb1[15:8];
|
3:mvpBx <= mvx_CurrMb1[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpBx <= mvx_CurrMb0[23:16];
|
0:mvpBx <= mvx_CurrMb0[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= mvx_CurrMb0[23:16]; 1:mvpBx <= mvx_CurrMb2[7:0]; default:mvpBx <= 0;
|
0:mvpBx <= mvx_CurrMb0[23:16]; 1:mvpBx <= mvx_CurrMb2[7:0]; default:mvpBx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= mvx_CurrMb0[23:16]; 1:mvpBx <= mvx_CurrMb0[31:24]; default:mvpBx <= 0;
|
0:mvpBx <= mvx_CurrMb0[23:16]; 1:mvpBx <= mvx_CurrMb0[31:24]; default:mvpBx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= mvx_CurrMb0[23:16]; 1:mvpBx <= mvx_CurrMb0[31:24];
|
0:mvpBx <= mvx_CurrMb0[23:16]; 1:mvpBx <= mvx_CurrMb0[31:24];
|
2:mvpBx <= mvx_CurrMb2[7:0]; 3:mvpBx <= mvx_CurrMb2[15:8];
|
2:mvpBx <= mvx_CurrMb2[7:0]; 3:mvpBx <= mvx_CurrMb2[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpBx <= mvx_CurrMb1[23:16];
|
0:mvpBx <= mvx_CurrMb1[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= mvx_CurrMb1[23:16]; 1:mvpBx <= mvx_CurrMb3[7:0]; default:mvpBx <= 0;
|
0:mvpBx <= mvx_CurrMb1[23:16]; 1:mvpBx <= mvx_CurrMb3[7:0]; default:mvpBx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= mvx_CurrMb1[23:16]; 1:mvpBx <= mvx_CurrMb1[31:24]; default:mvpBx <= 0;
|
0:mvpBx <= mvx_CurrMb1[23:16]; 1:mvpBx <= mvx_CurrMb1[31:24]; default:mvpBx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBx <= mvx_CurrMb1[23:16]; 1:mvpBx <= mvx_CurrMb1[31:24];
|
0:mvpBx <= mvx_CurrMb1[23:16]; 1:mvpBx <= mvx_CurrMb1[31:24];
|
2:mvpBx <= mvx_CurrMb3[7:0]; 3:mvpBx <= mvx_CurrMb3[15:8];
|
2:mvpBx <= mvx_CurrMb3[7:0]; 3:mvpBx <= mvx_CurrMb3[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
mvpBx <= 0;
|
mvpBx <= 0;
|
//-------------
|
//-------------
|
//mvpBy
|
//mvpBy
|
//-------------
|
//-------------
|
//if B is not available,it can be predicted from A when both B and C are not available
|
//if B is not available,it can be predicted from A when both B and C are not available
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or sub_mb_type
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_type_general or sub_mb_type
|
or mb_num or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1]
|
or mb_num or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1]
|
or mvy_mbAddrA or mvy_mbAddrB_dout or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3
|
or mvy_mbAddrA or mvy_mbAddrB_dout or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
//P_skip or Inter16x16
|
//P_skip or Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
begin
|
begin
|
if (mb_num == 0) mvpBy <= 0;
|
if (mb_num == 0) mvpBy <= 0;
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
begin
|
begin
|
if (mbPartIdx == 0) //upper 8x8 block
|
if (mbPartIdx == 0) //upper 8x8 block
|
begin
|
begin
|
if (mb_num == 0) mvpBy <= 0;
|
if (mb_num == 0) mvpBy <= 0;
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
end
|
end
|
else //for bottom 8x8 block when mbAddrA is not available
|
else //for bottom 8x8 block when mbAddrA is not available
|
mvpBy <= (!refIdxL0_A)? 0:mvy_CurrMb0[23:16];
|
mvpBy <= (!refIdxL0_A)? 0:mvy_CurrMb0[23:16];
|
end
|
end
|
//Inter8x16:for left 8x8 block when mbAddrA is not available
|
//Inter8x16:for left 8x8 block when mbAddrA is not available
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
begin
|
begin
|
if (mbPartIdx == 0) //left blk
|
if (mbPartIdx == 0) //left blk
|
mvpBy <= (refIdxL0_A && !refIdxL0_B)? mvy_mbAddrB_dout[31:24]:0;
|
mvpBy <= (refIdxL0_A && !refIdxL0_B)? mvy_mbAddrB_dout[31:24]:0;
|
else //right blk
|
else //right blk
|
case (!refIdxL0_C)
|
case (!refIdxL0_C)
|
1'b1:mvpBy <= 0;
|
1'b1:mvpBy <= 0;
|
1'b0:
|
1'b0:
|
if (mb_num_v == 0)
|
if (mb_num_v == 0)
|
mvpBy <= mvy_CurrMb0[7:0];
|
mvpBy <= mvy_CurrMb0[7:0];
|
else
|
else
|
mvpBy <= (!refIdxL0_B)? mvy_mbAddrB_dout[15:8]:0;
|
mvpBy <= (!refIdxL0_B)? mvy_mbAddrB_dout[15:8]:0;
|
endcase
|
endcase
|
end
|
end
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:if (mb_num == 0) mvpBy <= 0;
|
0:if (mb_num == 0) mvpBy <= 0;
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpBy <= 0;
|
0:if (mb_num == 0) mvpBy <= 0;
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
1:mvpBy <= mvy_CurrMb0[7:0];
|
1:mvpBy <= mvy_CurrMb0[7:0];
|
default:mvpBy <= 0;
|
default:mvpBy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpBy <= 0;
|
0:if (mb_num == 0) mvpBy <= 0;
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
1:if (mb_num_v == 0) mvpBy <= mvy_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpBy <= mvy_CurrMb0[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
default:mvpBy <= 0;
|
default:mvpBy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpBy <= 0;
|
0:if (mb_num == 0) mvpBy <= 0;
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpBy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[31:24];
|
1:if (mb_num_v == 0) mvpBy <= mvy_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpBy <= mvy_CurrMb0[7:0];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpBy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
2:mvpBy <= mvy_CurrMb0[7:0];
|
2:mvpBy <= mvy_CurrMb0[7:0];
|
3:mvpBy <= mvy_CurrMb0[15:8];
|
3:mvpBy <= mvy_CurrMb0[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
1:mvpBy <= mvy_CurrMb1[7:0];
|
1:mvpBy <= mvy_CurrMb1[7:0];
|
default:mvpBy <= 0;
|
default:mvpBy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
1:mvpBy <= (mb_num_v == 0)? mvy_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0]);
|
1:mvpBy <= (mb_num_v == 0)? mvy_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0]);
|
default:mvpBy <= 0;
|
default:mvpBy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
0:mvpBy <= (mb_num_v == 0)? mvy_CurrMb0[15:8]:((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8]);
|
1:mvpBy <= (mb_num_v == 0)? mvy_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0]);
|
1:mvpBy <= (mb_num_v == 0)? mvy_CurrMb1[7:0] :((MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0]);
|
2:mvpBy <= mvy_CurrMb1[7:0];
|
2:mvpBy <= mvy_CurrMb1[7:0];
|
3:mvpBy <= mvy_CurrMb1[15:8];
|
3:mvpBy <= mvy_CurrMb1[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpBy <= mvy_CurrMb0[23:16];
|
0:mvpBy <= mvy_CurrMb0[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= mvy_CurrMb0[23:16]; 1:mvpBy <= mvy_CurrMb2[7:0]; default:mvpBy <= 0;
|
0:mvpBy <= mvy_CurrMb0[23:16]; 1:mvpBy <= mvy_CurrMb2[7:0]; default:mvpBy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= mvy_CurrMb0[23:16]; 1:mvpBy <= mvy_CurrMb0[31:24]; default:mvpBy <= 0;
|
0:mvpBy <= mvy_CurrMb0[23:16]; 1:mvpBy <= mvy_CurrMb0[31:24]; default:mvpBy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= mvy_CurrMb0[23:16]; 1:mvpBy <= mvy_CurrMb0[31:24];
|
0:mvpBy <= mvy_CurrMb0[23:16]; 1:mvpBy <= mvy_CurrMb0[31:24];
|
2:mvpBy <= mvy_CurrMb2[7:0]; 3:mvpBy <= mvy_CurrMb2[15:8];
|
2:mvpBy <= mvy_CurrMb2[7:0]; 3:mvpBy <= mvy_CurrMb2[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpBy <= mvy_CurrMb1[23:16];
|
0:mvpBy <= mvy_CurrMb1[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= mvy_CurrMb1[23:16]; 1:mvpBy <= mvy_CurrMb3[7:0]; default:mvpBy <= 0;
|
0:mvpBy <= mvy_CurrMb1[23:16]; 1:mvpBy <= mvy_CurrMb3[7:0]; default:mvpBy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= mvy_CurrMb1[23:16]; 1:mvpBy <= mvy_CurrMb1[31:24]; default:mvpBy <= 0;
|
0:mvpBy <= mvy_CurrMb1[23:16]; 1:mvpBy <= mvy_CurrMb1[31:24]; default:mvpBy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpBy <= mvy_CurrMb1[23:16]; 1:mvpBy <= mvy_CurrMb1[31:24];
|
0:mvpBy <= mvy_CurrMb1[23:16]; 1:mvpBy <= mvy_CurrMb1[31:24];
|
2:mvpBy <= mvy_CurrMb3[7:0]; 3:mvpBy <= mvy_CurrMb3[15:8];
|
2:mvpBy <= mvy_CurrMb3[7:0]; 3:mvpBy <= mvy_CurrMb3[15:8];
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
mvpBy <= 0;
|
mvpBy <= 0;
|
//-------------
|
//-------------
|
//mvpCx
|
//mvpCx
|
//-------------
|
//-------------
|
//if C is not available,it can be predicted from D,then from A
|
//if C is not available,it can be predicted from D,then from A
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_num or mb_num_h or mb_num_v
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_num or mb_num_h or mb_num_v
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1] or MBTypeGen_mbAddrC[1] or MBTypeGen_mbAddrD
|
or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1] or MBTypeGen_mbAddrC[1] or MBTypeGen_mbAddrD
|
or mvx_mbAddrA or mvx_mbAddrB_dout or mvx_mbAddrC_dout or mvx_mbAddrD
|
or mvx_mbAddrA or mvx_mbAddrB_dout or mvx_mbAddrC_dout or mvx_mbAddrD
|
or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3
|
or mvx_CurrMb0 or mvx_CurrMb1 or mvx_CurrMb2 or mvx_CurrMb3
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
//P_skip,Inter16x16
|
//P_skip,Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
begin
|
begin
|
if (mb_num == 0) mvpCx <= 0;
|
if (mb_num == 0) mvpCx <= 0;
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_h == 10) mvpCx <= (MBTypeGen_mbAddrD == 1)? 0:mvx_mbAddrD;
|
else if (mb_num_h == 10) mvpCx <= (MBTypeGen_mbAddrD == 1)? 0:mvx_mbAddrD;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
mvpCx <= (refIdxL0_B && !refIdxL0_C)? ((mb_num_h == 10)? mvx_mbAddrD:mvx_mbAddrC_dout):0;
|
mvpCx <= (refIdxL0_B && !refIdxL0_C)? ((mb_num_h == 10)? mvx_mbAddrD:mvx_mbAddrC_dout):0;
|
else
|
else
|
mvpCx <= 0;
|
mvpCx <= 0;
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
begin
|
begin
|
//when mbAddrA is not available,Inter8x16 left blk needs to have its mbAddrC (= mbAddrB of upper line) derived
|
//when mbAddrA is not available,Inter8x16 left blk needs to have its mbAddrC (= mbAddrB of upper line) derived
|
if (mbPartIdx == 0) //left blk
|
if (mbPartIdx == 0) //left blk
|
mvpCx <= (refIdxL0_A && !refIdxL0_B)? mvx_mbAddrB_dout[15:8]:0;
|
mvpCx <= (refIdxL0_A && !refIdxL0_B)? mvx_mbAddrB_dout[15:8]:0;
|
else //right blk
|
else //right blk
|
begin
|
begin
|
if (mb_num == 0) mvpCx <= 0;
|
if (mb_num == 0) mvpCx <= 0;
|
else if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
else if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
else if (mb_num_h == 10) mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else if (mb_num_h == 10) mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
end
|
end
|
end
|
end
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:if (mb_num == 0) mvpCx <= 0;
|
0:if (mb_num == 0) mvpCx <= 0;
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpCx <= 0;
|
0:if (mb_num == 0) mvpCx <= 0;
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
1:if (mb_num_h == 0) mvpCx <= 0;
|
1:if (mb_num_h == 0) mvpCx <= 0;
|
else mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrD;
|
else mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrD;
|
default:mvpCx <= 0;
|
default:mvpCx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpCx <= 0;
|
0:if (mb_num == 0) mvpCx <= 0;
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
1:if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_CurrMb0[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
default:mvpCx <= 0;
|
default:mvpCx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpCx <= 0;
|
0:if (mb_num == 0) mvpCx <= 0;
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrA[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
1:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
2:mvpCx <= mvx_CurrMb0[15:8]; //always available
|
2:mvpCx <= mvx_CurrMb0[15:8]; //always available
|
3:mvpCx <= mvx_CurrMb0[7:0]; //always from D
|
3:mvpCx <= mvx_CurrMb0[7:0]; //always from D
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[23:16];
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
1:mvpCx <= mvx_CurrMb0[15:8]; //C is always unavailable,D is always available
|
1:mvpCx <= mvx_CurrMb0[15:8]; //C is always unavailable,D is always available
|
default:mvpCx <= 0;
|
default:mvpCx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0];
|
1:if (mb_num_v == 0) mvpCx <= mvx_CurrMb1[7:0];
|
1:if (mb_num_v == 0) mvpCx <= mvx_CurrMb1[7:0];
|
else if (mb_num_h == 10) //predicted from D,but lies in mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies in mbAddrB
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
default:mvpCx <= 0;
|
default:mvpCx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCx <= mvx_CurrMb0[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0];
|
else mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[7:0];
|
1:if (mb_num_v == 0) mvpCx <= mvx_CurrMb1[7:0];
|
1:if (mb_num_v == 0) mvpCx <= mvx_CurrMb1[7:0];
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
mvpCx <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvx_mbAddrB_dout[15:8];
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
else mvpCx <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvx_mbAddrC_dout;
|
2:mvpCx <= mvx_CurrMb1[15:8];
|
2:mvpCx <= mvx_CurrMb1[15:8];
|
3:mvpCx <= mvx_CurrMb1[7:0];
|
3:mvpCx <= mvx_CurrMb1[7:0];
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpCx <= mvx_CurrMb1[23:16];
|
0:mvpCx <= mvx_CurrMb1[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCx <= mvx_CurrMb1[23:16];
|
0:mvpCx <= mvx_CurrMb1[23:16];
|
1:if (mb_num_h == 0) mvpCx <= 0;
|
1:if (mb_num_h == 0) mvpCx <= 0;
|
else mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrD;
|
else mvpCx <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvx_mbAddrD;
|
default:mvpCx <= 0;
|
default:mvpCx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCx <= mvx_CurrMb0[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16]; default:mvpCx <= 0;
|
0:mvpCx <= mvx_CurrMb0[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16]; default:mvpCx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCx <= mvx_CurrMb0[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16];
|
0:mvpCx <= mvx_CurrMb0[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16];
|
2:mvpCx <= mvx_CurrMb2[15:8]; 3:mvpCx <= mvx_CurrMb2[7:0];
|
2:mvpCx <= mvx_CurrMb2[15:8]; 3:mvpCx <= mvx_CurrMb2[7:0];
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpCx <= mvx_CurrMb0[31:24];
|
0:mvpCx <= mvx_CurrMb0[31:24];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCx <= mvx_CurrMb0[31:24]; 1:mvpCx <= mvx_CurrMb2[15:8]; default:mvpCx <= 0;
|
0:mvpCx <= mvx_CurrMb0[31:24]; 1:mvpCx <= mvx_CurrMb2[15:8]; default:mvpCx <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCx <= mvx_CurrMb1[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16]; default:mvpCx <= 0;
|
0:mvpCx <= mvx_CurrMb1[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16]; default:mvpCx <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCx <= mvx_CurrMb1[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16];
|
0:mvpCx <= mvx_CurrMb1[31:24]; 1:mvpCx <= mvx_CurrMb1[23:16];
|
2:mvpCx <= mvx_CurrMb3[15:8]; 3:mvpCx <= mvx_CurrMb3[7:0];
|
2:mvpCx <= mvx_CurrMb3[15:8]; 3:mvpCx <= mvx_CurrMb3[7:0];
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
mvpCx <= 0;
|
mvpCx <= 0;
|
//-------------
|
//-------------
|
//mvpCy
|
//mvpCy
|
//-------------
|
//-------------
|
//if C is not available,it can be predicted from D,then from A
|
//if C is not available,it can be predicted from D,then from A
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_num or mb_num_h or mb_num_v
|
always @ (Is_skipMB_mv_calc or mb_pred_state or sub_mb_pred_state or mb_num or mb_num_h or mb_num_v
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or mb_type_general or sub_mb_type or mbPartIdx or subMbPartIdx or compIdx
|
or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1] or MBTypeGen_mbAddrC[1] or MBTypeGen_mbAddrD
|
or MBTypeGen_mbAddrA[1] or MBTypeGen_mbAddrB[1] or MBTypeGen_mbAddrC[1] or MBTypeGen_mbAddrD
|
or mvy_mbAddrA or mvy_mbAddrB_dout or mvy_mbAddrC_dout or mvy_mbAddrD
|
or mvy_mbAddrA or mvy_mbAddrB_dout or mvy_mbAddrC_dout or mvy_mbAddrD
|
or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3
|
or mvy_CurrMb0 or mvy_CurrMb1 or mvy_CurrMb2 or mvy_CurrMb3
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
//P_skip,Inter16x16
|
//P_skip,Inter16x16
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
begin
|
begin
|
if (mb_num == 0) mvpCy <= 0;
|
if (mb_num == 0) mvpCy <= 0;
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_h == 10) mvpCy <= (MBTypeGen_mbAddrD == 1)? 0:mvy_mbAddrD;
|
else if (mb_num_h == 10) mvpCy <= (MBTypeGen_mbAddrD == 1)? 0:mvy_mbAddrD;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
begin
|
begin
|
if (mbPartIdx == 0)
|
if (mbPartIdx == 0)
|
mvpCy <= (refIdxL0_B && !refIdxL0_C)? ((mb_num_h == 10)? mvy_mbAddrD:mvy_mbAddrC_dout):0;
|
mvpCy <= (refIdxL0_B && !refIdxL0_C)? ((mb_num_h == 10)? mvy_mbAddrD:mvy_mbAddrC_dout):0;
|
else
|
else
|
mvpCy <= 0;
|
mvpCy <= 0;
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
begin
|
begin
|
//when mbAddrA is not available,Inter8x16 left blk needs to have its mbAddrC (= mbAddrB of upper line) derived
|
//when mbAddrA is not available,Inter8x16 left blk needs to have its mbAddrC (= mbAddrB of upper line) derived
|
if (mbPartIdx == 0) //left blk
|
if (mbPartIdx == 0) //left blk
|
mvpCy <= (refIdxL0_A && !refIdxL0_B)? mvy_mbAddrB_dout[15:8]:0;
|
mvpCy <= (refIdxL0_A && !refIdxL0_B)? mvy_mbAddrB_dout[15:8]:0;
|
else //right blk
|
else //right blk
|
begin
|
begin
|
if (mb_num == 0) mvpCy <= 0;
|
if (mb_num == 0) mvpCy <= 0;
|
else if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
else if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
else if (mb_num_h == 10) mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else if (mb_num_h == 10) mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
end
|
end
|
end
|
end
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:if (mb_num == 0) mvpCy <= 0;
|
0:if (mb_num == 0) mvpCy <= 0;
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpCy <= 0;
|
0:if (mb_num == 0) mvpCy <= 0;
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
1:if (mb_num_h == 0) mvpCy <= 0;
|
1:if (mb_num_h == 0) mvpCy <= 0;
|
else mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrD;
|
else mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrD;
|
default:mvpCy <= 0;
|
default:mvpCy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpCy <= 0;
|
0:if (mb_num == 0) mvpCy <= 0;
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
1:if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_CurrMb0[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
default:mvpCy <= 0;
|
default:mvpCy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num == 0) mvpCy <= 0;
|
0:if (mb_num == 0) mvpCy <= 0;
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else if (mb_num_v == 0) mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrA[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
1:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[7:0];
|
1:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
2:mvpCy <= mvy_CurrMb0[15:8]; //always available
|
2:mvpCy <= mvy_CurrMb0[15:8]; //always available
|
3:mvpCy <= mvy_CurrMb0[7:0]; //always from D
|
3:mvpCy <= mvy_CurrMb0[7:0]; //always from D
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[23:16];
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
1:mvpCy <= mvy_CurrMb0[15:8]; //C is always unavailable,D is always available
|
1:mvpCy <= mvy_CurrMb0[15:8]; //C is always unavailable,D is always available
|
default:mvpCy <= 0;
|
default:mvpCy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0];
|
1:if (mb_num_v == 0) mvpCy <= mvy_CurrMb1[7:0];
|
1:if (mb_num_v == 0) mvpCy <= mvy_CurrMb1[7:0];
|
else if (mb_num_h == 10) //predicted from D,but lies in mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies in mbAddrB
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
default:mvpCy <= 0;
|
default:mvpCy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
0:if (mb_num_v == 0) mvpCy <= mvy_CurrMb0[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0];
|
else mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[7:0];
|
1:if (mb_num_v == 0) mvpCy <= mvy_CurrMb1[7:0];
|
1:if (mb_num_v == 0) mvpCy <= mvy_CurrMb1[7:0];
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
else if (mb_num_h == 10) //predicted from D,but lies initial mbAddrB
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
mvpCy <= (MBTypeGen_mbAddrB[1] == 1)? 0:mvy_mbAddrB_dout[15:8];
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
else mvpCy <= (MBTypeGen_mbAddrC[1] == 1)? 0:mvy_mbAddrC_dout;
|
2:mvpCy <= mvy_CurrMb1[15:8];
|
2:mvpCy <= mvy_CurrMb1[15:8];
|
3:mvpCy <= mvy_CurrMb1[7:0];
|
3:mvpCy <= mvy_CurrMb1[7:0];
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpCy <= mvy_CurrMb1[23:16];
|
0:mvpCy <= mvy_CurrMb1[23:16];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCy <= mvy_CurrMb1[23:16];
|
0:mvpCy <= mvy_CurrMb1[23:16];
|
1:if (mb_num_h == 0) mvpCy <= 0;
|
1:if (mb_num_h == 0) mvpCy <= 0;
|
else mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrD;
|
else mvpCy <= (MBTypeGen_mbAddrA[1] == 1)? 0:mvy_mbAddrD;
|
default:mvpCy <= 0;
|
default:mvpCy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCy <= mvy_CurrMb0[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16]; default:mvpCy <= 0;
|
0:mvpCy <= mvy_CurrMb0[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16]; default:mvpCy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCy <= mvy_CurrMb0[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16];
|
0:mvpCy <= mvy_CurrMb0[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16];
|
2:mvpCy <= mvy_CurrMb2[15:8]; 3:mvpCy <= mvy_CurrMb2[7:0];
|
2:mvpCy <= mvy_CurrMb2[15:8]; 3:mvpCy <= mvy_CurrMb2[7:0];
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvpCy <= mvy_CurrMb0[31:24];
|
0:mvpCy <= mvy_CurrMb0[31:24];
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCy <= mvy_CurrMb0[31:24]; 1:mvpCy <= mvy_CurrMb2[15:8]; default:mvpCy <= 0;
|
0:mvpCy <= mvy_CurrMb0[31:24]; 1:mvpCy <= mvy_CurrMb2[15:8]; default:mvpCy <= 0;
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCy <= mvy_CurrMb1[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16]; default:mvpCy <= 0;
|
0:mvpCy <= mvy_CurrMb1[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16]; default:mvpCy <= 0;
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvpCy <= mvy_CurrMb1[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16];
|
0:mvpCy <= mvy_CurrMb1[31:24]; 1:mvpCy <= mvy_CurrMb1[23:16];
|
2:mvpCy <= mvy_CurrMb3[15:8]; 3:mvpCy <= mvy_CurrMb3[7:0];
|
2:mvpCy <= mvy_CurrMb3[15:8]; 3:mvpCy <= mvy_CurrMb3[7:0];
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
mvpCy <= 0;
|
mvpCy <= 0;
|
//------------------------------------------------
|
//------------------------------------------------
|
//obtain motion vector prediction for current Blk
|
//obtain motion vector prediction for current Blk
|
//------------------------------------------------
|
//------------------------------------------------
|
wire [8:0] sub_ABx,sub_ACx,sub_BCx;
|
wire [8:0] sub_ABx,sub_ACx,sub_BCx;
|
wire flag_ABx,flag_ACx,flag_BCx;
|
wire flag_ABx,flag_ACx,flag_BCx;
|
assign sub_ABx = {mvpAx[7],mvpAx[7:0]} - {mvpBx[7],mvpBx[7:0]};
|
assign sub_ABx = {mvpAx[7],mvpAx[7:0]} - {mvpBx[7],mvpBx[7:0]};
|
assign sub_ACx = {mvpAx[7],mvpAx[7:0]} - {mvpCx[7],mvpCx[7:0]};
|
assign sub_ACx = {mvpAx[7],mvpAx[7:0]} - {mvpCx[7],mvpCx[7:0]};
|
assign sub_BCx = {mvpBx[7],mvpBx[7:0]} - {mvpCx[7],mvpCx[7:0]};
|
assign sub_BCx = {mvpBx[7],mvpBx[7:0]} - {mvpCx[7],mvpCx[7:0]};
|
assign flag_ABx = sub_ABx[8];
|
assign flag_ABx = sub_ABx[8];
|
assign flag_ACx = sub_ACx[8];
|
assign flag_ACx = sub_ACx[8];
|
assign flag_BCx = sub_BCx[8];
|
assign flag_BCx = sub_BCx[8];
|
|
|
reg [7:0] mvpx_median;
|
reg [7:0] mvpx_median;
|
always @ (flag_ABx or flag_ACx or flag_BCx or mvpAx or mvpBx or mvpCx)
|
always @ (flag_ABx or flag_ACx or flag_BCx or mvpAx or mvpBx or mvpCx)
|
if (((flag_ABx == 1'b1) && (flag_ACx == 1'b0)) || ((flag_ABx == 1'b0) && (flag_ACx == 1'b1)))
|
if (((flag_ABx == 1'b1) && (flag_ACx == 1'b0)) || ((flag_ABx == 1'b0) && (flag_ACx == 1'b1)))
|
mvpx_median <= mvpAx;
|
mvpx_median <= mvpAx;
|
else if (((flag_ABx == 1'b0) && (flag_BCx == 1'b0)) || ((flag_ABx == 1'b1) && (flag_BCx == 1'b1)))
|
else if (((flag_ABx == 1'b0) && (flag_BCx == 1'b0)) || ((flag_ABx == 1'b1) && (flag_BCx == 1'b1)))
|
mvpx_median <= mvpBx;
|
mvpx_median <= mvpBx;
|
else
|
else
|
mvpx_median <= mvpCx;
|
mvpx_median <= mvpCx;
|
|
|
always @ (refIdxL0_A or refIdxL0_B or refIdxL0_C or mvpAx or mvpBx or mvpCx or mvpx_median)
|
always @ (refIdxL0_A or refIdxL0_B or refIdxL0_C or mvpAx or mvpBx or mvpCx or mvpx_median)
|
case ({refIdxL0_A,refIdxL0_B,refIdxL0_C})
|
case ({refIdxL0_A,refIdxL0_B,refIdxL0_C})
|
3'b011:mvpx <= mvpAx;
|
3'b011:mvpx <= mvpAx;
|
3'b101:mvpx <= mvpBx;
|
3'b101:mvpx <= mvpBx;
|
3'b110:mvpx <= mvpCx;
|
3'b110:mvpx <= mvpCx;
|
default:mvpx <= mvpx_median;
|
default:mvpx <= mvpx_median;
|
endcase
|
endcase
|
|
|
wire [8:0] sub_ABy,sub_ACy,sub_BCy;
|
wire [8:0] sub_ABy,sub_ACy,sub_BCy;
|
wire flag_ABy,flag_ACy,flag_BCy;
|
wire flag_ABy,flag_ACy,flag_BCy;
|
assign sub_ABy = {mvpAy[7],mvpAy[7:0]} - {mvpBy[7],mvpBy[7:0]};
|
assign sub_ABy = {mvpAy[7],mvpAy[7:0]} - {mvpBy[7],mvpBy[7:0]};
|
assign sub_ACy = {mvpAy[7],mvpAy[7:0]} - {mvpCy[7],mvpCy[7:0]};
|
assign sub_ACy = {mvpAy[7],mvpAy[7:0]} - {mvpCy[7],mvpCy[7:0]};
|
assign sub_BCy = {mvpBy[7],mvpBy[7:0]} - {mvpCy[7],mvpCy[7:0]};
|
assign sub_BCy = {mvpBy[7],mvpBy[7:0]} - {mvpCy[7],mvpCy[7:0]};
|
assign flag_ABy = sub_ABy[8];
|
assign flag_ABy = sub_ABy[8];
|
assign flag_ACy = sub_ACy[8];
|
assign flag_ACy = sub_ACy[8];
|
assign flag_BCy = sub_BCy[8];
|
assign flag_BCy = sub_BCy[8];
|
|
|
reg [7:0] mvpy_median;
|
reg [7:0] mvpy_median;
|
always @ (flag_ABy or flag_ACy or flag_BCy or mvpAy or mvpBy or mvpCy)
|
always @ (flag_ABy or flag_ACy or flag_BCy or mvpAy or mvpBy or mvpCy)
|
if (((flag_ABy == 1'b1) && (flag_ACy == 1'b0)) || ((flag_ABy == 1'b0) && (flag_ACy == 1'b1)))
|
if (((flag_ABy == 1'b1) && (flag_ACy == 1'b0)) || ((flag_ABy == 1'b0) && (flag_ACy == 1'b1)))
|
mvpy_median <= mvpAy;
|
mvpy_median <= mvpAy;
|
else if (((flag_ABy == 1'b0) && (flag_BCy == 1'b0)) || ((flag_ABy == 1'b1) && (flag_BCy == 1'b1)))
|
else if (((flag_ABy == 1'b0) && (flag_BCy == 1'b0)) || ((flag_ABy == 1'b1) && (flag_BCy == 1'b1)))
|
mvpy_median <= mvpBy;
|
mvpy_median <= mvpBy;
|
else
|
else
|
mvpy_median <= mvpCy;
|
mvpy_median <= mvpCy;
|
|
|
always @ (refIdxL0_A or refIdxL0_B or refIdxL0_C or mvpAy or mvpBy or mvpCy or mvpy_median)
|
always @ (refIdxL0_A or refIdxL0_B or refIdxL0_C or mvpAy or mvpBy or mvpCy or mvpy_median)
|
case ({refIdxL0_A,refIdxL0_B,refIdxL0_C})
|
case ({refIdxL0_A,refIdxL0_B,refIdxL0_C})
|
3'b011:mvpy <= mvpAy;
|
3'b011:mvpy <= mvpAy;
|
3'b101:mvpy <= mvpBy;
|
3'b101:mvpy <= mvpBy;
|
3'b110:mvpy <= mvpCy;
|
3'b110:mvpy <= mvpCy;
|
default:mvpy <= mvpy_median;
|
default:mvpy <= mvpy_median;
|
endcase
|
endcase
|
|
|
always @ (Is_skipMB_mv_calc or mb_num_h or mb_num_v or mb_pred_state or sub_mb_pred_state or compIdx or mvpx or mvpy
|
always @ (Is_skipMB_mv_calc or mb_num_h or mb_num_v or mb_pred_state or sub_mb_pred_state or compIdx or mvpx or mvpy
|
or mvd or mvpAx or mvpBx or mvpCx or mvpAy or mvpBy or mvpCy or mb_type_general or mbPartIdx
|
or mvd or mvpAx or mvpBx or mvpCx or mvpAy or mvpBy or mvpCy or mb_type_general or mbPartIdx
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_B or refIdxL0_C)
|
if (Is_skipMB_mv_calc)
|
if (Is_skipMB_mv_calc)
|
begin
|
begin
|
//Refer to Page113,section 8.4.1.1 of H.264/AVC 2003.05 standard
|
//Refer to Page113,section 8.4.1.1 of H.264/AVC 2003.05 standard
|
if (mb_num_h == 0 || mb_num_v == 0 || (refIdxL0_A == 0 && mvpAx == 0 && mvpAy == 0) ||
|
if (mb_num_h == 0 || mb_num_v == 0 || (refIdxL0_A == 0 && mvpAx == 0 && mvpAy == 0) ||
|
(refIdxL0_B == 0 && mvpBx == 0 && mvpBy == 0))
|
(refIdxL0_B == 0 && mvpBx == 0 && mvpBy == 0))
|
begin mvx <= 0; mvy <= 0; end
|
begin mvx <= 0; mvy <= 0; end
|
else
|
else
|
begin mvx <= mvpx; mvy <= mvpy; end
|
begin mvx <= mvpx; mvy <= mvpy; end
|
end
|
end
|
else if (mb_pred_state == `mvd_l0_s || sub_mb_pred_state == `sub_mvd_l0_s)
|
else if (mb_pred_state == `mvd_l0_s || sub_mb_pred_state == `sub_mvd_l0_s)
|
begin
|
begin
|
if (mb_type_general == `MB_Inter16x8) //16x8
|
if (mb_type_general == `MB_Inter16x8) //16x8
|
case (mbPartIdx)
|
case (mbPartIdx)
|
2'b00: //upper blk
|
2'b00: //upper blk
|
if (!refIdxL0_B)
|
if (!refIdxL0_B)
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpBx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpBx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpBy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpBy + mvd):0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
end
|
end
|
default: //bottom blk
|
default: //bottom blk
|
if (!refIdxL0_A)
|
if (!refIdxL0_A)
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpAx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpAx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpAy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpAy + mvd):0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
end
|
end
|
endcase
|
endcase
|
else if (mb_type_general == `MB_Inter8x16) //8x16
|
else if (mb_type_general == `MB_Inter8x16) //8x16
|
case (mbPartIdx)
|
case (mbPartIdx)
|
2'b00: //left blk
|
2'b00: //left blk
|
if (!refIdxL0_A)
|
if (!refIdxL0_A)
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpAx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpAx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpAy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpAy + mvd):0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
end
|
end
|
default: //right blk
|
default: //right blk
|
//if mbAddrC is not available but mbAddrB (= mbAddrD) is INTER available (not only available,but also inter
|
//if mbAddrC is not available but mbAddrB (= mbAddrD) is INTER available (not only available,but also inter
|
//available),it still predicted from mbAddrC <- mbAddrD
|
//available),it still predicted from mbAddrC <- mbAddrD
|
if (!refIdxL0_C || (mb_num_h == 10 && !refIdxL0_B))
|
if (!refIdxL0_C || (mb_num_h == 10 && !refIdxL0_B))
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpCx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpCx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpCy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpCy + mvd):0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
end
|
end
|
endcase
|
endcase
|
else
|
else
|
begin
|
begin
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvx <= (compIdx == 0)? (mvpx + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
mvy <= (compIdx == 1)? (mvpy + mvd):0;
|
end
|
end
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx <= 0; mvy <= 0;
|
mvx <= 0; mvy <= 0;
|
end
|
end
|
//-----------------------------------------------------
|
//-----------------------------------------------------
|
//Current MB write --> CurrMb0,CurrMb1,CurrMb2,CurrMb3
|
//Current MB write --> CurrMb0,CurrMb1,CurrMb2,CurrMb3
|
//-----------------------------------------------------
|
//-----------------------------------------------------
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
mv_is16x16 <= 0;
|
mv_is16x16 <= 0;
|
else if (mb_type_general == `MB_Inter16x16 || mb_type_general == `MB_P_skip)
|
else if (mb_type_general == `MB_Inter16x16 || mb_type_general == `MB_P_skip)
|
mv_is16x16 <= 1;
|
mv_is16x16 <= 1;
|
else
|
else
|
mv_is16x16 <= 0;
|
mv_is16x16 <= 0;
|
|
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
begin
|
begin
|
mvx_CurrMb0 <= 0; mvx_CurrMb1 <= 0; mvx_CurrMb2 <= 0; mvx_CurrMb3 <= 0;
|
mvx_CurrMb0 <= 0; mvx_CurrMb1 <= 0; mvx_CurrMb2 <= 0; mvx_CurrMb3 <= 0;
|
end
|
end
|
//Inter16x16 or P_skip
|
//Inter16x16 or P_skip
|
else if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
else if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0))
|
mvx_CurrMb0[7:0] <= mvx;
|
mvx_CurrMb0[7:0] <= mvx;
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:begin mvx_CurrMb0 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb1 <= {mvx,mvx,mvx,mvx}; end
|
0:begin mvx_CurrMb0 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb1 <= {mvx,mvx,mvx,mvx}; end
|
1:begin mvx_CurrMb2 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb3 <= {mvx,mvx,mvx,mvx}; end
|
1:begin mvx_CurrMb2 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb3 <= {mvx,mvx,mvx,mvx}; end
|
endcase
|
endcase
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:begin mvx_CurrMb0 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb2 <= {mvx,mvx,mvx,mvx}; end
|
0:begin mvx_CurrMb0 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb2 <= {mvx,mvx,mvx,mvx}; end
|
1:begin mvx_CurrMb1 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb3 <= {mvx,mvx,mvx,mvx}; end
|
1:begin mvx_CurrMb1 <= {mvx,mvx,mvx,mvx}; mvx_CurrMb3 <= {mvx,mvx,mvx,mvx}; end
|
endcase
|
endcase
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvx_CurrMb0 <= {mvx,mvx,mvx,mvx};
|
0:mvx_CurrMb0 <= {mvx,mvx,mvx,mvx};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb0[7:0] <= mvx; mvx_CurrMb0[15:8] <= mvx; end
|
0:begin mvx_CurrMb0[7:0] <= mvx; mvx_CurrMb0[15:8] <= mvx; end
|
1:begin mvx_CurrMb0[23:16] <= mvx; mvx_CurrMb0[31:24] <= mvx; end
|
1:begin mvx_CurrMb0[23:16] <= mvx; mvx_CurrMb0[31:24] <= mvx; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb0[7:0] <= mvx; mvx_CurrMb0[23:16] <= mvx; end
|
0:begin mvx_CurrMb0[7:0] <= mvx; mvx_CurrMb0[23:16] <= mvx; end
|
1:begin mvx_CurrMb0[15:8] <= mvx; mvx_CurrMb0[31:24] <= mvx; end
|
1:begin mvx_CurrMb0[15:8] <= mvx; mvx_CurrMb0[31:24] <= mvx; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvx_CurrMb0[7:0] <= mvx;
|
0:mvx_CurrMb0[7:0] <= mvx;
|
1:mvx_CurrMb0[15:8] <= mvx;
|
1:mvx_CurrMb0[15:8] <= mvx;
|
2:mvx_CurrMb0[23:16] <= mvx;
|
2:mvx_CurrMb0[23:16] <= mvx;
|
3:mvx_CurrMb0[31:24] <= mvx;
|
3:mvx_CurrMb0[31:24] <= mvx;
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvx_CurrMb1 <= {mvx,mvx,mvx,mvx};
|
0:mvx_CurrMb1 <= {mvx,mvx,mvx,mvx};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb1[7:0] <= mvx; mvx_CurrMb1[15:8] <= mvx; end
|
0:begin mvx_CurrMb1[7:0] <= mvx; mvx_CurrMb1[15:8] <= mvx; end
|
1:begin mvx_CurrMb1[23:16] <= mvx; mvx_CurrMb1[31:24] <= mvx; end
|
1:begin mvx_CurrMb1[23:16] <= mvx; mvx_CurrMb1[31:24] <= mvx; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb1[7:0] <= mvx; mvx_CurrMb1[23:16] <= mvx; end
|
0:begin mvx_CurrMb1[7:0] <= mvx; mvx_CurrMb1[23:16] <= mvx; end
|
1:begin mvx_CurrMb1[15:8] <= mvx; mvx_CurrMb1[31:24] <= mvx; end
|
1:begin mvx_CurrMb1[15:8] <= mvx; mvx_CurrMb1[31:24] <= mvx; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvx_CurrMb1[7:0] <= mvx;
|
0:mvx_CurrMb1[7:0] <= mvx;
|
1:mvx_CurrMb1[15:8] <= mvx;
|
1:mvx_CurrMb1[15:8] <= mvx;
|
2:mvx_CurrMb1[23:16] <= mvx;
|
2:mvx_CurrMb1[23:16] <= mvx;
|
3:mvx_CurrMb1[31:24] <= mvx;
|
3:mvx_CurrMb1[31:24] <= mvx;
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvx_CurrMb2 <= {mvx,mvx,mvx,mvx};
|
0:mvx_CurrMb2 <= {mvx,mvx,mvx,mvx};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb2[7:0] <= mvx; mvx_CurrMb2[15:8] <= mvx; end
|
0:begin mvx_CurrMb2[7:0] <= mvx; mvx_CurrMb2[15:8] <= mvx; end
|
1:begin mvx_CurrMb2[23:16] <= mvx; mvx_CurrMb2[31:24] <= mvx; end
|
1:begin mvx_CurrMb2[23:16] <= mvx; mvx_CurrMb2[31:24] <= mvx; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb2[7:0] <= mvx; mvx_CurrMb2[23:16] <= mvx; end
|
0:begin mvx_CurrMb2[7:0] <= mvx; mvx_CurrMb2[23:16] <= mvx; end
|
1:begin mvx_CurrMb2[15:8] <= mvx; mvx_CurrMb2[31:24] <= mvx; end
|
1:begin mvx_CurrMb2[15:8] <= mvx; mvx_CurrMb2[31:24] <= mvx; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvx_CurrMb2[7:0] <= mvx;
|
0:mvx_CurrMb2[7:0] <= mvx;
|
1:mvx_CurrMb2[15:8] <= mvx;
|
1:mvx_CurrMb2[15:8] <= mvx;
|
2:mvx_CurrMb2[23:16] <= mvx;
|
2:mvx_CurrMb2[23:16] <= mvx;
|
3:mvx_CurrMb2[31:24] <= mvx;
|
3:mvx_CurrMb2[31:24] <= mvx;
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvx_CurrMb3 <= {mvx,mvx,mvx,mvx};
|
0:mvx_CurrMb3 <= {mvx,mvx,mvx,mvx};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb3[7:0] <= mvx; mvx_CurrMb3[15:8] <= mvx; end
|
0:begin mvx_CurrMb3[7:0] <= mvx; mvx_CurrMb3[15:8] <= mvx; end
|
1:begin mvx_CurrMb3[23:16] <= mvx; mvx_CurrMb3[31:24] <= mvx; end
|
1:begin mvx_CurrMb3[23:16] <= mvx; mvx_CurrMb3[31:24] <= mvx; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvx_CurrMb3[7:0] <= mvx; mvx_CurrMb3[23:16] <= mvx; end
|
0:begin mvx_CurrMb3[7:0] <= mvx; mvx_CurrMb3[23:16] <= mvx; end
|
1:begin mvx_CurrMb3[15:8] <= mvx; mvx_CurrMb3[31:24] <= mvx; end
|
1:begin mvx_CurrMb3[15:8] <= mvx; mvx_CurrMb3[31:24] <= mvx; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvx_CurrMb3[7:0] <= mvx;
|
0:mvx_CurrMb3[7:0] <= mvx;
|
1:mvx_CurrMb3[15:8] <= mvx;
|
1:mvx_CurrMb3[15:8] <= mvx;
|
2:mvx_CurrMb3[23:16] <= mvx;
|
2:mvx_CurrMb3[23:16] <= mvx;
|
3:mvx_CurrMb3[31:24] <= mvx;
|
3:mvx_CurrMb3[31:24] <= mvx;
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
begin
|
begin
|
mvy_CurrMb0 <= 0; mvy_CurrMb1 <= 0; mvy_CurrMb2 <= 0; mvy_CurrMb3 <= 0;
|
mvy_CurrMb0 <= 0; mvy_CurrMb1 <= 0; mvy_CurrMb2 <= 0; mvy_CurrMb3 <= 0;
|
end
|
end
|
//Inter16x16 or P_skip
|
//Inter16x16 or P_skip
|
else if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
else if (Is_skipMB_mv_calc || (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1))
|
begin
|
begin
|
mvy_CurrMb0[7:0] <= mvy;
|
mvy_CurrMb0[7:0] <= mvy;
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:begin mvy_CurrMb0 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb1 <= {mvy,mvy,mvy,mvy}; end
|
0:begin mvy_CurrMb0 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb1 <= {mvy,mvy,mvy,mvy}; end
|
1:begin mvy_CurrMb2 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb3 <= {mvy,mvy,mvy,mvy}; end
|
1:begin mvy_CurrMb2 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb3 <= {mvy,mvy,mvy,mvy}; end
|
endcase
|
endcase
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:begin mvy_CurrMb0 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb2 <= {mvy,mvy,mvy,mvy}; end
|
0:begin mvy_CurrMb0 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb2 <= {mvy,mvy,mvy,mvy}; end
|
1:begin mvy_CurrMb1 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb3 <= {mvy,mvy,mvy,mvy}; end
|
1:begin mvy_CurrMb1 <= {mvy,mvy,mvy,mvy}; mvy_CurrMb3 <= {mvy,mvy,mvy,mvy}; end
|
endcase
|
endcase
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:
|
0:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvy_CurrMb0 <= {mvy,mvy,mvy,mvy};
|
0:mvy_CurrMb0 <= {mvy,mvy,mvy,mvy};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb0[7:0] <= mvy; mvy_CurrMb0[15:8] <= mvy; end
|
0:begin mvy_CurrMb0[7:0] <= mvy; mvy_CurrMb0[15:8] <= mvy; end
|
1:begin mvy_CurrMb0[23:16] <= mvy; mvy_CurrMb0[31:24] <= mvy; end
|
1:begin mvy_CurrMb0[23:16] <= mvy; mvy_CurrMb0[31:24] <= mvy; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb0[7:0] <= mvy; mvy_CurrMb0[23:16] <= mvy; end
|
0:begin mvy_CurrMb0[7:0] <= mvy; mvy_CurrMb0[23:16] <= mvy; end
|
1:begin mvy_CurrMb0[15:8] <= mvy; mvy_CurrMb0[31:24] <= mvy; end
|
1:begin mvy_CurrMb0[15:8] <= mvy; mvy_CurrMb0[31:24] <= mvy; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvy_CurrMb0[7:0] <= mvy;
|
0:mvy_CurrMb0[7:0] <= mvy;
|
1:mvy_CurrMb0[15:8] <= mvy;
|
1:mvy_CurrMb0[15:8] <= mvy;
|
2:mvy_CurrMb0[23:16] <= mvy;
|
2:mvy_CurrMb0[23:16] <= mvy;
|
3:mvy_CurrMb0[31:24] <= mvy;
|
3:mvy_CurrMb0[31:24] <= mvy;
|
endcase
|
endcase
|
endcase
|
endcase
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvy_CurrMb1 <= {mvy,mvy,mvy,mvy};
|
0:mvy_CurrMb1 <= {mvy,mvy,mvy,mvy};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb1[7:0] <= mvy; mvy_CurrMb1[15:8] <= mvy; end
|
0:begin mvy_CurrMb1[7:0] <= mvy; mvy_CurrMb1[15:8] <= mvy; end
|
1:begin mvy_CurrMb1[23:16] <= mvy; mvy_CurrMb1[31:24] <= mvy; end
|
1:begin mvy_CurrMb1[23:16] <= mvy; mvy_CurrMb1[31:24] <= mvy; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb1[7:0] <= mvy; mvy_CurrMb1[23:16] <= mvy; end
|
0:begin mvy_CurrMb1[7:0] <= mvy; mvy_CurrMb1[23:16] <= mvy; end
|
1:begin mvy_CurrMb1[15:8] <= mvy; mvy_CurrMb1[31:24] <= mvy; end
|
1:begin mvy_CurrMb1[15:8] <= mvy; mvy_CurrMb1[31:24] <= mvy; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvy_CurrMb1[7:0] <= mvy;
|
0:mvy_CurrMb1[7:0] <= mvy;
|
1:mvy_CurrMb1[15:8] <= mvy;
|
1:mvy_CurrMb1[15:8] <= mvy;
|
2:mvy_CurrMb1[23:16] <= mvy;
|
2:mvy_CurrMb1[23:16] <= mvy;
|
3:mvy_CurrMb1[31:24] <= mvy;
|
3:mvy_CurrMb1[31:24] <= mvy;
|
endcase
|
endcase
|
endcase
|
endcase
|
2:
|
2:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvy_CurrMb2 <= {mvy,mvy,mvy,mvy};
|
0:mvy_CurrMb2 <= {mvy,mvy,mvy,mvy};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb2[7:0] <= mvy; mvy_CurrMb2[15:8] <= mvy; end
|
0:begin mvy_CurrMb2[7:0] <= mvy; mvy_CurrMb2[15:8] <= mvy; end
|
1:begin mvy_CurrMb2[23:16] <= mvy; mvy_CurrMb2[31:24] <= mvy; end
|
1:begin mvy_CurrMb2[23:16] <= mvy; mvy_CurrMb2[31:24] <= mvy; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb2[7:0] <= mvy; mvy_CurrMb2[23:16] <= mvy; end
|
0:begin mvy_CurrMb2[7:0] <= mvy; mvy_CurrMb2[23:16] <= mvy; end
|
1:begin mvy_CurrMb2[15:8] <= mvy; mvy_CurrMb2[31:24] <= mvy; end
|
1:begin mvy_CurrMb2[15:8] <= mvy; mvy_CurrMb2[31:24] <= mvy; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvy_CurrMb2[7:0] <= mvy;
|
0:mvy_CurrMb2[7:0] <= mvy;
|
1:mvy_CurrMb2[15:8] <= mvy;
|
1:mvy_CurrMb2[15:8] <= mvy;
|
2:mvy_CurrMb2[23:16] <= mvy;
|
2:mvy_CurrMb2[23:16] <= mvy;
|
3:mvy_CurrMb2[31:24] <= mvy;
|
3:mvy_CurrMb2[31:24] <= mvy;
|
endcase
|
endcase
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:mvy_CurrMb3 <= {mvy,mvy,mvy,mvy};
|
0:mvy_CurrMb3 <= {mvy,mvy,mvy,mvy};
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb3[7:0] <= mvy; mvy_CurrMb3[15:8] <= mvy; end
|
0:begin mvy_CurrMb3[7:0] <= mvy; mvy_CurrMb3[15:8] <= mvy; end
|
1:begin mvy_CurrMb3[23:16] <= mvy; mvy_CurrMb3[31:24] <= mvy; end
|
1:begin mvy_CurrMb3[23:16] <= mvy; mvy_CurrMb3[31:24] <= mvy; end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:begin mvy_CurrMb3[7:0] <= mvy; mvy_CurrMb3[23:16] <= mvy; end
|
0:begin mvy_CurrMb3[7:0] <= mvy; mvy_CurrMb3[23:16] <= mvy; end
|
1:begin mvy_CurrMb3[15:8] <= mvy; mvy_CurrMb3[31:24] <= mvy; end
|
1:begin mvy_CurrMb3[15:8] <= mvy; mvy_CurrMb3[31:24] <= mvy; end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0:mvy_CurrMb3[7:0] <= mvy;
|
0:mvy_CurrMb3[7:0] <= mvy;
|
1:mvy_CurrMb3[15:8] <= mvy;
|
1:mvy_CurrMb3[15:8] <= mvy;
|
2:mvy_CurrMb3[23:16] <= mvy;
|
2:mvy_CurrMb3[23:16] <= mvy;
|
3:mvy_CurrMb3[31:24] <= mvy;
|
3:mvy_CurrMb3[31:24] <= mvy;
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
//----------------------------
|
//----------------------------
|
//mbAddrA write --> mvx_mbAddrA
|
//mbAddrA write --> mvx_mbAddrA
|
//----------------------------
|
//----------------------------
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
mvx_mbAddrA <= 0;
|
mvx_mbAddrA <= 0;
|
else if (mb_num_h != 10)//if mb_num_h == 10,mvx_mbAddrA will be no use
|
else if (mb_num_h != 10)//if mb_num_h == 10,mvx_mbAddrA will be no use
|
begin
|
begin
|
//P_skip
|
//P_skip
|
if (slice_data_state == `skip_run_duration && end_of_MB_DEC)
|
if (slice_data_state == `skip_run_duration && end_of_MB_DEC)
|
mvx_mbAddrA <= {mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0]};
|
mvx_mbAddrA <= {mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0]};
|
//Inter16x16
|
//Inter16x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0)
|
mvx_mbAddrA <= {mvx,mvx,mvx,mvx};
|
mvx_mbAddrA <= {mvx,mvx,mvx,mvx};
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:begin mvx_mbAddrA[15:8] <= mvx; mvx_mbAddrA[7:0] <= mvx; end
|
0:begin mvx_mbAddrA[15:8] <= mvx; mvx_mbAddrA[7:0] <= mvx; end
|
1:begin mvx_mbAddrA[23:16] <= mvx; mvx_mbAddrA[31:24] <= mvx; end
|
1:begin mvx_mbAddrA[23:16] <= mvx; mvx_mbAddrA[31:24] <= mvx; end
|
endcase
|
endcase
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && mbPartIdx == 1 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && mbPartIdx == 1 && compIdx == 0)
|
mvx_mbAddrA <= {mvx,mvx,mvx,mvx};
|
mvx_mbAddrA <= {mvx,mvx,mvx,mvx};
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:begin mvx_mbAddrA[15:8] <= mvx; mvx_mbAddrA[7:0] <= mvx; end
|
0:begin mvx_mbAddrA[15:8] <= mvx; mvx_mbAddrA[7:0] <= mvx; end
|
1:if (subMbPartIdx == 0) mvx_mbAddrA[7:0] <= mvx;
|
1:if (subMbPartIdx == 0) mvx_mbAddrA[7:0] <= mvx;
|
else mvx_mbAddrA[15:8] <= mvx;
|
else mvx_mbAddrA[15:8] <= mvx;
|
2:if (subMbPartIdx == 1) begin mvx_mbAddrA[15:8] <= mvx; mvx_mbAddrA[7:0] <= mvx;end
|
2:if (subMbPartIdx == 1) begin mvx_mbAddrA[15:8] <= mvx; mvx_mbAddrA[7:0] <= mvx;end
|
3:if (subMbPartIdx == 1) mvx_mbAddrA[7:0] <= mvx;
|
3:if (subMbPartIdx == 1) mvx_mbAddrA[7:0] <= mvx;
|
else if (subMbPartIdx == 3) mvx_mbAddrA[15:8] <= mvx;
|
else if (subMbPartIdx == 3) mvx_mbAddrA[15:8] <= mvx;
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:begin mvx_mbAddrA[23:16] <= mvx; mvx_mbAddrA[31:24] <= mvx; end
|
0:begin mvx_mbAddrA[23:16] <= mvx; mvx_mbAddrA[31:24] <= mvx; end
|
1:if (subMbPartIdx == 0) mvx_mbAddrA[23:16] <= mvx;
|
1:if (subMbPartIdx == 0) mvx_mbAddrA[23:16] <= mvx;
|
else mvx_mbAddrA[31:24] <= mvx;
|
else mvx_mbAddrA[31:24] <= mvx;
|
2:if (subMbPartIdx == 1) begin mvx_mbAddrA[23:16] <= mvx; mvx_mbAddrA[31:24] <= mvx;end
|
2:if (subMbPartIdx == 1) begin mvx_mbAddrA[23:16] <= mvx; mvx_mbAddrA[31:24] <= mvx;end
|
3:if (subMbPartIdx == 1) mvx_mbAddrA[23:16] <= mvx;
|
3:if (subMbPartIdx == 1) mvx_mbAddrA[23:16] <= mvx;
|
else if (subMbPartIdx == 3) mvx_mbAddrA[31:24] <= mvx;
|
else if (subMbPartIdx == 3) mvx_mbAddrA[31:24] <= mvx;
|
endcase
|
endcase
|
endcase
|
endcase
|
end
|
end
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
mvy_mbAddrA <= 0;
|
mvy_mbAddrA <= 0;
|
else if (mb_num_h != 10)//if mb_num_h == 10,mvy_mbAddrA will be no use
|
else if (mb_num_h != 10)//if mb_num_h == 10,mvy_mbAddrA will be no use
|
begin
|
begin
|
//P_skip
|
//P_skip
|
if (slice_data_state == `skip_run_duration && end_of_MB_DEC)
|
if (slice_data_state == `skip_run_duration && end_of_MB_DEC)
|
mvy_mbAddrA <= {mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0]};
|
mvy_mbAddrA <= {mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0]};
|
//Inter16x16
|
//Inter16x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1)
|
mvy_mbAddrA <= {mvy,mvy,mvy,mvy};
|
mvy_mbAddrA <= {mvy,mvy,mvy,mvy};
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:begin mvy_mbAddrA[15:8] <= mvy; mvy_mbAddrA[7:0] <= mvy; end
|
0:begin mvy_mbAddrA[15:8] <= mvy; mvy_mbAddrA[7:0] <= mvy; end
|
1:begin mvy_mbAddrA[23:16] <= mvy; mvy_mbAddrA[31:24] <= mvy; end
|
1:begin mvy_mbAddrA[23:16] <= mvy; mvy_mbAddrA[31:24] <= mvy; end
|
endcase
|
endcase
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && mbPartIdx == 1 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && mbPartIdx == 1 && compIdx == 1)
|
mvy_mbAddrA <= {mvy,mvy,mvy,mvy};
|
mvy_mbAddrA <= {mvy,mvy,mvy,mvy};
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
1:
|
1:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:begin mvy_mbAddrA[15:8] <= mvy; mvy_mbAddrA[7:0] <= mvy; end
|
0:begin mvy_mbAddrA[15:8] <= mvy; mvy_mbAddrA[7:0] <= mvy; end
|
1:if (subMbPartIdx == 0) mvy_mbAddrA[7:0] <= mvy;
|
1:if (subMbPartIdx == 0) mvy_mbAddrA[7:0] <= mvy;
|
else mvy_mbAddrA[15:8] <= mvy;
|
else mvy_mbAddrA[15:8] <= mvy;
|
2:if (subMbPartIdx == 1) begin mvy_mbAddrA[15:8] <= mvy; mvy_mbAddrA[7:0] <= mvy;end
|
2:if (subMbPartIdx == 1) begin mvy_mbAddrA[15:8] <= mvy; mvy_mbAddrA[7:0] <= mvy;end
|
3:if (subMbPartIdx == 1) mvy_mbAddrA[7:0] <= mvy;
|
3:if (subMbPartIdx == 1) mvy_mbAddrA[7:0] <= mvy;
|
else if (subMbPartIdx == 3) mvy_mbAddrA[15:8] <= mvy;
|
else if (subMbPartIdx == 3) mvy_mbAddrA[15:8] <= mvy;
|
endcase
|
endcase
|
3:
|
3:
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0:begin mvy_mbAddrA[23:16] <= mvy; mvy_mbAddrA[31:24] <= mvy; end
|
0:begin mvy_mbAddrA[23:16] <= mvy; mvy_mbAddrA[31:24] <= mvy; end
|
1:if (subMbPartIdx == 0) mvy_mbAddrA[23:16] <= mvy;
|
1:if (subMbPartIdx == 0) mvy_mbAddrA[23:16] <= mvy;
|
else mvy_mbAddrA[31:24] <= mvy;
|
else mvy_mbAddrA[31:24] <= mvy;
|
2:if (subMbPartIdx == 1) begin mvy_mbAddrA[23:16] <= mvy; mvy_mbAddrA[31:24] <= mvy;end
|
2:if (subMbPartIdx == 1) begin mvy_mbAddrA[23:16] <= mvy; mvy_mbAddrA[31:24] <= mvy;end
|
3:if (subMbPartIdx == 1) mvy_mbAddrA[23:16] <= mvy;
|
3:if (subMbPartIdx == 1) mvy_mbAddrA[23:16] <= mvy;
|
else if (subMbPartIdx == 3) mvy_mbAddrA[31:24] <= mvy;
|
else if (subMbPartIdx == 3) mvy_mbAddrA[31:24] <= mvy;
|
endcase
|
endcase
|
endcase
|
endcase
|
end
|
end
|
//-----------------------------------------
|
//-----------------------------------------
|
//mbAddrB RF read and write --> mvx_mbAddrB
|
//mbAddrB RF read and write --> mvx_mbAddrB
|
//-----------------------------------------
|
//-----------------------------------------
|
always @ (reset_n or slice_data_state or mb_pred_state or sub_mb_pred_state or mv_mbAddrB_rd_for_DF
|
always @ (reset_n or slice_data_state or mb_pred_state or sub_mb_pred_state or mv_mbAddrB_rd_for_DF
|
or Is_skipMB_mv_calc or end_of_MB_DEC or mb_type_general or sub_mb_type or mb_num_h or mb_num_v
|
or Is_skipMB_mv_calc or end_of_MB_DEC or mb_type_general or sub_mb_type or mb_num_h or mb_num_v
|
or mbPartIdx or subMbPartIdx or compIdx or mvx or mvx_CurrMb0[7:0] or mvx_CurrMb2 or mvx_CurrMb3
|
or mbPartIdx or subMbPartIdx or compIdx or mvx or mvx_CurrMb0[7:0] or mvx_CurrMb2 or mvx_CurrMb3
|
or refIdxL0_A or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_C)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
//read for DF boundary strength decoding
|
//read for DF boundary strength decoding
|
else if (mv_mbAddrB_rd_for_DF)
|
else if (mv_mbAddrB_rd_for_DF)
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_wr_n <= 1; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_wr_n <= 1; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
//P_skip
|
//P_skip
|
else if (slice_data_state == `skip_run_duration)
|
else if (slice_data_state == `skip_run_duration)
|
begin
|
begin
|
if (Is_skipMB_mv_calc) //read
|
if (Is_skipMB_mv_calc) //read
|
begin
|
begin
|
if (mb_num_v == 0)
|
if (mb_num_v == 0)
|
begin mvx_mbAddrB_cs_n <= 1;mvx_mbAddrB_rd_addr <= 0; end
|
begin mvx_mbAddrB_cs_n <= 1;mvx_mbAddrB_rd_addr <= 0; end
|
else
|
else
|
begin mvx_mbAddrB_cs_n <= 0;mvx_mbAddrB_rd_addr <= mb_num_h;end
|
begin mvx_mbAddrB_cs_n <= 0;mvx_mbAddrB_rd_addr <= mb_num_h;end
|
mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else if (end_of_MB_DEC) //write
|
else if (end_of_MB_DEC) //write
|
begin
|
begin
|
if (mb_num_v == 8)
|
if (mb_num_v == 8)
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_wr_addr <= 0; mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_wr_addr <= 0; mvx_mbAddrB_din <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0]};
|
mvx_mbAddrB_din <= {mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0],mvx_CurrMb0[7:0]};
|
end
|
end
|
mvx_mbAddrB_rd_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
end
|
end
|
//Inter16x16
|
//Inter16x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0)
|
begin
|
begin
|
if (mb_num_v == 0) //!read,write
|
if (mb_num_v == 0) //!read,write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx,mvx,mvx,mvx};
|
mvx_mbAddrB_din <= {mvx,mvx,mvx,mvx};
|
end
|
end
|
else if (mb_num_v == 8) //read,!write
|
else if (mb_num_v == 8) //read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_wr_n <= 1; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_wr_n <= 1; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else //read,write
|
else //read,write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_wr_n <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_wr_n <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx,mvx,mvx,mvx};
|
mvx_mbAddrB_din <= {mvx,mvx,mvx,mvx};
|
end
|
end
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0: //read,!write
|
0: //read,!write
|
begin
|
begin
|
if (mb_num_v == 0) //!read,!write
|
if (mb_num_v == 0) //!read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= mb_num_h; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= mb_num_h; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
end
|
end
|
1: //!read,write
|
1: //!read,write
|
begin
|
begin
|
if (mb_num_v == 8) //!read,!write
|
if (mb_num_v == 8) //!read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_wr_n <= 1; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_wr_n <= 1; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else //!read,write
|
else //!read,write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_rd_addr <= mb_num_h; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= mb_num_h; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx,mvx,mvx,mvx};
|
mvx_mbAddrB_din <= {mvx,mvx,mvx,mvx};
|
end
|
end
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0: //read when mbAddrA is not available for inter pred,!write
|
0: //read when mbAddrA is not available for inter pred,!write
|
if (refIdxL0_A == 1'b1)
|
if (refIdxL0_A == 1'b1)
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= mb_num_h;mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= mb_num_h;mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
1: //need read :mb_num_h == 10 && mb_num_v != 0
|
1: //need read :mb_num_h == 10 && mb_num_v != 0
|
//need write:mb_num_v != 8
|
//need write:mb_num_v != 8
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= ((mb_num_v != 8 || mb_num_h == 10) || (refIdxL0_C && mb_num_v != 0))? 1'b0:1'b1;
|
mvx_mbAddrB_cs_n <= ((mb_num_v != 8 || mb_num_h == 10) || (refIdxL0_C && mb_num_v != 0))? 1'b0:1'b1;
|
mvx_mbAddrB_wr_n <= (mb_num_v == 8)? 1'b1:1'b0;
|
mvx_mbAddrB_wr_n <= (mb_num_v == 8)? 1'b1:1'b0;
|
mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= mb_num_h;
|
mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx,mvx};
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx,mvx};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
//8x8
|
//8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0,1: //read,!write
|
0,1: //read,!write
|
if (mb_num_v == 0) //!read,!write
|
if (mb_num_v == 0) //!read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= mb_num_h; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= mb_num_h; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
2: //!read,!write
|
2: //!read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
3: //!read,write
|
3: //!read,write
|
if (mb_num_v == 8) //!read,!write
|
if (mb_num_v == 8) //!read,!write
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
else
|
else
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx,mvx};
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx,mvx};
|
end
|
end
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1:
|
1:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx,mvx};
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx,mvx};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1:
|
1:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx_CurrMb3[23:16],mvx};
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],mvx_CurrMb3[23:16],mvx};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
3:
|
3:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_cs_n <= 0; mvx_mbAddrB_wr_n <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= mb_num_h;
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],
|
mvx_mbAddrB_din <= {mvx_CurrMb2[23:16],mvx_CurrMb2[31:24],
|
mvx_CurrMb3[23:16],mvx};
|
mvx_CurrMb3[23:16],mvx};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_cs_n <= 1; mvx_mbAddrB_wr_n <= 1;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_rd_addr <= 0; mvx_mbAddrB_wr_addr <= 0;
|
mvx_mbAddrB_din <= 0;
|
mvx_mbAddrB_din <= 0;
|
end
|
end
|
|
|
always @ (reset_n or slice_data_state or mb_pred_state or sub_mb_pred_state or mv_mbAddrB_rd_for_DF
|
always @ (reset_n or slice_data_state or mb_pred_state or sub_mb_pred_state or mv_mbAddrB_rd_for_DF
|
or Is_skipMB_mv_calc or end_of_MB_DEC or mb_type_general or sub_mb_type or mb_num_h or mb_num_v
|
or Is_skipMB_mv_calc or end_of_MB_DEC or mb_type_general or sub_mb_type or mb_num_h or mb_num_v
|
or mbPartIdx or subMbPartIdx or compIdx or mvy or mvy_CurrMb0[7:0] or mvy_CurrMb2 or mvy_CurrMb3
|
or mbPartIdx or subMbPartIdx or compIdx or mvy or mvy_CurrMb0[7:0] or mvy_CurrMb2 or mvy_CurrMb3
|
or refIdxL0_A or refIdxL0_C)
|
or refIdxL0_A or refIdxL0_C)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
//read for DF boundary strength decoding
|
//read for DF boundary strength decoding
|
else if (mv_mbAddrB_rd_for_DF)
|
else if (mv_mbAddrB_rd_for_DF)
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_wr_n <= 1; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_wr_n <= 1; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
//P_skip
|
//P_skip
|
else if (slice_data_state == `skip_run_duration)
|
else if (slice_data_state == `skip_run_duration)
|
begin
|
begin
|
if (Is_skipMB_mv_calc) //read
|
if (Is_skipMB_mv_calc) //read
|
begin
|
begin
|
if (mb_num_v == 0)
|
if (mb_num_v == 0)
|
begin mvy_mbAddrB_cs_n <= 1;mvy_mbAddrB_rd_addr <= 0; end
|
begin mvy_mbAddrB_cs_n <= 1;mvy_mbAddrB_rd_addr <= 0; end
|
else
|
else
|
begin mvy_mbAddrB_cs_n <= 0;mvy_mbAddrB_rd_addr <= mb_num_h;end
|
begin mvy_mbAddrB_cs_n <= 0;mvy_mbAddrB_rd_addr <= mb_num_h;end
|
mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else if (end_of_MB_DEC) //write
|
else if (end_of_MB_DEC) //write
|
begin
|
begin
|
if (mb_num_v == 8)
|
if (mb_num_v == 8)
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_wr_addr <= 0; mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_wr_addr <= 0; mvy_mbAddrB_din <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0]};
|
mvy_mbAddrB_din <= {mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0],mvy_CurrMb0[7:0]};
|
end
|
end
|
mvy_mbAddrB_rd_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
end
|
end
|
//Inter16x16
|
//Inter16x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1)
|
begin
|
begin
|
if (mb_num_v == 0) //!read,write
|
if (mb_num_v == 0) //!read,write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy,mvy,mvy,mvy};
|
mvy_mbAddrB_din <= {mvy,mvy,mvy,mvy};
|
end
|
end
|
else if (mb_num_v == 8) //read,!write
|
else if (mb_num_v == 8) //read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_wr_n <= 1; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_wr_n <= 1; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else //read,write
|
else //read,write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_wr_n <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_wr_n <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy,mvy,mvy,mvy};
|
mvy_mbAddrB_din <= {mvy,mvy,mvy,mvy};
|
end
|
end
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0: //read,!write
|
0: //read,!write
|
begin
|
begin
|
if (mb_num_v == 0) //!read,!write
|
if (mb_num_v == 0) //!read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= mb_num_h; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= mb_num_h; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
end
|
end
|
1: //!read,write
|
1: //!read,write
|
begin
|
begin
|
if (mb_num_v == 8) //!read,!write
|
if (mb_num_v == 8) //!read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_wr_n <= 1; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_wr_n <= 1; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else //!read,write
|
else //!read,write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_rd_addr <= mb_num_h; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= mb_num_h; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy,mvy,mvy,mvy};
|
mvy_mbAddrB_din <= {mvy,mvy,mvy,mvy};
|
end
|
end
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0: //read when mbAddrA is not available for inter pred,!write
|
0: //read when mbAddrA is not available for inter pred,!write
|
if (refIdxL0_A == 1'b1)
|
if (refIdxL0_A == 1'b1)
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= mb_num_h;mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= mb_num_h;mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
1: //need read :mb_num_h == 10 && mb_num_v != 0
|
1: //need read :mb_num_h == 10 && mb_num_v != 0
|
//need write:mb_num_v != 8
|
//need write:mb_num_v != 8
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= ((mb_num_v != 8 || mb_num_h == 10) || (refIdxL0_C && mb_num_v != 0))? 1'b0:1'b1;
|
mvy_mbAddrB_cs_n <= ((mb_num_v != 8 || mb_num_h == 10) || (refIdxL0_C && mb_num_v != 0))? 1'b0:1'b1;
|
mvy_mbAddrB_wr_n <= (mb_num_v == 8)? 1'b1:1'b0;
|
mvy_mbAddrB_wr_n <= (mb_num_v == 8)? 1'b1:1'b0;
|
mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= mb_num_h;
|
mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy,mvy};
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy,mvy};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
//8x8
|
//8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0,1: //read,!write
|
0,1: //read,!write
|
if (mb_num_v == 0) //!read,!write
|
if (mb_num_v == 0) //!read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= mb_num_h; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= mb_num_h; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
2: //!read,!write
|
2: //!read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
3: //!read,write
|
3: //!read,write
|
if (mb_num_v == 8) //!read,!write
|
if (mb_num_v == 8) //!read,!write
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
else
|
else
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy,mvy};
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy,mvy};
|
end
|
end
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1:
|
1:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy,mvy};
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy,mvy};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1:
|
1:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy_CurrMb3[23:16],mvy};
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],mvy_CurrMb3[23:16],mvy};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
3:
|
3:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_cs_n <= 0; mvy_mbAddrB_wr_n <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= mb_num_h;
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],
|
mvy_mbAddrB_din <= {mvy_CurrMb2[23:16],mvy_CurrMb2[31:24],
|
mvy_CurrMb3[23:16],mvy};
|
mvy_CurrMb3[23:16],mvy};
|
end
|
end
|
default:
|
default:
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
endcase
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_cs_n <= 1; mvy_mbAddrB_wr_n <= 1;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_rd_addr <= 0; mvy_mbAddrB_wr_addr <= 0;
|
mvy_mbAddrB_din <= 0;
|
mvy_mbAddrB_din <= 0;
|
end
|
end
|
//-----------------------------------------
|
//-----------------------------------------
|
//mbAddrC RF read and write --> mvx_mbAddrC
|
//mbAddrC RF read and write --> mvx_mbAddrC
|
//-----------------------------------------
|
//-----------------------------------------
|
always @ (reset_n or slice_data_state or Is_skipMB_mv_calc or end_of_MB_DEC or mb_pred_state or sub_mb_type or sub_mb_pred_state
|
always @ (reset_n or slice_data_state or Is_skipMB_mv_calc or end_of_MB_DEC or mb_pred_state or sub_mb_type or sub_mb_pred_state
|
or mb_type_general or mb_num or mb_num_h or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or mvx or mvx_CurrMb0[7:0]
|
or mb_type_general or mb_num or mb_num_h or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or mvx or mvx_CurrMb0[7:0]
|
or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_B or refIdxL0_C)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
//P_skip
|
//P_skip
|
else if (slice_data_state == `skip_run_duration)
|
else if (slice_data_state == `skip_run_duration)
|
begin
|
begin
|
if (Is_skipMB_mv_calc) //read
|
if (Is_skipMB_mv_calc) //read
|
begin
|
begin
|
if (mb_num_v == 0 || mb_num_h == 10)//!read,!write
|
if (mb_num_v == 0 || mb_num_h == 10)//!read,!write
|
begin mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_rd_addr <= 0; end
|
begin mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_rd_addr <= 0; end
|
else
|
else
|
begin mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_rd_addr <= mb_num_h; end
|
begin mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_rd_addr <= mb_num_h; end
|
mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else if (end_of_MB_DEC) //write
|
else if (end_of_MB_DEC) //write
|
begin
|
begin
|
if (mb_num_v == 8 || mb_num_h == 0) //!write
|
if (mb_num_v == 8 || mb_num_h == 0) //!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else //write
|
else //write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx_CurrMb0[7:0];
|
mvx_mbAddrC_din <= mvx_CurrMb0[7:0];
|
end
|
end
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
//Inter16x16
|
//Inter16x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 0)
|
begin
|
begin
|
if (mb_num == 0)//!read,!write
|
if (mb_num == 0)//!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else if (mb_num_v == 0)//!read,write
|
else if (mb_num_v == 0)//!read,write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
else if (mb_num_h == 0 || mb_num_v == 8) //read,!write
|
else if (mb_num_h == 0 || mb_num_v == 8) //read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else //read,write
|
else //read,write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 0)
|
begin
|
begin
|
if (mbPartIdx == 0) //upper blk,may read,no write
|
if (mbPartIdx == 0) //upper blk,may read,no write
|
begin
|
begin
|
if (refIdxL0_B && !refIdxL0_C) //read,!write
|
if (refIdxL0_B && !refIdxL0_C) //read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else //!read,!write
|
else //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
else //bottom blk,may write,no read
|
else //bottom blk,may write,no read
|
begin
|
begin
|
if (mb_num_h != 0) //!read,write
|
if (mb_num_h != 0) //!read,write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
else //!read,!write
|
else //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0: //!read,write
|
0: //!read,write
|
if (mb_num_v == 8)
|
if (mb_num_v == 8)
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //read,!write
|
default: //read,!write
|
begin
|
begin
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
endcase
|
endcase
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
1: //read,!write
|
1: //read,!write
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0: //read,!write
|
0: //read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1: //read,!write
|
1: //read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1: //read,!write
|
1: //read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= mb_num_h; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
endcase
|
endcase
|
2: //!read,write
|
2: //!read,write
|
if (mb_num_h == 0 || mb_num_v == 8) //!read,!write
|
if (mb_num_h == 0 || mb_num_v == 8) //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
else //!read,write
|
else //!read,write
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1: //!read,write
|
1: //!read,write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0: //!read,write
|
0: //!read,write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
2: //!read,write
|
2: //!read,write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_cs_n <= 0; mvx_mbAddrC_wr_n <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvx_mbAddrC_din <= mvx;
|
mvx_mbAddrC_din <= mvx;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
endcase
|
endcase
|
default:
|
default:
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
else
|
else
|
begin
|
begin
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_cs_n <= 1; mvx_mbAddrC_wr_n <= 1;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_rd_addr <= 0; mvx_mbAddrC_wr_addr <= 0;
|
mvx_mbAddrC_din <= 0;
|
mvx_mbAddrC_din <= 0;
|
end
|
end
|
|
|
always @ (reset_n or slice_data_state or Is_skipMB_mv_calc or end_of_MB_DEC or mb_pred_state or sub_mb_type or sub_mb_pred_state
|
always @ (reset_n or slice_data_state or Is_skipMB_mv_calc or end_of_MB_DEC or mb_pred_state or sub_mb_type or sub_mb_pred_state
|
or mb_type_general or mb_num or mb_num_h or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or mvy or mvy_CurrMb0[7:0]
|
or mb_type_general or mb_num or mb_num_h or mb_num_v or mbPartIdx or subMbPartIdx or compIdx or mvy or mvy_CurrMb0[7:0]
|
or refIdxL0_B or refIdxL0_C)
|
or refIdxL0_B or refIdxL0_C)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
//P_skip
|
//P_skip
|
else if (slice_data_state == `skip_run_duration)
|
else if (slice_data_state == `skip_run_duration)
|
begin
|
begin
|
if (Is_skipMB_mv_calc) //read
|
if (Is_skipMB_mv_calc) //read
|
begin
|
begin
|
if (mb_num_v == 0 || mb_num_h == 10)//!read,!write
|
if (mb_num_v == 0 || mb_num_h == 10)//!read,!write
|
begin mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_rd_addr <= 0; end
|
begin mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_rd_addr <= 0; end
|
else
|
else
|
begin mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_rd_addr <= mb_num_h; end
|
begin mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_rd_addr <= mb_num_h; end
|
mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else if (end_of_MB_DEC) //write
|
else if (end_of_MB_DEC) //write
|
begin
|
begin
|
if (mb_num_v == 8 || mb_num_h == 0) //!write
|
if (mb_num_v == 8 || mb_num_h == 0) //!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else //write
|
else //write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy_CurrMb0[7:0];
|
mvy_mbAddrC_din <= mvy_CurrMb0[7:0];
|
end
|
end
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
//Inter16x16
|
//Inter16x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x16 && compIdx == 1)
|
begin
|
begin
|
if (mb_num == 0)//!read,!write
|
if (mb_num == 0)//!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else if (mb_num_v == 0)//!read,write
|
else if (mb_num_v == 0)//!read,write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
else if (mb_num_h == 0 || mb_num_v == 8) //read,!write
|
else if (mb_num_h == 0 || mb_num_v == 8) //read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else //read,write
|
else //read,write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
end
|
end
|
//Inter16x8
|
//Inter16x8
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter16x8 && compIdx == 1)
|
begin
|
begin
|
if (mbPartIdx == 0) //upper blk,may read,no write
|
if (mbPartIdx == 0) //upper blk,may read,no write
|
begin
|
begin
|
if (refIdxL0_B && !refIdxL0_C) //read,!write
|
if (refIdxL0_B && !refIdxL0_C) //read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else //!read,!write
|
else //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
else //bottom blk,may write,no read
|
else //bottom blk,may write,no read
|
begin
|
begin
|
if (mb_num_h != 0) //!read,write
|
if (mb_num_h != 0) //!read,write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
else //!read,!write
|
else //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
end
|
end
|
//Inter8x16
|
//Inter8x16
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
else if (mb_pred_state == `mvd_l0_s && mb_type_general == `MB_Inter8x16 && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0: //!read,write
|
0: //!read,write
|
if (mb_num_v == 8)
|
if (mb_num_v == 8)
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //read,!write
|
default: //read,!write
|
begin
|
begin
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
end
|
end
|
endcase
|
endcase
|
//Inter8x8
|
//Inter8x8
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 1)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
1: //read,!write
|
1: //read,!write
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
if (mb_num_v == 0 || mb_num_h == 10) //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else //read,!write
|
else //read,!write
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0: //read,!write
|
0: //read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1: //read,!write
|
1: //read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1: //read,!write
|
1: //read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= mb_num_h; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
endcase
|
endcase
|
2: //!read,write
|
2: //!read,write
|
if (mb_num_h == 0 || mb_num_v == 8) //!read,!write
|
if (mb_num_h == 0 || mb_num_v == 8) //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
else //!read,write
|
else //!read,write
|
case (sub_mb_type)
|
case (sub_mb_type)
|
0: //8x8
|
0: //8x8
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
1: //8x4
|
1: //8x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
1: //!read,write
|
1: //!read,write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
2: //4x8
|
2: //4x8
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
0: //!read,write
|
0: //!read,write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
3: //4x4
|
3: //4x4
|
case (subMbPartIdx)
|
case (subMbPartIdx)
|
2: //!read,write
|
2: //!read,write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_cs_n <= 0; mvy_mbAddrC_wr_n <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= mb_num_h - 1;
|
mvy_mbAddrC_din <= mvy;
|
mvy_mbAddrC_din <= mvy;
|
end
|
end
|
default: //!read,!write
|
default: //!read,!write
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
endcase
|
endcase
|
default:
|
default:
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
endcase
|
endcase
|
else
|
else
|
begin
|
begin
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_cs_n <= 1; mvy_mbAddrC_wr_n <= 1;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_rd_addr <= 0; mvy_mbAddrC_wr_addr <= 0;
|
mvy_mbAddrC_din <= 0;
|
mvy_mbAddrC_din <= 0;
|
end
|
end
|
|
|
//-------------------------------
|
//-------------------------------
|
//mbAddrD write --> mvx_mbAddrD
|
//mbAddrD write --> mvx_mbAddrD
|
//-------------------------------
|
//-------------------------------
|
//mvx_mbAddrD
|
//mvx_mbAddrD
|
reg [7:0] mvx_mbAddrD_subMB;
|
reg [7:0] mvx_mbAddrD_subMB;
|
reg [7:0] mvx_mbAddrD_MB,mvx_mbAddrD_MB_tmp;
|
reg [7:0] mvx_mbAddrD_MB,mvx_mbAddrD_MB_tmp;
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
mvx_mbAddrD_subMB <= 0;
|
mvx_mbAddrD_subMB <= 0;
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
0:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
mvx_mbAddrD_subMB <= mvx_mbAddrA[7:0];
|
mvx_mbAddrD_subMB <= mvx_mbAddrA[7:0];
|
2:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
2:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
mvx_mbAddrD_subMB <= mvx_mbAddrA[23:16];
|
mvx_mbAddrD_subMB <= mvx_mbAddrA[23:16];
|
endcase
|
endcase
|
|
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
mvx_mbAddrD_MB_tmp <= 0;
|
mvx_mbAddrD_MB_tmp <= 0;
|
else if (end_of_MB_DEC && mb_num_v != 8 && mb_num_h == 9 && mb_type_general[3] == 0)
|
else if (end_of_MB_DEC && mb_num_v != 8 && mb_num_h == 9 && mb_type_general[3] == 0)
|
mvx_mbAddrD_MB_tmp <= (mv_is16x16)? mvx_CurrMb0[7:0]:mvx_CurrMb3[31:24];
|
mvx_mbAddrD_MB_tmp <= (mv_is16x16)? mvx_CurrMb0[7:0]:mvx_CurrMb3[31:24];
|
|
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
mvx_mbAddrD_MB <= 0;
|
mvx_mbAddrD_MB <= 0;
|
else if (end_of_MB_DEC && mb_num_h == 10)
|
else if (end_of_MB_DEC && mb_num_h == 10)
|
mvx_mbAddrD_MB <= mvx_mbAddrD_MB_tmp;
|
mvx_mbAddrD_MB <= mvx_mbAddrD_MB_tmp;
|
|
|
assign mvx_mbAddrD = ((mbPartIdx == 0 || mbPartIdx == 2) && sub_mb_type == 1 && subMbPartIdx == 1)? mvx_mbAddrD_subMB:mvx_mbAddrD_MB;
|
assign mvx_mbAddrD = ((mbPartIdx == 0 || mbPartIdx == 2) && sub_mb_type == 1 && subMbPartIdx == 1)? mvx_mbAddrD_subMB:mvx_mbAddrD_MB;
|
|
|
//mvy_mbAddrD
|
//mvy_mbAddrD
|
reg [7:0] mvy_mbAddrD_subMB;
|
reg [7:0] mvy_mbAddrD_subMB;
|
reg [7:0] mvy_mbAddrD_MB,mvy_mbAddrD_MB_tmp;
|
reg [7:0] mvy_mbAddrD_MB,mvy_mbAddrD_MB_tmp;
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 0)
|
if (reset_n == 0)
|
mvy_mbAddrD_subMB <= 0;
|
mvy_mbAddrD_subMB <= 0;
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
else if (sub_mb_pred_state == `sub_mvd_l0_s && compIdx == 0)
|
case (mbPartIdx)
|
case (mbPartIdx)
|
0:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
0:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
mvy_mbAddrD_subMB <= mvy_mbAddrA[7:0];
|
mvy_mbAddrD_subMB <= mvy_mbAddrA[7:0];
|
2:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
2:if (sub_mb_type == 1 && subMbPartIdx == 0) //8x4 UpperBlk
|
mvy_mbAddrD_subMB <= mvy_mbAddrA[23:16];
|
mvy_mbAddrD_subMB <= mvy_mbAddrA[23:16];
|
endcase
|
endcase
|
|
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
mvy_mbAddrD_MB_tmp <= 0;
|
mvy_mbAddrD_MB_tmp <= 0;
|
else if (end_of_MB_DEC && mb_num_v != 8 && mb_num_h == 9 && mb_type_general[3] == 0)
|
else if (end_of_MB_DEC && mb_num_v != 8 && mb_num_h == 9 && mb_type_general[3] == 0)
|
mvy_mbAddrD_MB_tmp <= (mv_is16x16)? mvy_CurrMb0[7:0]:mvy_CurrMb3[31:24];
|
mvy_mbAddrD_MB_tmp <= (mv_is16x16)? mvy_CurrMb0[7:0]:mvy_CurrMb3[31:24];
|
|
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
mvy_mbAddrD_MB <= 0;
|
mvy_mbAddrD_MB <= 0;
|
else if (end_of_MB_DEC && mb_num_h == 10)
|
else if (end_of_MB_DEC && mb_num_h == 10)
|
mvy_mbAddrD_MB <= mvy_mbAddrD_MB_tmp;
|
mvy_mbAddrD_MB <= mvy_mbAddrD_MB_tmp;
|
|
|
assign mvy_mbAddrD = ((mbPartIdx == 0 || mbPartIdx == 2) && sub_mb_type == 1 && subMbPartIdx == 1)? mvy_mbAddrD_subMB:mvy_mbAddrD_MB;
|
assign mvy_mbAddrD = ((mbPartIdx == 0 || mbPartIdx == 2) && sub_mb_type == 1 && subMbPartIdx == 1)? mvy_mbAddrD_subMB:mvy_mbAddrD_MB;
|
|
|
|
|