主要内容

使用FFT HDL优化块为FPGA实施FFT

This example shows how to use the FFT HDL Optimized block to implement a FFT for hardware.

FFT和IFFT HDL优化的块和系统对象支持许多应用程序的模拟和HDL代码生成。金宝app他们提供了针对不同用例优化的两个架构:

  • 流radix 2^2- 对于高通量应用程序。当您使用向量输入时,每秒(GSP)实现Gigasplass(GSP)。

  • 爆发radix 2- 对于低区域应用。仅使用一只复杂的蝴蝶。

该示例包括两个模型,这些模型分别使用FFT HDL优化块的流式和爆发结构。

流radix 2^2架构

Modern ADCs are capable of sampling signals at sample rates up to several gigasamples per second. However, clock speeds for the fastest FPGA fall short of this sample rate. FPGAs typically run at hundreds of MHz. One way to perform GSPS processing on an FPGA is to process multiple samples at the same time at a much lower clock rate. Many modern FPGAs support the JESD204B standard interface that accepts scalar input at GHz clock rate and produces a vector of samples at a lower clock rate. Therefore modern signal processing requires vector processing.

流radix 2^2架构旨在支持高通量用例。金宝app此示例模型使用输入向量大小为8,并使用该FFT计算FFT流radix 2^2体系结构。有关定时图,支持功能和FPGA资源使用情金宝app况,请参见FFT HDL优化块参考页。

modelName ='ffthdloptimizedExample_streaming';Open_System(modelName);

这InitFcn callback (Model Properties > Callbacks > InitFcn) sets parameters for the model. In this example, the parameters control the size of the FFT and the input data characteristics.

fftlength = 512;

输入数据是两个正弦波,200 kHz和250 kHz,每个都以1*2e6 Hz采样。输入矢量大小为8个样本。

frameize = 8;FS = 1*2E6;

为了证明数据不需要连续出现,此示例应用了每个其他周期的有效输入。

ValidPattern = [1,0];

打开频谱查看器并运行示例模型。

open_system('ffthdloptimizedexample_streaming/spectrum查看器/电源频谱查看器');SIM(modelName);

爆发radix 2(最小资源)体系结构

使用爆发radix 2FPGA资源有限的应用程序的体系结构,尤其是在FFT长度很大的情况下。该体系结构仅使用一种复杂的蝴蝶来计算FFT。该设计接受数据时准备好被断言,一旦将整个FFT帧保存到内存中,就开始处理。处理过程中,设计无法接受数据,因此准备好被删除。有关定时图,支持功能和FPGA资源使用情金宝app况,请参见FFT HDL优化块参考页。

modelName ='ffthdloptimizedexample_burst';Open_System(modelName);

这InitFcn callback (Model Properties > Callbacks > InitFcn) sets parameters for the model. In this example, the parameters control the size of the FFT and the input data characteristics.

fftlength = 512;

输入数据是两个正弦波,200 kHz和250 kHz,每个都以1*2e6 Hz采样。数据每个周期都是有效的。

FS = 1*2E6;有效pattern = 1;

打开频谱查看器并运行示例模型。

open_system('ffthdloptimizedexample_burst/spectrum查看器/电源频谱查看器');SIM(modelName);

生成HDL代码和测试台

为此示例生成HDL需要HDL Coder™许可证。

选择一种模型来生成HDL代码并测试基准:

SystemName ='ffthdloptimizedexample_burst/fft HDL优化爆发';

or

SystemName ='ffthdloptimizedexample_streaming/fft HDL优化流';

使用此命令为任何一个FFT模式生成HDL代码。生成的可用于任何FPGA或ASIC目标。

makehdl(systemName);

使用此命令生成一个测试工作台,将HDL模拟的结果与Simulink模拟行为进行比较。金宝app

makehdltb(systemName);