Sunteți pe pagina 1din 10

6.

3 CODING IMPLEMENTATION:

DCT FOUR POINT :


wire [N:0]a0,b0,a1,b1;

// wire [8:0]t0_36,t1_36,t0_83,t1_83;
wire [N+6:0]t0_64,t1_64;
wire [N+7:0]t0_83,t1_36;
wire [N+6:0]t0_36,t1_83;

assign a0=x0+x3;
assign b0=x0-x3;
assign a1=x1+x2;
assign b1=x1-x2;

assign t0_64=a0<<6;
assign t1_64=a1<<6;

A_SAU s1(.a(b0),.b(t0_83),.c(t0_36));
A_SAU s2(.a(b1),.b(t1_36),.c(t1_83));

assign y0=t0_64+t1_64;
assign y1=t0_83+t1_36;
assign y2=t0_64-t1_64;
assign y3=t0_36-t1_83;

endmodule

DCT 8 POINT:
wire [15:0]t0_89,t1_89,t2_89,t3_89,t0_75,t1_75,t2_75,t3_75;
wire [14:0]t0_50,t1_50,t2_50,t3_50;
wire [13:0]t0_18,t1_18,t2_18,t3_18;
wire [16:0]n1,n2,n3,n4,n5,n6,n7,n8;

A_IAU
e1(.x0(x0),.x1(x1),.x2(x2),.x3(x3),.x4(x4),.x5(x5),.x6(x6),.x7(x7),.a0(a0),.b0(b0),.a1(a1),.b1(
b1),.a2(a2),.b2(b2),.a3(a3),.b3(b3));
A_DCT_4 e2 (.x0(a0),.x1(a1),.x2(a2),.x3(a3),.y0(y0),.y1(y2),.y2(y4),.y3(y6));

A_SAU e3(.a(b0),.b(t0_89),.c(t0_75),.d(t0_50),.e(t0_18));
A_SAU e4(.a(b1),.b(t1_89),.c(t1_75),.d(t1_50),.e(t1_18));
A_SAU e5(.a(b2),.b(t2_89),.c(t2_75),.d(t2_50),.e(t2_18));
A_SAU e6(.a(b3),.b(t3_89),.c(t3_75),.d(t3_50),.e(t3_18));

assign n1=t0_89+t3_18;
assign n2=t1_75+t2_50;

assign n3=t2_89+t1_18;
assign n4=t0_75-t3_50;

assign n5=(-t1_89)+t2_18;
assign n6=t3_75+t0_50;

assign n7=(-t3_89)+t0_18;
assign n8=t2_75-t1_50;

assign y1=n1+n2;
assign y3=(-n3)+n4;
assign y5=n5+n6;
assign y7=n7+n8;

TRANSPOSITION BUFFER:
A_Counter aa( .Clk(Clk) ,.Reset(Reset) ,.dout(dout));

A_4X1mux a00(.In0(X00),.In1(X01),.In2(X02),.In3(X03),.sel(dout),.Y(Xo00));
A_4X1mux a01(.In0(X10),.In1(X11),.In2(X12),.In3(X13),.sel(dout),.Y(Xo01));
A_4X1mux a02(.In0(X20),.In1(X21),.In2(X22),.In3(X23),.sel(dout),.Y(Xo02));
A_4X1mux a03(.In0(X30),.In1(X31),.In2(X32),.In3(X33),.sel(dout),.Y(Xo03));

A_16dff
ab(.Clk(Clk),.Reset(Reset),.X00(X00),.X01(X01),.X02(X02),.X03(X03),.X10(X10),.X11(X1
1),.X12(X12),.X13(X13),.X20(X20),.X21(X21),.X22(X22),.X23(X23),.X30(X30),.X31(X31
),.X32(X32),.X33(X33),

.Xo00(A00),.Xo01(A01),.Xo02(A02),.Xo03(A03),.Xo10(A10),.Xo11(A11),.Xo12(A12),.Xo
13(A13),.Xo20(A20),.Xo21(A21),.Xo22(A22),.Xo23(A23),.Xo30(A30),.Xo31(A31),.Xo32(
A32),.Xo33(A33));

A_dff d1( .Clk(Clk) ,.Reset(Reset),.din(dout) ,.dout(dout0));

