fpga: rfnoc: fft: Support multiple samples per cycle

This adds the NIPC parameter, which configures support for processing
multiple items or samples per clock cycle. With this enabled, the FFT
block can process at rates higher than 250 MSPS, such as 500 MSPS and
beyond.


Original-commit: fc76aa940e121fe1f85a3513f6d90df4667338cf
This commit is contained in:
Wade Fife
2025-03-07 12:39:34 -06:00
parent d7e5823047
commit 6b19ec030c
14 changed files with 2433 additions and 1083 deletions
@@ -393,8 +393,7 @@ module fft_reorder
if (EN_CP_INSERTION) begin: gen_cp_ins_fifo
logic [CP_LEN_W-1:0] cp_len_tdata;
logic cp_len_tvalid;
logic cp_len_tready;
logic i_tvalid;
logic tmp_i_tvalid;
logic in_fifo_o_tfirst = '1; // First transfer of packet
// Create a register that indicates when the next transfer is the start of
@@ -410,7 +409,7 @@ module fft_reorder
end
// Write the first tuser word of the packet into the CP length FIFO
assign i_tvalid = in_fifo_o_tvalid && in_fifo_o_tready && in_fifo_o_tfirst;
assign tmp_i_tvalid = in_fifo_o_tvalid && in_fifo_o_tready && in_fifo_o_tfirst;
// The dual RAM buffer can only hold two FFTs at a time, so we can
// guarantee this FIFO has sufficient room and will always be ready by
@@ -423,7 +422,7 @@ module fft_reorder
.reset (rst),
.clear ('0),
.i_tdata (in_fifo_o_tuser),
.i_tvalid(i_tvalid),
.i_tvalid(tmp_i_tvalid),
.i_tready(),
.o_tdata (cp_len_tdata),
.o_tvalid(cp_len_tvalid),