module dctu(clk, ena, ddgo, x, y, ddin, dout);

	parameter coef_width = 16;
	parameter di_width = 8;
	parameter [2:0] v = 0;
	parameter [2:0] u = 0;

	//
	// inputs & outputs
	//

	input clk;
	input ena;
	input ddgo;               // double delayed go signal
	input [2:0] x, y;

	input  [di_width:1] ddin; // delayed data input
	output [11:0] dout;

	//
	// variables
	//
	reg [      31:0] coef;

	wire [coef_width +10:0] result;
	`include "dct_cos_table.v"
	//
	// module body
	//

	// hookup cosine-table
	always @(posedge clk)
	  if(ena)
	    coef <= #1 dct_cos_table(x, y, u, v);

	// hookup dct-mac unit
	dct_mac #(8, coef_width)
	macu (
		.clk(clk),
		.ena(ena),
		.dclr(ddgo),
		.din(ddin),
		.coef( coef[31:31 -coef_width +1] ),
		.result(result)
	);

	assign dout = result[coef_width +10: coef_width -1];
endmodule