quartus中fft模块使用.docx
《quartus中fft模块使用.docx》由会员分享,可在线阅读,更多相关《quartus中fft模块使用.docx(27页珍藏版)》请在冰豆网上搜索。
![quartus中fft模块使用.docx](https://file1.bdocx.com/fileroot1/2023-1/25/eae50fa1-8aee-4150-a643-8e4298cc868c/eae50fa1-8aee-4150-a643-8e4298cc868c1.gif)
quartus中fft模块使用
AlteraFFT兆核函数2.0.0版简介
清钟沁桐2007.9.25
AlteraFFT兆核函数2.0.0版简介
一.FFT兆核函数简介
AlteraFFT兆核函数2.0.0版是一个高性能、参数化快速傅立叶变换(FFT)处理器,对AlteraStratixII、StratixGX、Stratix以及Cyclone器件系列已经进行了设计优化。
FFT兆核函数可以完成高性能复数FFT或逆FFT(IFFT)。
1.FFI2.0.0版本
FFT2.0.0版具有以下基本性能:
?
完全支持StratixII、StratixGX、Stratix以及Cyclone和CycloneII系列器件。
?
支持Windows、Solal.is以及Linux操作系统。
?
高吞吐量四输出基一4FFT引擎。
?
并行支持多倍单输出和四输出引擎。
?
多路I/O数据流模式:
流(Streaming)、缓冲突发(BufferedBurst)以及突发(Burst)。
?
AtlanticCompliant输入输出接口。
?
指定参数以产生VHDL和VerilogHDL测试台。
?
每个模块转换方向(FFT/IFFT)可指定。
?
易于使用的IP工具台(Toolbench)接口。
?
Altera支持的VHDL和VerflogHDL仿真器上的IP功能仿真模型。
2.特点
FFT2.0.0版具有以下特点:
?
基-4算法和基-4/2混合基算法。
?
模块浮点结构,可在处理过程中保持最大数据动态范围。
?
使用嵌入式存储器。
?
最大系统时钟频率大于300MHz。
?
为使用StratixII、StratixGX以及StratixDSP模块和TriMatrix存储器结构进行了优化。
?
支持OpenCorePlus兆核函数评估。
3.性能
FFT兆核函数2.O.O版可以完成变换长度为2m(6≤m≤14)的基一2/4按频率抽选(DIF)的FFT算法。
在FFT兆核函数内部,FKr使用模块浮点结构获得最大SNR和最少逻辑需求之间的平衡。
由于FFT兆核函数的性能在很大程度上取决于FFT引擎结构和I/O数据流,因而很难描述FFI、兆核的所有性能结果。
表8.1、8.2、8.3、8.4和8.5给出FFT兆核函数的大部分器件性能和资源使用结果。
注释:
(1) 描述数据和旋转因子精度。
(2) 使用StratixII器件设计,QuartusII软件报告的设计使用的自适应查找表(ALUT)数。
逻辑单元(LE)数ALUT数相关。
(3) 在允许使用M-RAM资源的情况下,前面的数字表明在FFT设计向导中取消使用M-RAM时.M4K-RAM的模块数。
注释:
(1) 同表8.1
(1)。
(2) 当使用缓冲突发结构时,在FFT。
向导中可以指定四输出(Quad.output)FFT擎数。
(3) 同表8.1
(2)。
(4) 同表8.1(3)。
注释:
(1) 同表8.1
(1)。
(2) 当使用缓冲突发结构时,在FFI、向导中可以指定四输出(Quad—output)FFT引擎数。
用户可以并行选择1、2或4个四输出引擎。
(3) 在缓冲突发结构中,转换时间(TransformTime)定义为从已经加载N点输入数据块到第一个转换输出样点准备输出之间的时间。
转换时间不包括输出所有转换输出数据块所用的额外N一1个时
注释:
(1) 同表8.1
(1)。
(2) 当使用突发数据流结构时,在FFT向导中可以指定引擎数。
可以并行选择l到2个单输出引擎或1、2或4个四输出引擎。
(3) 同表8.1
(2)。
表8.5在stratixⅡ器件中使用突发(BurSt)数据流结构的性能
注释:
(1) 同表8.1
(1)。
(2) 在突发I/O数据流结构中,可以在FFT向导中指定引擎数。
可以并行选择1到2个单输出引擎,或1、2或4个四输出引擎。
(3) 转换时间定义为从已经加载输入数据块到第一个转换结果样点(对应于输入数据块)输出之间的时帧(Time)。
转换时间不包括输出所有转换输出数据块的时间。
(4) 同表8.3(4)。
二.FFT兆核函数的应用
1 系统要求
本节讲述的应用需要下列硬件和软件配置:
?
装有WindowsNT/2000/XP,RedHatLinux7.3/8.0或RedHat企业版,Linux3.0操作系统的PC机;或装有Solaris7或8操作系统的Sun工作站。
?
QuartusII4.1版本或更高版本软件。
?
Altera支持的VHDL或VerilogHDL仿真器(可选)。
2 下载并安装FFT
下载FFT兆核函数的过程与下载PCI编译器的过程相同,请参考7.2.3节下载PCI译器的过程。
1.安装FFT兆核函数文件
可以在Windows、Solaris或Linux操作系统中安装FFT兆核函数。
1) Windows
在装有Windows操作系统的PC机上安装FFT的步骤如下:
(1) 用鼠标左键双击F载的FF~兆核函数安装文件ffl—v.exe,如fft-v2.0.0exe其中表示FFT兆核函数的版本号。
(2) 在出现FFT安装界面后,根据安装提示完成FFT兆核函数的安装。
2) Solaris
在Solaris操作系统上安装FFT的步骤如下
(1) 键入下面的命令解压FFT压缩包:
gunzipfft—v一solaris.tar.gzr.(回车)
(2) 键入下面的命令提取压缩包内容:
tarvxffft—v一solaris.tar(回车)
3) Linux
在Linux操作系统上安装FFT的步骤如下:
(1) 键入下面的命令解压FFT压缩包:
gunzipfit—v一linux.tar.gzr(回车)
(2) 键入下面的命令提取压缩包内容:
tarvxffft—v一linux.tar(回车)
2.目录结构
图8.1给出了安装FFT兆核函数文件后生成的目录结构,其中表示FFT兆核函数安装目录。
3.FFT兆核函数设计应用
本节介绍如何在Windows操作系统下使用QuartusII软件和IP工具台创建一个FFT兆核函数的用户变量。
当产生一个FFT兆核函数用户变量以后,设计者即可将其加入到总的工程设计中使用。
1.建立一个新的QuartusII工程
建立一个新的QuartusII工程文件时,可以使用QuartusIINewProjectWizard工程向导为工程文件设置工作目录,分配1二程名称,指定项层设计输入的文件名,同时必须指定FFF兆核函数用户库。
建立新工程的操作步骤如下:
(1) 启动QuartusII软件。
(2) 选择File→NewProjectWizard命令。
(3) 指定新建工程文件的工作目录,本节使用c:
\qdesigns\fft。
(4) 指定工程文件名,本节使用fft—example。
(5) 点击Next按钮。
(6) 点击UserLibraryPathnames按钮。
(7) 存Libraryname栏中指定kfft—vklib\,其中表示安装FFT兆核函数的目录,默认安装目录为c:
WlegaCore。
点击Add按钮添加用户库,点击OK按钮确定。
(8) 连续点击两次Next按钮,在指定目标器件系列中选择Stratix系列。
(9) 点击Next按钮,选择目标器件。
(10) 点击Finish按钮完成建立新工程。
2.启动IP工具台
根据下面的操作步骤,在QuartusII软件中启动IP工具台:
(1) 选择Tools→MegaWizardPlug—InManager命令运行MegaWizardPlug-In管理器,弹出MegaWizardPlug-InManager对话框。
(2) 选择Createanewcustommegavariation选项l并点击Next按钮。
(3) 在InstalledPlug—Ins中点击SignalProcessing文件夹前面的加号“+”展开,同样展开里面的Transforms文件夹。
(4) 选择FFTv2.0.0。
(5) 指定输出文件类型,如AHDL、VerilogHDL或VHDL,本节选择VHDL。
(6) 指定输出文件目录及文件名,如图8.2所示。
(7) 点击Next按钮,QuartusII软件启动FFT兆核函数IPT具台,如图8.3所示。
3.确定参数
使用FFT兆核函数IP工具台创建一个FFT兆核函数用户变量,步骤如下:
(1) 点击FFT兆核函数IP工具台上的Step1:
Parameterize按钮,弹出Parameterize-FFTMegaCore(g~核函数参数设置)对话框,选择Parameters标签页,如图8.4所示。
(2) 从TargetDeviceFamily列表中选择目标器件系列。
(3) 分别从TransformLength、DataPrecision和TwiddlePrecision列表中选择转换长度、数据精度和旋转因子精度。
注意:
旋转因子精度必须小于或等于数据精度。
(4) 设置好FFT兆核函数参数设置对话框的Parameters标签页以后,选择Architecture标签页,如图8.5所示。
(5) 在I/ODataFlow中选择BufferedBurst,然后在EngineOptions栏的FFTEngineArchitecture列表中选择QuadOutput,在NumberofParrallelFFTEngines列表中选择2。
如果在I/ODataFlow中选择Streaming,FFT兆核函数生成一个具有最少QuadOutputFFT引擎数的设计来满足所需的I/O吞吐量。
注意:
一个单FFT引擎结构可以达到点数为1024的SteamingI/O数据流FFT的足够性能。
对于BufferedBurst和BurstI/O数据流结构,可以在l、2和4个QuadOutputFFT引擎之间选择并行工作;也可以在FFTEngineArchitecture列表中选择SingleOutpuFFI"引擎结构,则可以选择1或2个引擎并行工作。
如果可以在器件资源和数据吞吐量之间进行折中选择,则选择多个并行引擎可以在牺牲器件资源的情况下减少FFT兆核函数的转换时间。
(6) 设置好FFT兆核函数参数设置对话框的Architecture标签页以后,选择ImplementationOptions标签页,如图8.6所示。
(7) 在ComplexMultiplierImplementatin选择栏中的Structure列表中选择期望的复数乘法器结构。
复数乘法器可以使用4个实数乘法器和2个加法/减法器完成,或使用3个乘法器、5个加法器和一些附加的延时单元完成。
在StratixII、StratixGX和Stratix器件中选择4个乘法器和2个加法器可以最大化DSP模块的使用并最小化逻辑单元(LE)的使用。
(8) 在ImplementMultipliersin列表中选择在器件资源中如何实现乘法器,包括DSPBlocks/LogicCells、LogicCellsONLY和DSPBlocksONLY三个选项。
每个实数乘法器可以仅由DSPBlocks或逻辑单元(LEs)实现,或使用两者组合共同实现。
如果选择使用DSPBlocks和LEs组合实现,FFT兆核函数将使用逻辑单元扩展DSP模块的18×18乘法器资源。
(9) 在MemoryOptions栏中指定存储器选项。
高吞吐量FFT参数设置将增加存储旋转因子的ROM需求。
如果选择的目标器件系列支持M512RAM模块,则设计者可以通过设置TwiddleROMDistribution滑动条,在M4KRAM和M512RAM模块之间分配所需的ROM存储空间。
设置滑动条位置到最左端,意味着完全在M4KRAM模块中实现ROM存储;设置滑动条位置到最右端,意味着完全在M512RAM模块中实现ROM存储;设置滑动条在中间位置,意味着使用M4K和M512RAM模块实现ROM存储。
(10) 完成ImplementationOptions中的选项设置后点击Finish按钮完成参数设置。
4.建立仿真
IP功能仿真模型是由QuartusII软件(3.0以上版本)产生的周期精确(Cvcle—Accurate)的VHDL或VerilogHDL模型文件。
该仿真模型允许使用工业标准的VHDL和VerilogI-IDL仿真器进行IP快速功能仿真。
注意:
这些仿真模型输出文件只能用于仿真目的,一定不能用于综合或其他用途使用这些模型进行综合,将产生非函数设计(Non—alDesign)。
使用下面的步骤为FFT兆核函数产生IP功能仿真模型:
(1) 点击图8.3所示FFT兆核函数IP工具台上的Step2:
SetUpSimulation按钮。
(2) 选择SetUpSimulator—FFTMegaCore对话框中的GenerateSimulationModel选项,如图8.7所示。
(3) 在Language列表中选择兆核函数输出文件语言类型。
(4) 点击OK按钮完成设置。
5.产生兆核函数
指定参数值和IP功能仿真模型选项以后,即可产生用户FFT兆核函数。
(1) 点击图8.3所示的FFT兆核函数IP工具台上的Step3:
Generate按钮。
(2) 弹出IP测试台设计文件报告列表窗口,如图8.8所示,点击Exit按钮关闭该窗口。
IP测试台产生文件的描述见表7.4所示。
表8.6列出了FFT兆核函数输出文件的描述。
表中的表示FFT兆核函数变量文件名,如fftexample。
(3) 查看完生成报告以后,点击生成报告窗口的Exit按钮关闭IP工具台并返回到Quartus1I软件。
4.设计仿真
使用IP工具台生成的II)功能仿真模型完成设计仿真。
IP功能仿真模型是vo或VHO文件,由建立仿真中的设置决定。
这些文件用户指定的工作目录中产生,在仿真环境中编译该IP功能仿真模型完成用户FFT兆核函数变量的功能仿真。
下面的步骤是在ModelSim软件中完成仿真的过程,也可以在任何Altera支持的VHDL或VerilogHDL仿真器上仿真FFT兆核函数。
在ModelSim软件中使用MegaWizardPlug-In设计向导产生的ModelSimTcl脚本完成仿真的过程如下:
(1) 启动ModelSim仿真器软件。
(2) 在仿真器中,选择File→ChangeDirectory命令,改变工作目录为当前生成的FFT兆核函数变量工作目录。
(3) 存仿真器命令提示符中执行Tcl命令脚本。
?
如果功能仿真语言选择的是VHDL,则执行vhomsim.tcl脚本文件;
?
如果功能仿真语言选择的是VerilogHDL,则执行一vomsim.tcl脚本文件。
Tcl脚本建立ModelSim工程,完成库映射,编译项层设计和相关测试台,然后在波形观察窗L]中给出仿真结果波形。
5.设计编译
使用QuartusII软件对设计进行综合、布局和布线,完成用户FFT兆核函数变量的编译步骤如卜:
(1) 在QuartusII软件中选择Assignments→Settings命令,弹出Settings对话框。
(2) 在Category中选择Files页面,点击Add按钮。
(3) 添加\fft-v2.0.O\lib目录下面的fft—pack.vhd文件到OuartusII工程中,如图8.9所示。
注意:
确保fit_pack.vhd文件位于Filenaine框的最顶层,如图8.9所示。
否则,在Filename框中选中fft_pack.vhd文件,点击图8.9右边的Up按钮将其移动到所有文件的顶层。
(4) 点击OK按钮确定。
(5) 在QuartusⅡJ软件中选择Processing→StartCompilation命令启动编译。
6. 器件编程
工程编译完成后,可以下载到Altera目标器件中并进行用户硬件功能测试。
Altera免费的OpenCorePlus评估特性允许设计者在购买授权之前评估FFT兆核函数的功能。
OpenCorePlus评估可以产生IP功能仿真模型以及具有时间限制的编程文件。
当在QuartusII软件中选择Tools→Programmer进行器件编程时,将弹出如图8.10所示的警告对话框,提示生成的编程文件具有时间限制。
7. 安装授权文件
硬件测试结果满足功能和性能上的要求以后,需要购买FFT兆核函数的授权才能将设计转化为产品。
购买了FFT兆核函数的授权以后,需要从Altera网站WWW.altera.com/licensing上申请一个授权文件并安装在用户的计算机上。
在安装FFT兆核函数的授权文件之前,必须已经成功安装了授权的QuartusII软件。
安装FFT兆核函数授权文件的方法有下面两种。
1.将FFT兆核函数授权文件内容粘贴到QuartusII授权文件中
(1) 如果正在运行下列软件,应先关闭:
QuartusII软件,MAX+PLUSII软件,LeonardoSpectrum综合工具软件,Synplify软件以及ModelSim仿真器软件。
(2) 在文本编辑器中打开FFT兆核函数授权文件,该文件中应包含FEATURE行。
(3) 在文本编辑器中打开QuartusII软件的授权文件。
(4) 从FFT兆核函数授权文件中拷贝FEATURE行(一般包括2行)并粘贴到QuartusII授权文件中。
(5) 保存QuartusII授权文件,扩展名必须为.dat。
2.在QuartusII软件中指定FFT兆核授权文件.
(1) 首先将Altera通过E—mail发送的FFT兆核授权文件license.dat重新命名,如_license.dat
(2) 启动QuartusII软件。
(3) 选择Tools→LicenseSetup,启动Options对话框的LicenseSetup页面。
(4) 在Licensefile栏,在已经存在的授权文件后面加一个分号“:
”,在后面正确输入
FFT兆核函数授权文件的路径及文件名。
(5) 点击OK按钮确定设置。
三. FFT兆核函数规范
3.1 功能描述
长度为N的离散傅立叶变换(DFT)是计算单位圆上N点均匀分布的离散时间序列(k=2nk/N,k=0,…,N—1)的取样傅立叶变换。
DFI直接计算的复杂性可以通过快速傅立叶变换(FFT)算法大大降低。
FFT算法基于(8.1)和(8.2)式中求和运算的嵌套分解以及复数乘法的对称性得以实现。
其中一类FFT算法为库利一图基(Cooley—Tukey)基-r按频率抽选(decimation—in—frequency,缩写为DIF)法,将输入序列循环分解为N/r个长度为r的序列,并需要LOgrN级运算。
每一级分解由同一个硬件单元完成,包括数据从存储器中读取、通过FFT处理器以及写入存储器的过程。
每次通过FFf。
处理器需要完成log,N次运算。
通常基数选择仁2、4和16,增加分解基数r,可以在牺牲器件资源的情况下减少通过FFT处理器的次数。
将输入序列循环分解为4点序列的基-4分解,使用4点.FFT在乘法运算上具有更大优势,这也是AlteraFFT兆核函数所选择的分解基数,是可以获得最大数据吞吐量的分解,这种分解仅在蝶形运算之后乘旋转因子中才有复数乘法。
在N是2的奇数幂的情况下,FFT兆核自动在完成转换的最后使用基-2运算。
为了在整个转换计算过程中保持高信噪比(SNR),FFT兆核函数采用块浮点(Block-floating-point)结构,这种结构是定点(Fixed-point)与全浮点(Full-floating-point)结构之间的平衡。
在定点结构中,数据精度必须足够大才能充分表示整个转换计算过程中所有的中间计算结果。
在执行定点FFT过程中,经常出现数据位数过大或精度损失的现象。
在浮点结构中,每个数用单独的指数和尾数来表示,虽然这样可以极大提高数据精度,但浮点运算需要占用更多的器件资源。
在块浮点结构中,每个数据模块中所有的数值都有一个独立的尾数,但共享一个公共的指数,输入到FFT函数的数据作为定点复数。
块浮点结构保证了在FFT函数和整个转换过程中数据位数的完整使用。
每次通过基-4FFT运算以后,数据位数最大可能增加
位,根据前面输出数据模块动态范围的测量进行按比例换算,换算过程中累计的移位次数被作为整个模块的指数输出。
这种移位方法保证最低位(LSB)的最小值在乘法运算后的输出进行舍入操作之前就被丢弃。
实际上,块浮点表示法起到了数字自动增益控制(AGC)的作用。
为了在连续输出模块中产生统一的比例,必须用最终的指数对FFT函数输出进行比例换算。
注意:
AlteraFFT兆核函数的块浮点输出与Matlab这种全精度FFT的输出相比,应该用2(-exponent_out)进行比例换算来解决转换过程中最低位(LSB)被丢弃的影响。
其中exponent_out表示指数输出。
3.2 FFT处理器引擎结构
FFT兆核函数可以通过定制参数来使用两种不同的引擎结构:
四输出(Quad-output)或单输出(Single-output)引擎结构。
为了增加FFT兆核函数的总吞吐量,也可以在一个FFT兆核函数变量中使用多个并行引擎。
1.四输出FFT引擎结构
对于需要最少转换时间的应用,四输出FFT引擎结构是最佳选择。
四输出(Quad-output)指的是内部FFT蝶形处理器的吞吐量,这种引擎实现结构在一个单时钟周期内计算所有四个基-4蝶形复数输出。
图8.11给出了四输出FFT引擎结构的框图。
复取样数据x[k,m]从内部存储器并行读出,并由变换开关(sw)重新排序。
紧接着,排序后的取样数据由基-4处理器处理并得到复数输出G[k,m]。
由于基-4按频率抽选(DIF)分解方法固有的数学特点,在蝶形处理器输出上仅需要3个复数乘法器完成3次乘旋转因子(有一个旋转因子为1,不需要乘)计算。
为了辨别取样数据的最大动态范围,四个输出由块浮点单元(BFPU)并行估计,丢弃适当的最低位(LSB),在写