A_4X1mux a10(.In0(A00),.In1(A01),.In2(A02),.In3(A03),.sel(dout0),.Y(Xo10));
A_4X1mux a11(.In0(A10),.In1(A11),.In2(A12),.In3(A13),.sel(dout0),.Y(Xo11));
A_4X1mux a12(.In0(A20),.In1(A21),.In2(A22),.In3(A23),.sel(dout0),.Y(Xo12));
A_4X1mux a13(.In0(A30),.In1(A31),.In2(A32),.In3(A33),.sel(dout0),.Y(Xo13));

A_16dff
ac(.Clk(Clk),.Reset(Reset),.X00(A00),.X01(A01),.X02(A02),.X03(A03),.X10(A10),.X11(A1
1),.X12(A12),.X13(A13),.X20(A20),.X21(A21),.X22(A22),.X23(A23),.X30(A30),.X31(A31
),.X32(A32),.X33(A33),

.Xo00(B00),.Xo01(B01),.Xo02(B02),.Xo03(B03),.Xo10(B10),.Xo11(B11),.Xo12(B12),.Xo1
3(B13),.Xo20(B20),.Xo21(B21),.Xo22(B22),.Xo23(B23),.Xo30(B30),.Xo31(B31),.Xo32(B3
2),.Xo33(B33));

A_dff d2( .Clk(Clk) ,.Reset(Reset),.din(dout0) ,.dout(dout1));

A_4X1mux a20(.In0(B00),.In1(B01),.In2(B02),.In3(B03),.sel(dout1),.Y(Xo20));
A_4X1mux a21(.In0(B10),.In1(B11),.In2(B12),.In3(B13),.sel(dout1),.Y(Xo21));
A_4X1mux a22(.In0(B20),.In1(B21),.In2(B22),.In3(B23),.sel(dout1),.Y(Xo22));
A_4X1mux a23(.In0(B30),.In1(B31),.In2(B32),.In3(B33),.sel(dout1),.Y(Xo23));

A_16dff
ad(.Clk(Clk),.Reset(Reset),.X00(B00),.X01(B01),.X02(B02),.X03(B03),.X10(B10),.X11(B1
1),.X12(B12),.X13(B13),.X20(B20),.X21(B21),.X22(B22),.X23(B23),.X30(B30),.X31(B31),
.X32(B32),.X33(B33),

.Xo00(C00),.Xo01(C01),.Xo02(C02),.Xo03(C03),.Xo10(C10),.Xo11(C11),.Xo12(C12),.Xo1
3(C13),.Xo20(C20),.Xo21(C21),.Xo22(C22),.Xo23(C23),.Xo30(C30),.Xo31(C31),.Xo32(C3
2),.Xo33(C33));

A_dff d3( .Clk(Clk) ,.Reset(Reset),.din(dout1) ,.dout(dout2));


A_4X1mux a30(.In0(C00),.In1(C01),.In2(C02),.In3(C03),.sel(dout2),.Y(Xo30));
A_4X1mux a31(.In0(C10),.In1(C11),.In2(C12),.In3(C13),.sel(dout2),.Y(Xo31));
A_4X1mux a32(.In0(C20),.In1(C21),.In2(C22),.In3(C23),.sel(dout2),.Y(Xo32));
A_4X1mux a33(.In0(C30),.In1(C31),.In2(C32),.In3(C33),.sel(dout2),.Y(Xo33));

FOLDED STRUCTURE:
generate

//begin
for(i=0; i<2; i=i+1)

begin
if(i==0)
begin
A_DCT_4
r1(.x0(x00),.x1(x01),.x2(x02),.x3(x03),.y0(y001),.y1(y011),.y2(y021),.y3(y031));
A_DCT_4
r2(.x0(x10),.x1(x11),.x2(x12),.x3(x13),.y0(y101),.y1(y111),.y2(y121),.y3(y131));
A_DCT_4
r3(.x0(x20),.x1(x21),.x2(x22),.x3(x23),.y0(y201),.y1(y211),.y2(y221),.y3(y231));
A_DCT_4
r4(.x0(x30),.x1(x31),.x2(x32),.x3(x33),.y0(y301),.y1(y311),.y2(y321),.y3(y331));

