fpga: rfnoc: reverse FIR filter coefficients to get embedded in DSPE48

Original-commit: ea164a936b924b05a5b4cb9dd50df8acc3700c1a
This commit is contained in:
Max Köhler
2024-04-26 15:19:23 -05:00
committed by Wade Fife
parent fa95da3f7f
commit c719cf1406
6 changed files with 47 additions and 33 deletions
@@ -132,7 +132,7 @@ module noc_shell_fir_filter #(
wire [63:0] data_o_flush_done;
backend_iface #(
.NOC_ID (32'hF1120000),
.NOC_ID (32'hF1120002),
.NUM_DATA_I (0+NUM_PORTS),
.NUM_DATA_O (0+NUM_PORTS),
.CTRL_FIFOSIZE ($clog2(32)),
@@ -27,7 +27,7 @@ module rfnoc_block_fir_filter_tb #(
// Local Parameters
//---------------------------------------------------------------------------
localparam int NOC_ID = 32'hF112_0000;
localparam int NOC_ID = 32'hF112_0002;
// Simulation parameters
localparam real CHDR_CLK_PER = 6.0; // 166 MHz
@@ -255,7 +255,7 @@ module rfnoc_block_fir_filter_tb #(
// If using embedded register, coefficients must be preloaded
if (USE_EMBEDDED_REGS_COEFFS) begin
int i;
for (i = 0; i < num_coeffs_to_send-1; i++) begin
for (i = num_coeffs_to_send-1; i > 0; i--) begin
write_reg(port, REG_FIR_LOAD_COEFF, COEFFS_VEC_0[COEFF_WIDTH*i +: COEFF_WIDTH]);
end
write_reg(port, REG_FIR_LOAD_COEFF_LAST, COEFFS_VEC_0[COEFF_WIDTH*i +: COEFF_WIDTH]);
@@ -351,7 +351,7 @@ module rfnoc_block_fir_filter_tb #(
end
test.start_test("Load new coefficients", 20us);
for (i = 0; i < num_coeffs_to_send-1; i++) begin
for (i = num_coeffs_to_send-1; i > 0; i--) begin
write_reg(port, REG_FIR_LOAD_COEFF, COEFFS_VEC_1[COEFF_WIDTH*i +: COEFF_WIDTH]);
end
write_reg(port, REG_FIR_LOAD_COEFF_LAST, COEFFS_VEC_1[COEFF_WIDTH*i +: COEFF_WIDTH]);
@@ -108,6 +108,8 @@ module rfnoc_fir_filter_core #(
//---------------------------------------------------------------------------
// Registers
//---------------------------------------------------------------------------
localparam COMPAT_MAJOR = 16'h1;
localparam COMPAT_MINOR = 16'h1;
`include "rfnoc_fir_filter_regs.vh"
@@ -154,6 +156,9 @@ module rfnoc_fir_filter_core #(
if (reg_addr == REG_FIR_NUM_COEFFS) begin
s_ctrlport_resp_data <= NUM_COEFFS;
s_ctrlport_resp_ack <= 1;
end else if (reg_addr == REG_FIR_COMPAT_NUM) begin
s_ctrlport_resp_data <= {COMPAT_MAJOR, COMPAT_MINOR};
s_ctrlport_resp_ack <= 1;
end
end
end
@@ -48,4 +48,14 @@ localparam REG_FIR_LOAD_COEFF = 'h4;
// [31:(32-COEFF_WIDTH)] : Reserved
// [COEFF_WIDTH-1:0] : The next coefficient to be loaded
//
localparam REG_FIR_LOAD_COEFF_LAST = 'h8;
localparam REG_FIR_LOAD_COEFF_LAST = 'h8;
// REG_FIR_COMPAT_NUM (R)
//
// Contains the compatibility number of the block.
//
// [31:16] : Returns the major compatibility number (read-only)
// [15:0] : Returns the minor compatibility number (read-only)
//
localparam REG_FIR_COMPAT_NUM = 'hC;