`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 02/05/2024 01:57:20 PM
// Design Name:
// Module Name: top
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
`include "include.v"
module autocorrelator (
input clock,
input reset,
input enable,
input adc,
input [15:0] sum_id,
output [`SUM_WIDTH-1:0] sum_out
);
integer i;
reg [`SUM_WIDTH-1:0] sums[0:`STAGES-1];
assign sum_out = sums[sum_id[9:0]];
reg [`STAGES-1:0] shift;
always @ (posedge clock)
if (reset) begin
shift <= 0;
for (i=0; i<`STAGES; i=i+1) begin
sums[i] <= 0;
end
end
else begin
if (enable) begin
shift[0] <= adc;
for (i=0; i<`STAGES-1; i=i+1) begin
shift[i+1] <= shift[i];
sums[i] = sums[i] + (shift[0] & shift[i]);
end
end
end
endmodule