assign y002={1'b0,y001};
assign y102={1'b0,y101};
assign y202={1'b0,y201};
assign y302={1'b0,y301};
assign y022={1'b0,y021};
assign y122={1'b0,y121};
assign y222={1'b0,y221};
assign y322={1'b0,y321};
assign y012=y011;
assign y112=y111;
assign y212=y211;
assign y312=y311;
assign y032=y031;
assign y132=y131;
assign y232=y231;
assign y332=y331;

end
else
begin
A_DCT_1
r7(.x0(x002),.x1(x012),.x2(x022),.x3(x032),.y0(y00),.y1(y01),.y2(y02),.y3(y03));
A_DCT_2
r8(.x0(x101),.x1(x111),.x2(x121),.x3(x131),.y0(y10),.y1(y11),.y2(y12),.y3(y13));
A_DCT_1
r9(.x0(x202),.x1(x212),.x2(x222),.x3(x232),.y0(y20),.y1(y21),.y2(y22),.y3(y23));
A_DCT_2
r6(.x0(x301),.x1(x311),.x2(x321),.x3(x331),.y0(y30),.y1(y31),.y2(y32),.y3(y33));
end

if(i==0)
begin
A_trans_buff
r5(.Clk(Clk),.Reset(Reset),.X00(y002),.X01(y012),.X02(y022),.X03(y032),.X10(y102),.X11(
y112),.X12(y122),.X13(y132),.X20(y202),.X21(y212),.X22(y222),.X23(y232),.X30(y302),.
X31(y312),.X32(y322),.X33(y332),

.Xo00(x001),.Xo01(x011),.Xo02(x021),.Xo03(x031),.Xo10(x101),.Xo11(x111),.Xo12(x121)
,.Xo13(x131),.Xo20(x201),.Xo21(x211),.Xo22(x221),.Xo23(x231),.Xo30(x301),.Xo31(x311
),.Xo32(x321),.Xo33(x331));

assign x002=x001[15:0];
assign x012=x011[15:0];
assign x022=x021[15:0];
assign x032=x031[15:0];
assign x202=x201[15:0];
assign x212=x211[15:0];
assign x222=x221[15:0];
assign x232=x231[15:0];
end
end
endgenerate

REUSABLE INTEGER DCT:


A_and a00(.x(x0),.sel(Mn),.e(t0));
A_and a01(.x(x1),.sel(Mn),.e(t1));
A_and a02(.x(x2),.sel(Mn),.e(t2));
A_and a03(.x(x3),.sel(Mn),.e(t3));
A_and a04(.x(x4),.sel(Mn),.e(t4));
A_and a05(.x(x5),.sel(Mn),.e(t5));
A_and a06(.x(x6),.sel(Mn),.e(t6));
A_and a07(.x(x7),.sel(Mn),.e(t7));

A_IAU
w1(.x0(t0),.x1(t1),.x2(t2),.x3(t3),.x4(t4),.x5(t5),.x6(t6),.x7(t7),.a0(a0),.b0(b0),.a1(a1),.b1(b1),
.a2(a2),.b2(b2),.a3(a3),.b3(b3));

A_mux1 b00(.x(x0),.a(a0),.sel(Mn),.y(u10));
A_mux1 b01(.x(x1),.a(a1),.sel(Mn),.y(u11));
A_mux1 b02(.x(x2),.a(a2),.sel(Mn),.y(u12));
A_mux1 b03(.x(x3),.a(a3),.sel(Mn),.y(u13));

A_DCT_4 dc1(.x0(u10),.x1(u11),.x2(u12),.x3(u13),.y0(y0),.y1(y2),.y2(y4),.y3(y6));

//b operation
A_SAU2 e3(.a(b0),.b(t0_89),.c(t0_75),.d(t0_50),.e(t0_18));
A_SAU2 e4(.a(b1),.b(t1_89),.c(t1_75),.d(t1_50),.e(t1_18));
A_SAU2 e5(.a(b2),.b(t2_89),.c(t2_75),.d(t2_50),.e(t2_18));
A_SAU2 e6(.a(b3),.b(t3_89),.c(t3_75),.d(t3_50),.e(t3_18));
//OAU operation

assign n1=t0_89+t3_18;
assign n2=t1_75+t2_50;

assign n3=t2_89+t1_18;
assign n4=t0_75-t3_50;

assign n5=(-t1_89)+t2_18;
assign n6=t3_75+t0_50;

assign n7=(-t3_89)+t0_18;
assign n8=t2_75-t1_50;

assign p1=n1+n2;
assign p3=(-n3)+n4;
assign p5=n5+n6;
assign p7=n7+n8;

//down dct block input

assign mn=~Mn;
A_and a10(.x(x4),.sel(mn),.e(t00));
A_and a11(.x(x5),.sel(mn),.e(t01));
A_and a12(.x(x6),.sel(mn),.e(t02));
A_and a13(.x(x7),.sel(mn),.e(t03));

A_DCT_47 dc2(.x0(t00),.x1(t01),.x2(t02),.x3(t03),.y0(p00),.y1(p01),.y2(p02),.y3(p03));

//output mux
assign P0={2'b0,p00};
assign P1={1'b0,p01};
assign P2={2'b0,p02};
assign P3={1'b0,p03};

A_mux17 b14(.x(P0),.a(p1),.sel(Mn),.y(y1));
A_mux17 b15(.x(P1),.a(p3),.sel(Mn),.y(y3));
A_mux17 b16(.x(P2),.a(p5),.sel(Mn),.y(y5));
A_mux17 b17(.x(P3),.a(p7),.sel(Mn),.y(y7));

FULL PARALLEL:
A_DCT_4 r1(.x0(x00),.x1(x01),.x2(x02),.x3(x03),.y0(y001),.y1(y011),.y2(y021),.y3(y031));
A_DCT_4 r2(.x0(x10),.x1(x11),.x2(x12),.x3(x13),.y0(y101),.y1(y111),.y2(y121),.y3(y131));
A_DCT_4 r3(.x0(x20),.x1(x21),.x2(x22),.x3(x23),.y0(y201),.y1(y211),.y2(y221),.y3(y231));
A_DCT_4 r4(.x0(x30),.x1(x31),.x2(x32),.x3(x33),.y0(y301),.y1(y311),.y2(y321),.y3(y331));

assign y002=y001;
assign y102=y101;
assign y202=y201;
assign y302=y301;
assign y022=y021;
assign y122=y121;
assign y222=y221;
assign y322=y321;
assign y012=y011;
assign y112=y111;
assign y212=y211;
assign y312=y311;
assign y032=y031;
assign y132=y131;
assign y232=y231;
assign y332=y331;

A_trans_buff
r5(.Clk(Clk),.Reset(Reset),.X00(y002),.X01(y012),.X02(y022),.X03(y032),.X10(y102),.X11(
y112),.X12(y122),.X13(y132),.X20(y202),.X21(y212),.X22(y222),.X23(y232),.X30(y302),.
X31(y312),.X32(y322),.X33(y332),

.Xo00(x001),.Xo01(x011),.Xo02(x021),.Xo03(x031),.Xo10(x101),.Xo11(x111),.Xo12(x121)
,.Xo13(x131),.Xo20(x201),.Xo21(x211),.Xo22(x221),.Xo23(x231),.Xo30(x301),.Xo31(x311
),.Xo32(x321),.Xo33(x331));

assign x002=x001;
assign x012=x011;
assign x022=x021;
assign x032=x031;
assign x202=x201;
assign x212=x211;
assign x222=x221;
assign x232=x231;

A_DCT_1 r7(.x0(x002),.x1(x012),.x2(x022),.x3(x032),.y0(y00),.y1(y01),.y2(y02),.y3(y03));
A_DCT_2 r8(.x0(x101),.x1(x111),.x2(x121),.x3(x131),.y0(y10),.y1(y11),.y2(y12),.y3(y13));
A_DCT_1 r9(.x0(x202),.x1(x212),.x2(x222),.x3(x232),.y0(y20),.y1(y21),.y2(y22),.y3(y23));
A_DCT_2 r6(.x0(x301),.x1(x311),.x2(x321),.x3(x331),.y0(y30),.y1(y31),.y2(y32),.y3(y33));

S-ar putea să vă placă și