//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
// Design : nova
|
// Design : nova
|
// Author(s) : Ke Xu
|
// Author(s) : Ke Xu
|
// Email : eexuke@yahoo.com
|
// Email : eexuke@yahoo.com
|
// File : DF_reg_ctrl.v
|
// File : DF_reg_ctrl.v
|
// Generated : Nov 27,2005
|
// Generated : Nov 27,2005
|
// Copyright (C) 2008 Ke Xu
|
// Copyright (C) 2008 Ke Xu
|
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
// Description
|
// Description
|
// buffer buf0 ~ buf3 & transpose reg t0 ~ t1 control
|
// buffer buf0 ~ buf3 & transpose reg t0 ~ t1 control
|
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 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 DF_reg_ctrl (gclk_DF,reset_n,DF_edge_counter_MW,one_edge_counter_MW,
|
module DF_reg_ctrl (gclk_DF,reset_n,DF_edge_counter_MW,one_edge_counter_MW,
|
mb_num_h_DF,mb_num_v_DF,q0_MW,q1_MW,q2_MW,q3_MW,p0_MW,p1_MW,p2_MW,p3_MW,
|
mb_num_h_DF,mb_num_v_DF,q0_MW,q1_MW,q2_MW,q3_MW,p0_MW,p1_MW,p2_MW,p3_MW,
|
buf0_0,buf0_1,buf0_2,buf0_3,buf1_0,buf1_1,buf1_2,buf1_3,
|
buf0_0,buf0_1,buf0_2,buf0_3,buf1_0,buf1_1,buf1_2,buf1_3,
|
buf2_0,buf2_1,buf2_2,buf2_3,buf3_0,buf3_1,buf3_2,buf3_3,
|
buf2_0,buf2_1,buf2_2,buf2_3,buf3_0,buf3_1,buf3_2,buf3_3,
|
t0_0,t0_1,t0_2,t0_3,t1_0,t1_1,t1_2,t1_3,t2_0,t2_1,t2_2,t2_3);
|
t0_0,t0_1,t0_2,t0_3,t1_0,t1_1,t1_2,t1_3,t2_0,t2_1,t2_2,t2_3);
|
input gclk_DF,reset_n;
|
input gclk_DF,reset_n;
|
input [5:0] DF_edge_counter_MW;
|
input [5:0] DF_edge_counter_MW;
|
input [1:0] one_edge_counter_MW;
|
input [1:0] one_edge_counter_MW;
|
input [3:0] mb_num_h_DF;
|
input [3:0] mb_num_h_DF;
|
input [3:0] mb_num_v_DF;
|
input [3:0] mb_num_v_DF;
|
input [7:0] q0_MW,q1_MW,q2_MW,q3_MW;
|
input [7:0] q0_MW,q1_MW,q2_MW,q3_MW;
|
input [7:0] p0_MW,p1_MW,p2_MW,p3_MW;
|
input [7:0] p0_MW,p1_MW,p2_MW,p3_MW;
|
|
|
output [31:0] buf0_0,buf0_1,buf0_2,buf0_3;
|
output [31:0] buf0_0,buf0_1,buf0_2,buf0_3;
|
output [31:0] buf1_0,buf1_1,buf1_2,buf1_3;
|
output [31:0] buf1_0,buf1_1,buf1_2,buf1_3;
|
output [31:0] buf2_0,buf2_1,buf2_2,buf2_3;
|
output [31:0] buf2_0,buf2_1,buf2_2,buf2_3;
|
output [31:0] buf3_0,buf3_1,buf3_2,buf3_3;
|
output [31:0] buf3_0,buf3_1,buf3_2,buf3_3;
|
output [31:0] t0_0,t0_1,t0_2,t0_3;
|
output [31:0] t0_0,t0_1,t0_2,t0_3;
|
output [31:0] t1_0,t1_1,t1_2,t1_3;
|
output [31:0] t1_0,t1_1,t1_2,t1_3;
|
output [31:0] t2_0,t2_1,t2_2,t2_3;
|
output [31:0] t2_0,t2_1,t2_2,t2_3;
|
|
|
reg [31:0] buf0_0,buf0_1,buf0_2,buf0_3;
|
reg [31:0] buf0_0,buf0_1,buf0_2,buf0_3;
|
reg [31:0] buf1_0,buf1_1,buf1_2,buf1_3;
|
reg [31:0] buf1_0,buf1_1,buf1_2,buf1_3;
|
reg [31:0] buf2_0,buf2_1,buf2_2,buf2_3;
|
reg [31:0] buf2_0,buf2_1,buf2_2,buf2_3;
|
reg [31:0] buf3_0,buf3_1,buf3_2,buf3_3;
|
reg [31:0] buf3_0,buf3_1,buf3_2,buf3_3;
|
reg [31:0] t0_0,t0_1,t0_2,t0_3;
|
reg [31:0] t0_0,t0_1,t0_2,t0_3;
|
reg [31:0] t1_0,t1_1,t1_2,t1_3;
|
reg [31:0] t1_0,t1_1,t1_2,t1_3;
|
reg [31:0] t2_0,t2_1,t2_2,t2_3;
|
reg [31:0] t2_0,t2_1,t2_2,t2_3;
|
//------------------------------------------------------
|
//------------------------------------------------------
|
//buf0
|
//buf0
|
//------------------------------------------------------
|
//------------------------------------------------------
|
wire buf0_no_transpose; //buf0 updated without transpose
|
wire buf0_no_transpose; //buf0 updated without transpose
|
wire buf0_transpose; //buf0 updated after transpose
|
wire buf0_transpose; //buf0 updated after transpose
|
assign buf0_no_transpose = (
|
assign buf0_no_transpose = (
|
DF_edge_counter_MW == 6'd0 || DF_edge_counter_MW == 6'd4 || DF_edge_counter_MW == 6'd6 ||
|
DF_edge_counter_MW == 6'd0 || DF_edge_counter_MW == 6'd4 || DF_edge_counter_MW == 6'd6 ||
|
DF_edge_counter_MW == 6'd12 || DF_edge_counter_MW == 6'd16 || DF_edge_counter_MW == 6'd20 ||
|
DF_edge_counter_MW == 6'd12 || DF_edge_counter_MW == 6'd16 || DF_edge_counter_MW == 6'd20 ||
|
DF_edge_counter_MW == 6'd22 || DF_edge_counter_MW == 6'd28 || DF_edge_counter_MW == 6'd32 ||
|
DF_edge_counter_MW == 6'd22 || DF_edge_counter_MW == 6'd28 || DF_edge_counter_MW == 6'd32 ||
|
DF_edge_counter_MW == 6'd36 || DF_edge_counter_MW == 6'd40 || DF_edge_counter_MW == 6'd44);
|
DF_edge_counter_MW == 6'd36 || DF_edge_counter_MW == 6'd40 || DF_edge_counter_MW == 6'd44);
|
assign buf0_transpose = (
|
assign buf0_transpose = (
|
DF_edge_counter_MW == 6'd1 || DF_edge_counter_MW == 6'd5 || DF_edge_counter_MW == 6'd10 ||
|
DF_edge_counter_MW == 6'd1 || DF_edge_counter_MW == 6'd5 || DF_edge_counter_MW == 6'd10 ||
|
DF_edge_counter_MW == 6'd14 || DF_edge_counter_MW == 6'd17 || DF_edge_counter_MW == 6'd26 ||
|
DF_edge_counter_MW == 6'd14 || DF_edge_counter_MW == 6'd17 || DF_edge_counter_MW == 6'd26 ||
|
DF_edge_counter_MW == 6'd30 || DF_edge_counter_MW == 6'd33 || DF_edge_counter_MW == 6'd38 ||
|
DF_edge_counter_MW == 6'd30 || DF_edge_counter_MW == 6'd33 || DF_edge_counter_MW == 6'd38 ||
|
DF_edge_counter_MW == 6'd41 || DF_edge_counter_MW == 6'd46);
|
DF_edge_counter_MW == 6'd41 || DF_edge_counter_MW == 6'd46);
|
|
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
buf0_0 <= 0; buf0_1 <= 0; buf0_2 <= 0; buf0_3 <= 0;
|
buf0_0 <= 0; buf0_1 <= 0; buf0_2 <= 0; buf0_3 <= 0;
|
end
|
end
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
else if (buf0_no_transpose)
|
else if (buf0_no_transpose)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:buf0_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd0:buf0_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf0_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf0_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf0_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf0_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf0_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf0_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
endcase
|
endcase
|
//transpose update,always "p" position (left or up of the edge to be filtered)
|
//transpose update,always "p" position (left or up of the edge to be filtered)
|
else if (buf0_transpose)
|
else if (buf0_transpose)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf0_0[7:0] <= p3_MW; buf0_1[7:0] <= p2_MW;
|
2'd0:begin buf0_0[7:0] <= p3_MW; buf0_1[7:0] <= p2_MW;
|
buf0_2[7:0] <= p1_MW; buf0_3[7:0] <= p0_MW; end
|
buf0_2[7:0] <= p1_MW; buf0_3[7:0] <= p0_MW; end
|
2'd1:begin buf0_0[15:8] <= p3_MW; buf0_1[15:8] <= p2_MW;
|
2'd1:begin buf0_0[15:8] <= p3_MW; buf0_1[15:8] <= p2_MW;
|
buf0_2[15:8] <= p1_MW; buf0_3[15:8] <= p0_MW; end
|
buf0_2[15:8] <= p1_MW; buf0_3[15:8] <= p0_MW; end
|
2'd2:begin buf0_0[23:16] <= p3_MW; buf0_1[23:16] <= p2_MW;
|
2'd2:begin buf0_0[23:16] <= p3_MW; buf0_1[23:16] <= p2_MW;
|
buf0_2[23:16] <= p1_MW; buf0_3[23:16] <= p0_MW; end
|
buf0_2[23:16] <= p1_MW; buf0_3[23:16] <= p0_MW; end
|
2'd3:begin buf0_0[31:24] <= p3_MW; buf0_1[31:24] <= p2_MW;
|
2'd3:begin buf0_0[31:24] <= p3_MW; buf0_1[31:24] <= p2_MW;
|
buf0_2[31:24] <= p1_MW; buf0_3[31:24] <= p0_MW; end
|
buf0_2[31:24] <= p1_MW; buf0_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
//------------------------------------------------------
|
//------------------------------------------------------
|
//buf1
|
//buf1
|
//------------------------------------------------------
|
//------------------------------------------------------
|
wire buf1_no_transpose; //buf1 updated without transpose
|
wire buf1_no_transpose; //buf1 updated without transpose
|
wire buf1_transpose; //buf1 updated after transpose
|
wire buf1_transpose; //buf1 updated after transpose
|
wire buf1_transpose_p; //buf1 transpose and buf1 stores "p" position pixels
|
wire buf1_transpose_p; //buf1 transpose and buf1 stores "p" position pixels
|
assign buf1_no_transpose = (
|
assign buf1_no_transpose = (
|
DF_edge_counter_MW == 6'd1 || DF_edge_counter_MW == 6'd8 || DF_edge_counter_MW == 6'd13 ||
|
DF_edge_counter_MW == 6'd1 || DF_edge_counter_MW == 6'd8 || DF_edge_counter_MW == 6'd13 ||
|
DF_edge_counter_MW == 6'd17 || DF_edge_counter_MW == 6'd24 || DF_edge_counter_MW == 6'd29 ||
|
DF_edge_counter_MW == 6'd17 || DF_edge_counter_MW == 6'd24 || DF_edge_counter_MW == 6'd29 ||
|
DF_edge_counter_MW == 6'd37 || DF_edge_counter_MW == 6'd45);
|
DF_edge_counter_MW == 6'd37 || DF_edge_counter_MW == 6'd45);
|
assign buf1_transpose = (
|
assign buf1_transpose = (
|
DF_edge_counter_MW == 6'd6 || DF_edge_counter_MW == 6'd10 || DF_edge_counter_MW == 6'd22 ||
|
DF_edge_counter_MW == 6'd6 || DF_edge_counter_MW == 6'd10 || DF_edge_counter_MW == 6'd22 ||
|
DF_edge_counter_MW == 6'd26 || DF_edge_counter_MW == 6'd33 || DF_edge_counter_MW == 6'd41);
|
DF_edge_counter_MW == 6'd26 || DF_edge_counter_MW == 6'd33 || DF_edge_counter_MW == 6'd41);
|
assign buf1_transpose_p = (DF_edge_counter_MW == 6'd6 || DF_edge_counter_MW == 6'd9
|
assign buf1_transpose_p = (DF_edge_counter_MW == 6'd6 || DF_edge_counter_MW == 6'd9
|
|| DF_edge_counter_MW == 6'd22);
|
|| DF_edge_counter_MW == 6'd22);
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
buf1_0 <= 0; buf1_1 <= 0; buf1_2 <= 0; buf1_3 <= 0;
|
buf1_0 <= 0; buf1_1 <= 0; buf1_2 <= 0; buf1_3 <= 0;
|
end
|
end
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
else if (buf1_no_transpose)
|
else if (buf1_no_transpose)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:buf1_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd0:buf1_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf1_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf1_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf1_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf1_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf1_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf1_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
endcase
|
endcase
|
//transpose update,"p":6/9/22,"q":10,26,33,41
|
//transpose update,"p":6/9/22,"q":10,26,33,41
|
else if (buf1_transpose)
|
else if (buf1_transpose)
|
begin
|
begin
|
if (buf1_transpose_p) // edge 6,22 "p"
|
if (buf1_transpose_p) // edge 6,22 "p"
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf1_0[7:0] <= p3_MW; buf1_1[7:0] <= p2_MW;
|
2'd0:begin buf1_0[7:0] <= p3_MW; buf1_1[7:0] <= p2_MW;
|
buf1_2[7:0] <= p1_MW; buf1_3[7:0] <= p0_MW; end
|
buf1_2[7:0] <= p1_MW; buf1_3[7:0] <= p0_MW; end
|
2'd1:begin buf1_0[15:8] <= p3_MW; buf1_1[15:8] <= p2_MW;
|
2'd1:begin buf1_0[15:8] <= p3_MW; buf1_1[15:8] <= p2_MW;
|
buf1_2[15:8] <= p1_MW; buf1_3[15:8] <= p0_MW; end
|
buf1_2[15:8] <= p1_MW; buf1_3[15:8] <= p0_MW; end
|
2'd2:begin buf1_0[23:16] <= p3_MW; buf1_1[23:16] <= p2_MW;
|
2'd2:begin buf1_0[23:16] <= p3_MW; buf1_1[23:16] <= p2_MW;
|
buf1_2[23:16] <= p1_MW; buf1_3[23:16] <= p0_MW; end
|
buf1_2[23:16] <= p1_MW; buf1_3[23:16] <= p0_MW; end
|
2'd3:begin buf1_0[31:24] <= p3_MW; buf1_1[31:24] <= p2_MW;
|
2'd3:begin buf1_0[31:24] <= p3_MW; buf1_1[31:24] <= p2_MW;
|
buf1_2[31:24] <= p1_MW; buf1_3[31:24] <= p0_MW; end
|
buf1_2[31:24] <= p1_MW; buf1_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
else //edge 10,26,33,41 "q"
|
else //edge 10,26,33,41 "q"
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf1_0[7:0] <= q0_MW; buf1_1[7:0] <= q1_MW;
|
2'd0:begin buf1_0[7:0] <= q0_MW; buf1_1[7:0] <= q1_MW;
|
buf1_2[7:0] <= q2_MW; buf1_3[7:0] <= q3_MW; end
|
buf1_2[7:0] <= q2_MW; buf1_3[7:0] <= q3_MW; end
|
2'd1:begin buf1_0[15:8] <= q0_MW; buf1_1[15:8] <= q1_MW;
|
2'd1:begin buf1_0[15:8] <= q0_MW; buf1_1[15:8] <= q1_MW;
|
buf1_2[15:8] <= q2_MW; buf1_3[15:8] <= q3_MW; end
|
buf1_2[15:8] <= q2_MW; buf1_3[15:8] <= q3_MW; end
|
2'd2:begin buf1_0[23:16] <= q0_MW; buf1_1[23:16] <= q1_MW;
|
2'd2:begin buf1_0[23:16] <= q0_MW; buf1_1[23:16] <= q1_MW;
|
buf1_2[23:16] <= q2_MW; buf1_3[23:16] <= q3_MW; end
|
buf1_2[23:16] <= q2_MW; buf1_3[23:16] <= q3_MW; end
|
2'd3:begin buf1_0[31:24] <= q0_MW; buf1_1[31:24] <= q1_MW;
|
2'd3:begin buf1_0[31:24] <= q0_MW; buf1_1[31:24] <= q1_MW;
|
buf1_2[31:24] <= q2_MW; buf1_3[31:24] <= q3_MW; end
|
buf1_2[31:24] <= q2_MW; buf1_3[31:24] <= q3_MW; end
|
endcase
|
endcase
|
end
|
end
|
//------------------------------------------------------
|
//------------------------------------------------------
|
//buf2
|
//buf2
|
//------------------------------------------------------
|
//------------------------------------------------------
|
wire buf2_no_transpose; //buf2 updated without transpose
|
wire buf2_no_transpose; //buf2 updated without transpose
|
wire buf2_transpose; //buf2 updated after transpose
|
wire buf2_transpose; //buf2 updated after transpose
|
wire buf2_transpose_p; //buf2 transpose and buf2 stores "p" position pixels
|
wire buf2_transpose_p; //buf2 transpose and buf2 stores "p" position pixels
|
assign buf2_no_transpose = (
|
assign buf2_no_transpose = (
|
DF_edge_counter_MW == 6'd2 || DF_edge_counter_MW == 6'd7 || DF_edge_counter_MW == 6'd18 ||
|
DF_edge_counter_MW == 6'd2 || DF_edge_counter_MW == 6'd7 || DF_edge_counter_MW == 6'd18 ||
|
DF_edge_counter_MW == 6'd23 || DF_edge_counter_MW == 6'd34 || DF_edge_counter_MW == 6'd42);
|
DF_edge_counter_MW == 6'd23 || DF_edge_counter_MW == 6'd34 || DF_edge_counter_MW == 6'd42);
|
assign buf2_transpose = (
|
assign buf2_transpose = (
|
DF_edge_counter_MW == 6'd3 || DF_edge_counter_MW == 6'd11 || DF_edge_counter_MW == 6'd19 ||
|
DF_edge_counter_MW == 6'd3 || DF_edge_counter_MW == 6'd11 || DF_edge_counter_MW == 6'd19 ||
|
DF_edge_counter_MW == 6'd21 || DF_edge_counter_MW == 6'd27 || DF_edge_counter_MW == 6'd30 ||
|
DF_edge_counter_MW == 6'd21 || DF_edge_counter_MW == 6'd27 || DF_edge_counter_MW == 6'd30 ||
|
DF_edge_counter_MW == 6'd35 || DF_edge_counter_MW == 6'd38 || DF_edge_counter_MW == 6'd43 ||
|
DF_edge_counter_MW == 6'd35 || DF_edge_counter_MW == 6'd38 || DF_edge_counter_MW == 6'd43 ||
|
DF_edge_counter_MW == 6'd46);
|
DF_edge_counter_MW == 6'd46);
|
assign buf2_transpose_p = (DF_edge_counter_MW == 6'd3 || DF_edge_counter_MW == 6'd11
|
assign buf2_transpose_p = (DF_edge_counter_MW == 6'd3 || DF_edge_counter_MW == 6'd11
|
|| DF_edge_counter_MW == 6'd19 || DF_edge_counter_MW == 6'd27
|
|| DF_edge_counter_MW == 6'd19 || DF_edge_counter_MW == 6'd27
|
|| DF_edge_counter_MW == 6'd35 || DF_edge_counter_MW == 6'd43);
|
|| DF_edge_counter_MW == 6'd35 || DF_edge_counter_MW == 6'd43);
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
buf2_0 <= 0; buf2_1 <= 0; buf2_2 <= 0; buf2_3 <= 0;
|
buf2_0 <= 0; buf2_1 <= 0; buf2_2 <= 0; buf2_3 <= 0;
|
end
|
end
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
else if (buf2_no_transpose)
|
else if (buf2_no_transpose)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:buf2_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd0:buf2_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf2_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf2_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf2_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf2_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf2_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf2_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
endcase
|
endcase
|
//transpose update,"p":3,11,19,27,35,43 "q":21,30,38,46
|
//transpose update,"p":3,11,19,27,35,43 "q":21,30,38,46
|
else if (buf2_transpose)
|
else if (buf2_transpose)
|
begin
|
begin
|
if (buf2_transpose_p) //"p":3,11,19,27,35,43
|
if (buf2_transpose_p) //"p":3,11,19,27,35,43
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf2_0[7:0] <= p3_MW; buf2_1[7:0] <= p2_MW;
|
2'd0:begin buf2_0[7:0] <= p3_MW; buf2_1[7:0] <= p2_MW;
|
buf2_2[7:0] <= p1_MW; buf2_3[7:0] <= p0_MW; end
|
buf2_2[7:0] <= p1_MW; buf2_3[7:0] <= p0_MW; end
|
2'd1:begin buf2_0[15:8] <= p3_MW; buf2_1[15:8] <= p2_MW;
|
2'd1:begin buf2_0[15:8] <= p3_MW; buf2_1[15:8] <= p2_MW;
|
buf2_2[15:8] <= p1_MW; buf2_3[15:8] <= p0_MW; end
|
buf2_2[15:8] <= p1_MW; buf2_3[15:8] <= p0_MW; end
|
2'd2:begin buf2_0[23:16] <= p3_MW; buf2_1[23:16] <= p2_MW;
|
2'd2:begin buf2_0[23:16] <= p3_MW; buf2_1[23:16] <= p2_MW;
|
buf2_2[23:16] <= p1_MW; buf2_3[23:16] <= p0_MW; end
|
buf2_2[23:16] <= p1_MW; buf2_3[23:16] <= p0_MW; end
|
2'd3:begin buf2_0[31:24] <= p3_MW; buf2_1[31:24] <= p2_MW;
|
2'd3:begin buf2_0[31:24] <= p3_MW; buf2_1[31:24] <= p2_MW;
|
buf2_2[31:24] <= p1_MW; buf2_3[31:24] <= p0_MW; end
|
buf2_2[31:24] <= p1_MW; buf2_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
else //"q":21,30,38,46
|
else //"q":21,30,38,46
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf2_0[7:0] <= q0_MW; buf2_1[7:0] <= q1_MW;
|
2'd0:begin buf2_0[7:0] <= q0_MW; buf2_1[7:0] <= q1_MW;
|
buf2_2[7:0] <= q2_MW; buf2_3[7:0] <= q3_MW; end
|
buf2_2[7:0] <= q2_MW; buf2_3[7:0] <= q3_MW; end
|
2'd1:begin buf2_0[15:8] <= q0_MW; buf2_1[15:8] <= q1_MW;
|
2'd1:begin buf2_0[15:8] <= q0_MW; buf2_1[15:8] <= q1_MW;
|
buf2_2[15:8] <= q2_MW; buf2_3[15:8] <= q3_MW; end
|
buf2_2[15:8] <= q2_MW; buf2_3[15:8] <= q3_MW; end
|
2'd2:begin buf2_0[23:16] <= q0_MW; buf2_1[23:16] <= q1_MW;
|
2'd2:begin buf2_0[23:16] <= q0_MW; buf2_1[23:16] <= q1_MW;
|
buf2_2[23:16] <= q2_MW; buf2_3[23:16] <= q3_MW; end
|
buf2_2[23:16] <= q2_MW; buf2_3[23:16] <= q3_MW; end
|
2'd3:begin buf2_0[31:24] <= q0_MW; buf2_1[31:24] <= q1_MW;
|
2'd3:begin buf2_0[31:24] <= q0_MW; buf2_1[31:24] <= q1_MW;
|
buf2_2[31:24] <= q2_MW; buf2_3[31:24] <= q3_MW; end
|
buf2_2[31:24] <= q2_MW; buf2_3[31:24] <= q3_MW; end
|
endcase
|
endcase
|
end
|
end
|
//------------------------------------------------------
|
//------------------------------------------------------
|
//buf3
|
//buf3
|
//------------------------------------------------------
|
//------------------------------------------------------
|
wire buf3_no_transpose; //buf3 updated without transpose
|
wire buf3_no_transpose; //buf3 updated without transpose
|
wire buf3_transpose; //buf3 updated after transpose
|
wire buf3_transpose; //buf3 updated after transpose
|
wire buf3_transpose_p; //buf3 transpose and buf1 stores "p" position pixels
|
wire buf3_transpose_p; //buf3 transpose and buf1 stores "p" position pixels
|
assign buf3_no_transpose = (DF_edge_counter_MW == 6'd3 || DF_edge_counter_MW == 6'd19);
|
assign buf3_no_transpose = (DF_edge_counter_MW == 6'd3 || DF_edge_counter_MW == 6'd19);
|
assign buf3_transpose = ( DF_edge_counter_MW == 6'd7 ||
|
assign buf3_transpose = ( DF_edge_counter_MW == 6'd7 ||
|
DF_edge_counter_MW == 6'd11 || DF_edge_counter_MW == 6'd23 || DF_edge_counter_MW == 6'd27 ||
|
DF_edge_counter_MW == 6'd11 || DF_edge_counter_MW == 6'd23 || DF_edge_counter_MW == 6'd27 ||
|
DF_edge_counter_MW == 6'd25 || DF_edge_counter_MW == 6'd35 || DF_edge_counter_MW == 6'd43);
|
DF_edge_counter_MW == 6'd25 || DF_edge_counter_MW == 6'd35 || DF_edge_counter_MW == 6'd43);
|
assign buf3_transpose_p = (DF_edge_counter_MW == 6'd7 || DF_edge_counter_MW == 6'd23);
|
assign buf3_transpose_p = (DF_edge_counter_MW == 6'd7 || DF_edge_counter_MW == 6'd23);
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
buf3_0 <= 0; buf3_1 <= 0; buf3_2 <= 0; buf3_3 <= 0;
|
buf3_0 <= 0; buf3_1 <= 0; buf3_2 <= 0; buf3_3 <= 0;
|
end
|
end
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
//no transpose update,always "q" position (right or down of the edge to be filtered)
|
else if (buf3_no_transpose)
|
else if (buf3_no_transpose)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:buf3_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd0:buf3_0 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf3_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd1:buf3_1 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf3_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd2:buf3_2 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf3_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
2'd3:buf3_3 <= {q3_MW,q2_MW,q1_MW,q0_MW};
|
endcase
|
endcase
|
//transpose update,"p":7,23 "q":11,25,27,35,43
|
//transpose update,"p":7,23 "q":11,25,27,35,43
|
else if (buf3_transpose)
|
else if (buf3_transpose)
|
begin
|
begin
|
if (buf3_transpose_p) //"p":7,23
|
if (buf3_transpose_p) //"p":7,23
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf3_0[7:0] <= p3_MW; buf3_1[7:0] <= p2_MW;
|
2'd0:begin buf3_0[7:0] <= p3_MW; buf3_1[7:0] <= p2_MW;
|
buf3_2[7:0] <= p1_MW; buf3_3[7:0] <= p0_MW; end
|
buf3_2[7:0] <= p1_MW; buf3_3[7:0] <= p0_MW; end
|
2'd1:begin buf3_0[15:8] <= p3_MW; buf3_1[15:8] <= p2_MW;
|
2'd1:begin buf3_0[15:8] <= p3_MW; buf3_1[15:8] <= p2_MW;
|
buf3_2[15:8] <= p1_MW; buf3_3[15:8] <= p0_MW; end
|
buf3_2[15:8] <= p1_MW; buf3_3[15:8] <= p0_MW; end
|
2'd2:begin buf3_0[23:16] <= p3_MW; buf3_1[23:16] <= p2_MW;
|
2'd2:begin buf3_0[23:16] <= p3_MW; buf3_1[23:16] <= p2_MW;
|
buf3_2[23:16] <= p1_MW; buf3_3[23:16] <= p0_MW; end
|
buf3_2[23:16] <= p1_MW; buf3_3[23:16] <= p0_MW; end
|
2'd3:begin buf3_0[31:24] <= p3_MW; buf3_1[31:24] <= p2_MW;
|
2'd3:begin buf3_0[31:24] <= p3_MW; buf3_1[31:24] <= p2_MW;
|
buf3_2[31:24] <= p1_MW; buf3_3[31:24] <= p0_MW; end
|
buf3_2[31:24] <= p1_MW; buf3_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
else //"q":11,25,35,43
|
else //"q":11,25,35,43
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin buf3_0[7:0] <= q0_MW; buf3_1[7:0] <= q1_MW;
|
2'd0:begin buf3_0[7:0] <= q0_MW; buf3_1[7:0] <= q1_MW;
|
buf3_2[7:0] <= q2_MW; buf3_3[7:0] <= q3_MW; end
|
buf3_2[7:0] <= q2_MW; buf3_3[7:0] <= q3_MW; end
|
2'd1:begin buf3_0[15:8] <= q0_MW; buf3_1[15:8] <= q1_MW;
|
2'd1:begin buf3_0[15:8] <= q0_MW; buf3_1[15:8] <= q1_MW;
|
buf3_2[15:8] <= q2_MW; buf3_3[15:8] <= q3_MW; end
|
buf3_2[15:8] <= q2_MW; buf3_3[15:8] <= q3_MW; end
|
2'd2:begin buf3_0[23:16] <= q0_MW; buf3_1[23:16] <= q1_MW;
|
2'd2:begin buf3_0[23:16] <= q0_MW; buf3_1[23:16] <= q1_MW;
|
buf3_2[23:16] <= q2_MW; buf3_3[23:16] <= q3_MW; end
|
buf3_2[23:16] <= q2_MW; buf3_3[23:16] <= q3_MW; end
|
2'd3:begin buf3_0[31:24] <= q0_MW; buf3_1[31:24] <= q1_MW;
|
2'd3:begin buf3_0[31:24] <= q0_MW; buf3_1[31:24] <= q1_MW;
|
buf3_2[31:24] <= q2_MW; buf3_3[31:24] <= q3_MW; end
|
buf3_2[31:24] <= q2_MW; buf3_3[31:24] <= q3_MW; end
|
endcase
|
endcase
|
end
|
end
|
//------------------------------------------------------
|
//------------------------------------------------------
|
//T0:always updated after transpose,always "p" position
|
//T0:always updated after transpose,always "p" position
|
//------------------------------------------------------
|
//------------------------------------------------------
|
wire t0_transpose; //t0 updated after transpose
|
wire t0_transpose; //t0 updated after transpose
|
assign t0_transpose = (
|
assign t0_transpose = (
|
DF_edge_counter_MW == 6'd4 || DF_edge_counter_MW == 6'd8 || DF_edge_counter_MW == 6'd12 || DF_edge_counter_MW == 6'd36 ||
|
DF_edge_counter_MW == 6'd4 || DF_edge_counter_MW == 6'd8 || DF_edge_counter_MW == 6'd12 || DF_edge_counter_MW == 6'd36 ||
|
DF_edge_counter_MW == 6'd44 || DF_edge_counter_MW == 6'd15 || DF_edge_counter_MW == 6'd20 || DF_edge_counter_MW == 6'd24 ||
|
DF_edge_counter_MW == 6'd44 || DF_edge_counter_MW == 6'd15 || DF_edge_counter_MW == 6'd20 || DF_edge_counter_MW == 6'd24 ||
|
DF_edge_counter_MW == 6'd28 || DF_edge_counter_MW == 6'd31 || DF_edge_counter_MW == 6'd39 || DF_edge_counter_MW == 6'd47);
|
DF_edge_counter_MW == 6'd28 || DF_edge_counter_MW == 6'd31 || DF_edge_counter_MW == 6'd39 || DF_edge_counter_MW == 6'd47);
|
|
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
t0_0 <= 0; t0_1 <= 0; t0_2 <= 0; t0_3 <= 0;
|
t0_0 <= 0; t0_1 <= 0; t0_2 <= 0; t0_3 <= 0;
|
end
|
end
|
//always transpose update for "p" position
|
//always transpose update for "p" position
|
else if (t0_transpose)
|
else if (t0_transpose)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin t0_0[7:0] <= p3_MW; t0_1[7:0] <= p2_MW;
|
2'd0:begin t0_0[7:0] <= p3_MW; t0_1[7:0] <= p2_MW;
|
t0_2[7:0] <= p1_MW; t0_3[7:0] <= p0_MW; end
|
t0_2[7:0] <= p1_MW; t0_3[7:0] <= p0_MW; end
|
2'd1:begin t0_0[15:8] <= p3_MW; t0_1[15:8] <= p2_MW;
|
2'd1:begin t0_0[15:8] <= p3_MW; t0_1[15:8] <= p2_MW;
|
t0_2[15:8] <= p1_MW; t0_3[15:8] <= p0_MW; end
|
t0_2[15:8] <= p1_MW; t0_3[15:8] <= p0_MW; end
|
2'd2:begin t0_0[23:16] <= p3_MW; t0_1[23:16] <= p2_MW;
|
2'd2:begin t0_0[23:16] <= p3_MW; t0_1[23:16] <= p2_MW;
|
t0_2[23:16] <= p1_MW; t0_3[23:16] <= p0_MW; end
|
t0_2[23:16] <= p1_MW; t0_3[23:16] <= p0_MW; end
|
2'd3:begin t0_0[31:24] <= p3_MW; t0_1[31:24] <= p2_MW;
|
2'd3:begin t0_0[31:24] <= p3_MW; t0_1[31:24] <= p2_MW;
|
t0_2[31:24] <= p1_MW; t0_3[31:24] <= p0_MW; end
|
t0_2[31:24] <= p1_MW; t0_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
//------------------------------------------------------
|
//------------------------------------------------------
|
//T1:always updated after transpose
|
//T1:always updated after transpose
|
//------------------------------------------------------
|
//------------------------------------------------------
|
wire t1_transpose; //t1 updated after transpose
|
wire t1_transpose; //t1 updated after transpose
|
wire t1_transpose_q; //t1 transpose and t1 stores "q" position pixels
|
wire t1_transpose_q; //t1 transpose and t1 stores "q" position pixels
|
assign t1_transpose = (
|
assign t1_transpose = (
|
DF_edge_counter_MW == 6'd13 || DF_edge_counter_MW == 6'd37 || DF_edge_counter_MW == 6'd45 || DF_edge_counter_MW == 6'd9 ||
|
DF_edge_counter_MW == 6'd13 || DF_edge_counter_MW == 6'd37 || DF_edge_counter_MW == 6'd45 || DF_edge_counter_MW == 6'd9 ||
|
DF_edge_counter_MW == 6'd21 || DF_edge_counter_MW == 6'd25 || DF_edge_counter_MW == 6'd29 || DF_edge_counter_MW == 6'd31 ||
|
DF_edge_counter_MW == 6'd21 || DF_edge_counter_MW == 6'd25 || DF_edge_counter_MW == 6'd29 || DF_edge_counter_MW == 6'd31 ||
|
DF_edge_counter_MW == 6'd39 || DF_edge_counter_MW == 6'd47);
|
DF_edge_counter_MW == 6'd39 || DF_edge_counter_MW == 6'd47);
|
|
|
assign t1_transpose_q = (DF_edge_counter_MW == 6'd31 || DF_edge_counter_MW == 6'd39 ||
|
assign t1_transpose_q = (DF_edge_counter_MW == 6'd31 || DF_edge_counter_MW == 6'd39 ||
|
DF_edge_counter_MW == 6'd47);
|
DF_edge_counter_MW == 6'd47);
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
t1_0 <= 0; t1_1 <= 0; t1_2 <= 0; t1_3 <= 0;
|
t1_0 <= 0; t1_1 <= 0; t1_2 <= 0; t1_3 <= 0;
|
end
|
end
|
else if (t1_transpose && !t1_transpose_q) //t1 transpose "p"
|
else if (t1_transpose && !t1_transpose_q) //t1 transpose "p"
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin t1_0[7:0] <= p3_MW; t1_1[7:0] <= p2_MW;
|
2'd0:begin t1_0[7:0] <= p3_MW; t1_1[7:0] <= p2_MW;
|
t1_2[7:0] <= p1_MW; t1_3[7:0] <= p0_MW; end
|
t1_2[7:0] <= p1_MW; t1_3[7:0] <= p0_MW; end
|
2'd1:begin t1_0[15:8] <= p3_MW; t1_1[15:8] <= p2_MW;
|
2'd1:begin t1_0[15:8] <= p3_MW; t1_1[15:8] <= p2_MW;
|
t1_2[15:8] <= p1_MW; t1_3[15:8] <= p0_MW; end
|
t1_2[15:8] <= p1_MW; t1_3[15:8] <= p0_MW; end
|
2'd2:begin t1_0[23:16] <= p3_MW; t1_1[23:16] <= p2_MW;
|
2'd2:begin t1_0[23:16] <= p3_MW; t1_1[23:16] <= p2_MW;
|
t1_2[23:16] <= p1_MW; t1_3[23:16] <= p0_MW; end
|
t1_2[23:16] <= p1_MW; t1_3[23:16] <= p0_MW; end
|
2'd3:begin t1_0[31:24] <= p3_MW; t1_1[31:24] <= p2_MW;
|
2'd3:begin t1_0[31:24] <= p3_MW; t1_1[31:24] <= p2_MW;
|
t1_2[31:24] <= p1_MW; t1_3[31:24] <= p0_MW; end
|
t1_2[31:24] <= p1_MW; t1_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
else if (t1_transpose) //t1 transpose "q"
|
else if (t1_transpose) //t1 transpose "q"
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin t1_0[7:0] <= q0_MW; t1_1[7:0] <= q1_MW;
|
2'd0:begin t1_0[7:0] <= q0_MW; t1_1[7:0] <= q1_MW;
|
t1_2[7:0] <= q2_MW; t1_3[7:0] <= q3_MW; end
|
t1_2[7:0] <= q2_MW; t1_3[7:0] <= q3_MW; end
|
2'd1:begin t1_0[15:8] <= q0_MW; t1_1[15:8] <= q1_MW;
|
2'd1:begin t1_0[15:8] <= q0_MW; t1_1[15:8] <= q1_MW;
|
t1_2[15:8] <= q2_MW; t1_3[15:8] <= q3_MW; end
|
t1_2[15:8] <= q2_MW; t1_3[15:8] <= q3_MW; end
|
2'd2:begin t1_0[23:16] <= q0_MW; t1_1[23:16] <= q1_MW;
|
2'd2:begin t1_0[23:16] <= q0_MW; t1_1[23:16] <= q1_MW;
|
t1_2[23:16] <= q2_MW; t1_3[23:16] <= q3_MW; end
|
t1_2[23:16] <= q2_MW; t1_3[23:16] <= q3_MW; end
|
2'd3:begin t1_0[31:24] <= q0_MW; t1_1[31:24] <= q1_MW;
|
2'd3:begin t1_0[31:24] <= q0_MW; t1_1[31:24] <= q1_MW;
|
t1_2[31:24] <= q2_MW; t1_3[31:24] <= q3_MW; end
|
t1_2[31:24] <= q2_MW; t1_3[31:24] <= q3_MW; end
|
endcase
|
endcase
|
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
//T2:only used after filter edge 18/34/42 to update mbAddrB of left MB
|
//T2:only used after filter edge 18/34/42 to update mbAddrB of left MB
|
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
wire t2_wr;
|
wire t2_wr;
|
assign t2_wr = ((mb_num_h_DF != 0 && mb_num_v_DF != 4'd8) &&
|
assign t2_wr = ((mb_num_h_DF != 0 && mb_num_v_DF != 4'd8) &&
|
(DF_edge_counter_MW == 6'd18 || DF_edge_counter_MW == 6'd34 || DF_edge_counter_MW == 6'd42));
|
(DF_edge_counter_MW == 6'd18 || DF_edge_counter_MW == 6'd34 || DF_edge_counter_MW == 6'd42));
|
always @ (posedge gclk_DF or negedge reset_n)
|
always @ (posedge gclk_DF or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
t2_0 <= 0; t2_1 <= 0; t2_2 <= 0; t2_3 <= 0;
|
t2_0 <= 0; t2_1 <= 0; t2_2 <= 0; t2_3 <= 0;
|
end
|
end
|
else if (t2_wr)
|
else if (t2_wr)
|
case (one_edge_counter_MW)
|
case (one_edge_counter_MW)
|
2'd0:begin t2_0[7:0] <= p3_MW; t2_1[7:0] <= p2_MW;
|
2'd0:begin t2_0[7:0] <= p3_MW; t2_1[7:0] <= p2_MW;
|
t2_2[7:0] <= p1_MW; t2_3[7:0] <= p0_MW; end
|
t2_2[7:0] <= p1_MW; t2_3[7:0] <= p0_MW; end
|
2'd1:begin t2_0[15:8] <= p3_MW; t2_1[15:8] <= p2_MW;
|
2'd1:begin t2_0[15:8] <= p3_MW; t2_1[15:8] <= p2_MW;
|
t2_2[15:8] <= p1_MW; t2_3[15:8] <= p0_MW; end
|
t2_2[15:8] <= p1_MW; t2_3[15:8] <= p0_MW; end
|
2'd2:begin t2_0[23:16] <= p3_MW; t2_1[23:16] <= p2_MW;
|
2'd2:begin t2_0[23:16] <= p3_MW; t2_1[23:16] <= p2_MW;
|
t2_2[23:16] <= p1_MW; t2_3[23:16] <= p0_MW; end
|
t2_2[23:16] <= p1_MW; t2_3[23:16] <= p0_MW; end
|
2'd3:begin t2_0[31:24] <= p3_MW; t2_1[31:24] <= p2_MW;
|
2'd3:begin t2_0[31:24] <= p3_MW; t2_1[31:24] <= p2_MW;
|
t2_2[31:24] <= p1_MW; t2_3[31:24] <= p0_MW; end
|
t2_2[31:24] <= p1_MW; t2_3[31:24] <= p0_MW; end
|
endcase
|
endcase
|
endmodule
|
endmodule
|
|
|