FFT IP Core与Matlab运算结果不符求助及SCALE_SCH参数解析
FFT IP核输出与Matlab结果不符问题求助及SCALE_SCH参数解析
此前我在Xilinx论坛发布过该问题但未获解答,现再次求助。我基于Vivado开发仅包含FFT IP核的RTL Kernel(XO),并通过Vitis将其与负责从内存读取数据并流式传输至IP核的C++ Kernel连接。
输入数据为缩放至-1到1之间的定点正弦波采样值。配置包为24位,已设置N=8、FWD_INV=1(配置包值:000000000000000100000011),但我仍不清楚SCALE_SCH参数的作用,望有人解析。
当前核心问题:通过仿真器确认输入数据流式传输正常、配置包发送正确,但FFT IP核的输出结果与Matlab对同一正弦波的FFT结果完全不同。恳请协助排查问题,并解释该场景下SCALE_SCH参数的工作机制。
C++ Kernel代码
typedef ap_int<64> data64_t; typedef ap_int<128> data128_t; typedef ap_int<32> data32_t; typedef ap_axis<IN_DWIDTH , 0, 0, 0> axis_in; typedef ap_axis<OUT_DWIDTH , 0, 0, 0> axis_out; void hls_dma(int num_words, data64_t *din, data64_t *dout, hls::stream<axis_in> &strm_in, hls::stream<axis_out> &strm_out) { #pragma HLS DATAFLOW data64_t temp_in; axis_in val_0, val_1; data32_t tmp_val; rd_loop: for (int i = 0; i < 2 * num_words; i++) { temp_in = din[i]; val_0.data = 0x0; val_1.data = 0x0; tmp_val = temp_in.range(31, 0); val_0.data |= tmp_val; strm_in.write(val_0); tmp_val = temp_in.range(63, 32); val_1.data |= tmp_val; if(!(val_1.data == 0)) val_1.data = 0; strm_in.write(val_1); } axis_out v0, v1; data64_t temp_out; wr_loop: for (int i = 0; i < 2 * num_words; i++) { v0 = strm_out.read(); v1 = strm_out.read(); temp_out.range(31, 0) = v0.data; temp_out.range(63, 32) = v1.data; *dout++ = temp_out; } } extern "C" { void fft_infc(int fft_select, int num_fft, int fft_dir, data64_t *din, data64_t *dout, volatile ap_uint<24> *config, hls::stream<axis_in> &strm_in, hls::stream<axis_out> &strm_out) { #pragma HLS INTERFACE axis port=config #pragma HLS INTERFACE axis_in port=strm_in #pragma HLS INTERFACE axis_out port=strm_out #pragma HLS INTERFACE m_axi port=din offset=slave bundle=gmem1 #pragma HLS INTERFACE m_axi port=dout offset=slave bundle=gmem2 ap_uint<24> tmp_config = 0; tmp_config[8] = (fft_dir == 1) ? 1 : 0; tmp_config.range(4, 0) = fft_select; *config = tmp_config; hls_dma(SAMPLE_NUM, din, dout, strm_in, strm_out); } }
相关截图
- 仿真器:

- FFT配置1:

- FFT配置2:

- FFT配置3:

- 输入数据:

- Matlab输出(绝对值):

- FFT IP Core输出(绝对值):

注:我绘制的是输出结果的绝对值。
内容的提问来源于stack exchange,提问作者A.A.
相关产品推荐
相关产品推荐

