`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    16:47:07 10/26/2020 
// Design Name: 
// Module Name:    intFilterWrapper 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module combFilterWrapper
#(
	parameter	M = 4,
	parameter	filteredDataWidth	=	25,
	parameter	inOutDataWidth	=	18
)
(
	input Clk_i,
	input [filteredDataWidth-1:0] Data_i,
	input DataNd_i,
	output [filteredDataWidth-1:0] Data_o,
	output DataValid_o
);

	wire [filteredDataWidth-1:0] combOutData;
	wire combOutDataValid;
	
	combFilterBlock 
	#(	.M(M),
		.filteredDataWidth	(filteredDataWidth),
		.inOutDataWidth	(filteredDataWidth)
	)
	combFilterBlockInst
	(
		.Clk_i(Clk_i),
		.Data_i(Data_i),
		.DataNd_i(DataNd_i),
		.Data_o(combOutData),
		.DataValid_o(combOutDataValid)
	);
	
	
	roundSymmetric 
	#( 
		.inDataWidth(filteredDataWidth),
		.outDataWidth(filteredDataWidth)
	)
	combRoundInst
	(
		.Rst_i(1'b0),
		.Clk_i(Clk_i),
		.Data_i(combOutData),
		.DataNd_i(combOutDataValid),
		.Data_o(Data_o),
		.DataValid_o(DataValid_o)
	);
endmodule
