Altera FFT兆核函数2.0.0版简介
一.FFT兆核函数简介
Altera FFT兆核函数2.0.0版是一个高性能、参数化快速傅立叶变换(FFT)处理器,对Altera Stra
tix II、Stratix GX、Stratix以及Cyclone器件系列已经进行了设计优化。FFT兆核函数可以完成高性能复数FFT或逆FFT(IFFT)。
1.FFI2.0.0版本
FFT2.0.0版具有以下基本性能:
? 完全支持Stratix II、Stratix GX、Stratix以及Cyclone和Cyclone II系列器件。
? 支持Windows、Solal.is以及Linux操作系统。
? 高吞吐量四输出基一4FFT引擎。
? 并行支持多倍单输出和四输出引擎。
? 多路I/O数据流模式:流(Streaming)、缓冲突发(BufferedBurst)以及突发(Burst)。
? Atlantic Compliant输入输出接口。
? 指定参数以产生VHDL和Verilog HDL测试台。
? 每个模块转换方向(FFT/IFFT)可指定。
? 易于使用的IP工具台(Toolbench)接口。
? Altera支持的VHDL和Verflog HDL
仿真器上的IP功能仿真模型。
2.特点
FFT 2.0.0版具有以下特点:
? 基-4算法和基-4/2混合基算法。
? 模块浮点结构,可在处理过程中保持最大数据动态范围。
? 使用嵌入式存储器。
? 最大系统时钟频率大于300 MHz。
? 为使用Stratix II、Stratix GX以及Stratix DSP模块和TriMatrix存储器结构进行了优化。
? 支持OpenCore Plus兆核函数评估。
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) 使用Stratix II器件设计,Quartus II软件报告的设计使用的自适应查找表(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) 在缓冲突发结构中,转换时间(Transform Time)定义为从已经加载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 系统要求
本节讲述的应用需要下列硬件和软件配置:
? 装有Windows NT/2000/XP,Red Hat Linux 7.3/8.0或Red Hat企业版,Linux 3.0操作系统的PC机;或装有Solaris 7或8操作系统的Sun工作站。
? Quartus II 4.1版本或更高版本软件。
? Altera支持的VHDL或Verilog HDL仿真器(可选)。
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压缩包:
gunzip fft—v一solaris.tar.gzr.(回车)
(2) 键入下面的命令提取压缩包内容:
tar vxf fft—v一solaris.tar(回车)
3) Linux
在Linux操作系统上安装FFT的步骤如下:
(1) 键入下面的命令解压FFT压缩包:
gunzip fit—v一linux.tar.gzr(回车)
(2) 键入下面的命令提取压缩包内容:
tar vxf fft—v一linux.tar(回车)
2.目录结构
图8.1给出了安装FFT兆核函数文件后生成的目录结构,其中表示FFT兆核函数安装目录。
3.FFT兆核函数设计应用
本节介绍如何在Windows操作系统下使用Quartus II软件和IP工具台创建一个FFT兆核函数的用户变量。当产生一个FFT兆核函数用户变量以后,设计者即可将其加入到总的工程设计中使用。
1.建立一个新的Quartus II工程
建立一个新的Quartus II工程文件时,可以使用Quartus II New Project Wizard工程向导为工程文件设置工作目录,分配1二程名称,指定项层设计输入的文件名,同时必须指定FFF兆核函数用户库。建立新工程的操作步骤如下:
(1) 启动Quartus II软件。
(2) 选择File→New Project Wizard命令。
(3) 指定新建工程文件的工作目录,本节使用c:\qdesignsfft。
(4) 指定工程文件名,本节使用fft—example。
(5) 点击Next按钮。
(6) 点击User Library Pathnames按钮。
(7) 存Library name栏中指定kfft—vklib\,其中表示安装FFT兆核函数的目录,默认安装目录为c:WlegaCore。点击Add按钮添加用户库,点击OK按钮确定。
(8) 连续点击两次Next按钮,在指定目标器件系列中选择Stratix系列。
(9) 点击Next按钮,选择目标器件。
(10) 点击Finish按钮完成建立新工程。
2.启动IP工具台
根据下面的操作步骤,在Quartus II软件中启动IP工具台:
(1) 选择Tools→MegaWizard Plug—In Manager命令运行MegaWizard Plug-In管理器,弹出MegaWizard Plug-In Manager对话框。
(2) 选择Create a new custom mega variation选项l并点击Next按钮。
(3) 在Installed Plug—Ins中点击Signal Processing文件夹前面的加号“+”展开,同样展开里面的Transforms文件夹。
(4) 选择FFTv2.0.0。
(5) 指定输出文件类型,如AHDL、Verilog HDL或VHDL,本节选择VHDL。
(6) 指定输出文件目录及文件名,如图8.2所示。
(7) 点击Next按钮,Quartus II软件启动FFT兆核函数IP T具台,如图8.3所示。
3.确定参数
使用FFT兆核函数IP工具台创建一个FFT兆核函数用户变量,步骤如下:
(1) 点击FFT兆核函数IP 工具台上的Step 1:Parameterize按钮,弹出Parameterize-FFTMegaCore(g~核函数参数设置)对话框,选择Parameters标签页,如图8.4所示。(2) 从Target Device Family列表中选择目标器件系列。
(3) 分别从Transform Length、Data Precision和Twiddle Precision列表中选择转换长度、数据精度和旋转因子精度。
注意:旋转因子精度必须小于或等于数据精度。
(4) 设置好FFT兆核函数参数设置对话框的Parameters标签页以后,选择Architecture标签页,如图8.5所示。
(5) 在I/O Data Flow中选择Buffered Burst,然后在Engine Options栏的FFT EngineArchitecture列表中选择Quad Output,在Number of Parrallel FFT Engines列表中选择2。
如果在I/O Data Flow中选择Streaming,FFT兆核函数生成一个具有最少Quad OutputFFT引擎数的设计来满足所需的I/O吞吐量。
注意:一个单FFT引擎结构可以达到点数为1024的Steaming I/O数据流FFT的足够性能。
对于Buffered Burst和Burst I/O数据流结构,可以在l、2和4个Quad Output FFT引擎之间选择并行工作;也可以在FFT Engine Architecture列表中选择Single Outpu FFI"引擎结构,则可以选择1或2个引擎并行工作。如果可以在器件资源和数据吞吐量之间进行折中选择,则选择多个并行引擎可以在牺牲器件资源的情况下减少FFT兆核函数的转换时间。
(6) 设置好FFT兆核函数参数设置对话框的Architecture标签页以后,选择Implementation Options标签页,如图8.6所示。
(7) 在Complex Multiplier Implementatin选择栏中的Structure列表中选择期望的复数乘法器结构。
复数乘法器可以使用4个实数乘法器和2个加法/减法器完成,或使用3个乘法器、5个加法器和一些附加的延时单元完成。在Stratix II、Stratix GX和Stratix器件中选择4个乘法器和2个加法器可以最大化DSP模块的使用并最小化逻辑单元(LE)的使用。
(8) 在Implement Multipliers in列表中选择在器件资源中如何实现乘法器,包括DSP Blocks/Logic Cells、Logic Cells ONLY和DSP Blocks ONLY三个选项。
每个实数乘法器可以仅由DSP Blocks或逻辑单元(LEs)实现,或使用两者组合共同实现。如果选择使用DSP Blocks和LEs组合实现,FFT兆核函数将使用逻辑单元扩展DSP模块的18×18乘法器资源。
(9) 在Memory Options栏中指定存储器选项。
高吞吐量FFT参数设置将增加存储旋转因子的ROM需求。如果选择的目标器件系列支持M512 RAM模块,则设计者可以通过设置Twiddle ROM Distribution滑动条,在M4KRAM和M512 RAM模块之间分配所需的ROM存储空间。设置滑动条位置到最左端,意味着完全在M4K RAM模块中实现ROM存储;设置滑动条位置到最右端,意味着完全在M512 RAM模块中实现ROM存储;设置滑动条在中间位置,意味着使用M4K和M512 RAM模块实现ROM存储。
(10) 完成Implementation Options中的选项设置后点击Finish按钮完成参数设置。
4.建立仿真
IP功能仿真模型是由Quartus II软件(3.0以上版本)产生的周期精确(Cvcle—Accurate)的VHDL或Verilog HDL模型文件。该仿真模型允许使用工业标准的VHDL和Verilog I-IDL仿真器进行IP快速功能仿真。
注意:这些仿真模型输出文件只能用于仿真目的,一定不能用于综合或其他用途使用这些模型进行综合,将产生非函数设计(Non—al Design)。
使用下面的步骤为FFT兆核函数产生IP功能仿真模型:
(1) 点击图8.3所示FFT兆核函数IP工具台上的Step 2:Set Up Simulation按钮。
(2) 选择Set Up Simulator—FFT MegaCore对话框中的Generate Simulation Model选项,如图8.7所示。
(3) 在Language列表中选择兆核函数输出文件语言类型。
(4) 点击OK按钮完成设置。
5.产生兆核函数
指定参数值和IP功能仿真模型选项以后,即可产生用户FFT兆核函数。
(1) 点击图8.3所示的FFT兆核函数IP工具台上的Step 3:Generate按钮。
(2) 弹出IP测试台设计文件报告列表窗口,如图8.8所示,点击Exit按钮关闭该窗口。
IP测试台产生文件的描述见表7.4所示。表8.6列出了FFT兆核函数输出文件的描述。
表中的
表示FFT兆核函数变量文件名,如fft example。
(3) 查看完生成报告以后,点击生成报告窗口的Exit按钮关闭IP工具台并返回到Quartus 1I软件。
4. 设计仿真
使用IP工具台生成的II)功能仿真模型完成设计仿真。IP功能仿真模型是vo或VHO文件,由建立仿真中的设置决定。这些文件用户指定的工作目录中产生,在仿真环境中编译该IP功能仿真模型完成用户FFT 兆核函数变量的功能仿真。
下面的步骤是在ModelSim软件中完成仿真的过程,也可以在任何Altera支持的VHDL或Verilog HDL仿真器上仿真FFT兆核函数。
在ModelSim软件中使用MegaWizard Plug-In设计向导产生的ModelSim Tcl脚本完成仿真的过程如下:
(1) 启动ModelSim仿真器软件。
(2) 在仿真器中,选择File→Change Directory命令,改变工作目录为当前生成的FFT兆核函数变量工作目录。
(3) 存仿真器命令提示符中执行Tcl命令脚本。
? 如果功能仿真语言选择的是VHDL,则执行vho msim.tcl脚本文件;
? 如果功能仿真语言选择的是Verilog HDL,则执行一vomsim.tcl脚本文件。
Tcl脚本建立ModelSim 工程,完成库映射,编译项层设计和相关测试台,然后在波形观察窗L]中给出仿真结果波形。
5. 设计编译
使用Quartus II软件对设计进行综合、布局和布线,完成用户FFT兆核函数变量的编译步骤如卜:
(1) 在Quartus II软件中选择Assignments→Settings命令,弹出Settings对话框。
(2) 在Category中选择Files页面,点击Add按钮。
(3) 添加fft-v2.0.Olib目录下面的fft—pack.vhd文件到OuartusII工程中,如图8.9所示。
注意:确保fit_pack.vhd文件位于File naine框的最顶层,如图8.9所示。否则,在File name框中选中fft_pack.vhd文件,点击图8.9右边的Up按钮将其移动到所有文件的顶层。
(4) 点击OK按钮确定。
(5) 在Quartus ⅡJ软件中选择Processing→Start Compilation命令启动编译。
6. 器件编程
工程编译完成后,可以下载到Altera目标器件中并进行用户硬件功能测试。Altera免费的OpenCore Plus评估特性允许设计者在购买授权之前评估FFT兆核函数的功能。OpenCore Plus评估可以产生IP功能仿真模型以及具有时间限制的编程文件。
当在Quartus II软件中选择Tools→Programmer进行器件编程时,将弹出如图8.10所示的警告对话框,提示生成的编程文件具有时间限制。
7. 安装授权文件
硬件测试结果满足功能和性能上的要求以后,需要购买FFT兆核函数的授权才能将设计转化为产品。
购买了FFT兆核函数的授权以后,需要从Altera网站WWW.altera.com/licensing上申请一个授权文件并安装在用户的计算机上。
在安装FFT兆核函数的授权文件之前,必须已经成功安装了授权的Quartus II软件。安装FFT兆核函数授权文件的方法有下面两种。
1.将FFT兆核函数授权文件内容粘贴到Quartus II授权文件中
(1) 如果正在运行下列软件,应先关闭:Quartus II软件,MAX+PLUS II软件,LeonardoSpectrum综合工具软件,Synplify软件以及ModelSim仿真器软件。
(2) 在文本编辑器中打开FFT兆核函数授权文件,该文件中应包含FEATURE行。
(3) 在文本编辑器中打开Quartus II软件的授权文件。
(4) 从FFT兆核函数授权文件中拷贝FEATURE行(一般包括2行)并粘贴到Quartus II授权文件中。
(5) 保存Quartus II授权文件,扩展名必须为.dat。
2.在Quartus II软件中指定FFT兆核授权文件.
(1) 首先将Altera通过E—mail发送的FFT兆核授权文件license.dat重新命名,如_license.dat
(2) 启动Quartus II软件。
(3) 选择Tools→License Setup,启动Options对话框的License Setup页面。
(4) 在License file栏,在已经存在的授权文件后面加一个分号“:”,在后面正确输入
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在乘法运算上具有更大优势,这也是Altera FFT兆核函数所选择的分解基数,是可以获得最大数据吞吐量的分解,这种分解仅在蝶形运算之后乘旋转因子中才有复数乘法。在N是2的奇数幂的情况下,FFT兆核自动在完成转换的最后使用基-2运算。
为了在整个转换计算过程中保持高信噪比(SNR),FFT兆核函数采用块浮点(Block-floating-point)结构,这种结构是定点(Fixed-point)与全浮点(Full-floating-point)结构之间的平衡。
在定点结构中,数据精度必须足够大才能充分表示整个转换计算过程中所有的中间计算结果。在执行定点FFT过程中,经常出现数据位数过大或精度损失的现象。
在浮点结构中,每个数用单独的指数和尾数来表示,虽然这样可以极大提高数据精度,但浮点运算需要占用更多的器件资源。
在块浮点结构中,每个数据模块中所有的数值都有一个独立的尾数,但共享一个公共的指数,输入到FFT函数的数据作为定点复数。
块浮点结构保证了在FFT函数和整个转换过程中数据位数的完整使用。每次通过基-4FFT运算以后,数据位数最大可能增加 位,根据前面输出数据模块动态范围的测量进行按比例换算,换算过程中累计的移位次数被作为整个模块的指数输出。这种移位方法保证最低位(LSB)的最小值在乘法运算后的输出进行舍入操作之前就被丢弃。实际上,块浮点表示法起到了数字自动增益控制(AGC)的作用。为了在连续输出模块中产生统一的比例,必须用最终的指数对FFT函数输出进行比例换算。
注意:Altera FFT兆核函数的块浮点输出与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),在写入内部存储器之前对复数值进
行四舍五入并重新排序。
2.单输出FFT引擎结构
在需要最小尺寸FFT函数的应用中,单输出引擎最适合。单输出也指的是内部FFT蝶形处理器的吞吐量。在这种引擎结构中,每个时钟周期计算一个单蝶形输出,需要一个单独的复数乘法器,其引擎结构如图8.12所示。
图8.12 单输出 FFT引擎结构
3.3 I/O数据流结构
FFT兆核函数支持的I/O数据流结构选项包括:流(Streaming)、缓冲突发(Buffered Burst)和突发(Burst)。
1.流(Streaming)I/O数据流结构
流I/0数据流结构允许输入数据连续处理,并输出连续的复数数据流,这个过程中不需要停止FFT函数数据流的进出。图8.13给出了一个这种数据流结构的仿真结果。
FFT兆核函数采用Altera Atlantic接口I/0协议,输入接口为主设备汇端(Master Sink)而输出接口为主设备源端(Master Source)。
在系统复位信号(reset)变为低电平后,数据源将masterl_sink_dav信号置为高电平,对于FFT函数来说这表明在输入端至少有N个复数据样点可以输入。作为回应,FFT函数将master_sink_ena信号置高电平,表明有能力接收这些输入信号。数据源加载第一个复数据样点到FFT函数中,同时将master_sink_sop信号置高电平,表示输入模块的开始。
在下一个时钟周期,master_sink_sop信号被复位,并以自然顺序加载数据样点。图8.14详细说明了输入信号流程控制时序,图中xr(n)表示输入复数据实部,xi(n)表示输入复数据虚部。
在Streaming数据流结构中,FFT函数希望输入端的输入数据连续可用,因此,master_sink_ena一直保持高电平,除非系统复位,或由于master_sink_dav信号复位显示输入数据模块不完整,或master_sink_sop信号置高电平失败,master_sink_ena信号才复位。 如果要在一个输入模块的边界上停止模块数据流,master_sink_sop信号在前一个模块的最后数据样点输入以后将保持低电平。FFT函数复位master_sink_ena信号,并继续处理已经载入的数据模块。FFT函数中的流水线已经清除以后,master_sink_ena重新置为高电平,通过在下一个输入模块流的第一个输入数据样点上置位master_sink_sop信号来初始化下一个输入模块的读取。
当FFT已经完成了输入模块的变换,并且从设备汇端(slave sink)将master_source_dav信号置高电平(表示数据从设备接收器可以接收输出数据模块)时,FFT将master_source_ena信号置高电平,并且以自然顺序输出复数变换域数据模块。FFT函数在master_source_sop信号上输出一个高电平脉冲表示第一个输出样点,如图8.15所示。图8.15详细说明了输出流程控制时序。
N个时钟周期以后,master_source_eop信号被置为高电平,表示转换输出数据块结束,如图8.13所示。
2.缓冲突发(Buffered Burst)I/O数据流结构
缓冲突发I/O数据流结构的FFT需要的存储器资源比流动I/O数据流结构少,但平均模块吞吐量减少。图8.16给出了一个缓冲突发I/O数据流结构的仿真波形实例。
在系统复位信号(reset)变为低电平后,数据源将master_sink_dav信号置为高电平,对于FFT函数来说这表明在输入端至少有N个复数据样点可以输入。作为刚应,FFT函数将master_sink_ena信号置高电平,表明有能力接收这些输入信号。
数据源加载第一个复数据样点到FFT函数中,同时将master_sink_sop信号置高电平,表示输入模块的开始。在下一个时钟周期,master_sink_sop信号复位,并以自然顺序加载后面的N-1个复输入数据样点。
当完全载入输入模块时,FFT函数复位master_sink_ena信号,表示FFT不再接收其他输入数据。此时,FFT函数开始计算输入数据模块的变换结果。图8.17详细说明了输入信号流程控制时序。
在FFT处理器从内部输入缓冲区读取输入样点之后,FFT将master_sink_ena信号重新置为高电平,准备读取下一个输入模块。下一个输入模块的起点由master_sink_sop脉冲确定。
当FFT完成输入模块的变换,并且从设备汇端(Slave Sink)置master-source_dav信号为高电平(表示数据从设备接收器可以接收输出数据模块)时,FFT将master_source_ena信号置高电平,并以自然顺序输出复数变换域数据模块。图8.18说明了输出信号流程时序。
信号master_source_sop和master_source_eop分别表示输出模块数据包的起点(start-of-packet)和终点(end-of-packet),如图8.16所示。
3.突发(Burst)I/0数据流结构
突发I/0数据流结构的执行过程与缓冲突发结构相同,不同的是,对于给定参数设置
突发结构在降低平均吞吐量的前提下需要更少的存储资源。
图8.19给出了突发结构的仿真结果。同样,master_source_ena和master_sink_ena信号分别表示FFT的系统数据源和从设备汇端(Slave Sink)信号,即当:FFT可以接收新的数据块以及FFT输出端存在有效输出数据块时信号有效。
在突发I/O数据流结构中,载入一个有效输入模块以后,master_sink_ena信号被复位,直到FFT函数完成转换并且输出数据模块被完全读出为止,这时,master_sink_ena信号才被重新置位,准备下一个输入模块的载入。
四. Atlantic接口
Altera提供的经过互用性测试、高性能的标准接口IP(Intellectual Property)核允许设计者像使用POS-PHY、UTOPIA、FlexBus、RapidIO和HyperTransport这样的协议一样使用IP协议。其中POS-PHY和UTOPIA协议分别为SONET/SDH和异步传输模式(ATM)提供物理层和链路层的接口;FlexBus接口由AMCC开发,可处理SONET传输层上的变长度IP包:RapidIO技术是高性能的包交换互连技术,用于微处理器、数字信号处理器、
通信和网络处理器、系统存储器和外部设备之间数据和控制信息的传送;HyperTransport技术是一种主要用于处理器接口的高速、高性能点对点链路技术。随着Altera Atlantic标准片上接口的引入,设计人员可以通过简单的布线来桥接不同的I/O标准。
Altera标准化Atlantic数据路径接口简化了桥接各种不兼容设备的任务,Atlantic总线是一种用于IP核快速集成的片上数据路径总线。图8.20是使用Atlantic接口的FlexBusLevel 4和。POS-PHY Level 4协议接口的桥接方式。
Atlantic接口是一种可扩展的高速片上接口,主要用于数据包和数据单元的传输。对可编程逻辑器件(PLD)进行优化以后,Atlantic接口使得设计者能方便迅速地将不兼容的设备连接在一起,并便于用户IP核集成简单、定义清晰、受支持的接口。
Atlantic接口是一种面向数据包传输的同步点对点连接,可扩展的时钟频率和数据总线宽度使得对于任意长度数据包都能有很高的吞吐量。Atlantic接口支持主设备源端到从设备汇端,或者从设备源端到主设备汇端的互连关系。控制信号和固定的数据包起始点(SOP)对齐简化了包的处理,并使流程控制变得更灵活。
对Atlantic接口的特点总结如下:
? 任意长度的面向数据包的灵活接口;
? 连接所有Altera数据单元和数据包兆核函数的接口;
? 同步点对点连接;
? 高吞吐量且控制流程灵活;
? 具有主设备源端/从设备汇端,或主设备汇端/从设备源端的相对关系;
? 可扩展的时钟频率和数据路径宽度;
? 固定的数据包起始点(SOP)对齐简化了包的处理。
4.1 Atlantic接口功能描述
Atlantic接口上的数据流方向可以由主设备到从设备(主设备源端),也可以由从设备到主设备(从设备源端)。图8.2l(a)给出了由主设备源端到从设备汇端传输的Atlantic接口框图,图8.2l(b)给出了由从设备源端到主设备汇端传输的Atlantic接口框图。
图8.22给出了一个数据包(主设备或从设备源端)配置传输实例,在这种情况下,ena和val信号持续高电平。
说明:
(1)sop信号标记数据包起始点(SOP)。
(2)eop信号标记数据包终止点(EOP),mty信号表示无效字节数。
1.主设备源端
从设备汇端(slave Sink)接口响应主设备源端接口的写命令。主设备置位ena信号,并驱动dat总线上的数据。在下一个clk上升沿,从设备监测dat和ena信号。如果ena信号为高电平,从设备接收并处理dat总线数据;否则,放弃dat总线数据。由于ena信号已经表明了dat总线上包含新的有效数据,因此在这个方向上不需要val信号。如果ena信号为低电平,表明dat总线没有定义。从设备汇端没有周期循环(cycle-by-cycle)流程控制,它通过dav信号请求主设备停止数据传输。但根据不同的应用模式,主设备可能需要几个时钟周期的时间才能停止传输数据。
dav信号表示从设备可以接收大批数据,但数据的数量取决于应用模式。如果主设备在dav信号复位后的长时间内连续置位ena信号,将导致从设备溢出。对于主设备源端而言,在ena信号置位或复位之后,以及dat总线上的数据流开始或停止之后都不需要延时。图8.23所示为主设备源端Atlantic接口时序波形。
时序说明:
(1) 从设备汇端有空间接收起始字(Threshold Words)。
(2) 主设备源端开始向从设备汇端写数据。
(3) 从设备汇端不再接收起始字,主设备源端可以继续发送数据,但必须保证从设备汇端不溢出。
(4) 主设备源端停止发送数据。
(5) 从设备汇端有空间接收起始字。
(6) 主设备源端开始向从设备汇端写数据。
(7) 从设备汇端还有空间,但主设备源端数据已经发送完。
(8) 主设备源端监测到一个错误,并置位err信号。
(9) 主设备源端识别到一个数据错误,置位err信号并保持,直到eop信号复位。
图8.23 主设备源端Atlantic接口时序波形
2.从设备源端
主设备汇端接口向从设备源端接口产生读命令。当主设备准备好接收数据时,主设备置位ena信号。在下一个clk的上升沿,从设备监测到ena置位,从立即在dat总线上驱动新的数据并置位val信号,或复位val信号。在下一个clk上升沿,主设备监测val信号状态并采集dat总线数据。如果val信号为高电平,主设备可以使用dat总线上的数值;否则,dat总线没有定义,主设备将放弃dat总线上的信号。
如果ena信号在前一个时钟沿被置位,并且val信号在当前时钟沿置位,那么dat、sop、eop以及err信号在当前时钟沿有效,并且dat总线包含新的数据。如果val信号被复位,sop、eop、err以及dat信号不明确。
dav信号表示从设备可以提供大批量数据,但数据的数量取决于应用模式。如果主设备在dav信号复位后的长时间内连续置位ena信号,将导致从设备下溢。图8.24所示为从设备源端流程控制时序。
时序说明:
(1) 主设备置位ena信号请求新的数据。
(2) 从设备响应主设备请求,驱动dat总线并置位val信号。
(3) 由于主设备没有数据请求,从设备保持dat和val信号;由于dat总线一直保持常数不变,主设备可以在任何一点采样。
(4) 主设备再一次置位ena信号请求新的数据。
(5) 从设备没有数据并复位val信号。
(6),(7) 从设备有新数据,开始驱动dat总线并置位val信号。
(8) 从设备保持val、sop、eop、err和dat信号。
图8.24 从设备源端流程控制时序
图8.25所示为从设备源端下溢处理时序。
主设备可以连续保持ena信号为高电平,让从设备在dat总线上随意传送数据,通过val信号说明dat总线是否包含新的数据。图8.26所示为在从设备流程控制下的从设备源端时序。
通常,如果主设备检测到val信号在当前clk信号上升沿被置位,并且ena信号在前一个clk上升沿置位,则主设备仅接收新数据。但是,如果ena信号被复位,从设备将保持dat、sop、eop、CIT和val信号状态。这时主设备可以随时采集val和dat信号,直到ena信号重新被置位之后的clk边沿为止。图8.27所示为主设备流程控制下的从设备源端时序。
时序说明:
(1) 从设备复位dav信号表明可能发生下溢。
(2) 从设备下溢并复位val信号,dat、sop、eop以及err信号成为不确定信号
(3) 主设备复位ena信号停止数据流,val信号保持,dat、sop、eop和err信号不确定。
(4) 从设备置位dav信号表示dat总线上有数据可用。因为ena信号被复位,val保持复位状态,并且
dat、sop、eop和err信号不确定。
(5) 主设备置位ena信号重新启动数据流。
(6) 从设备一个周期后恢复数据,然后将val信号置位,dat、sop、eop和err信号恢复有效。
图8.25 从设备源端下溢处理时序
时序说明:
(1),(3) 从设备有新数据,从设备驱动dat总线并置位val信号。
(2),(4) 从设备没有新数据,dat总线状态没有定义,从设备复位val信号。
图8.26 从设备流程控制的从设备源端时序
时序说明:
(1) 主设备置位ena信号,请求数据。
(2) 从设备在dat总线上驱动新数据。
(3) 从设备检测到ena信号复位,保持dat和val信号当前状态。
(4) 主设备可以在所指的任一时钟边沿采集dat信号。
图8.27 主设备流程控制下的从设备源端时序
对于从设备源端到主设备汇端来说,从ena信号被置位或复位到dat总线上数据流开始或停止之间有一个时钟周期的延时。当主设备置位ena信号时,直到clk信号的下一个上升沿以后在dat总线上才会有新的数据。同样,当主设备复位ena信号时,在clk的下一个上升沿,dat和val信号将处于保持状态,直到ena被重新置位。由于接口采样流水线结构,因而这个延时并不影响接口的净吞吐量。
dav信号有效表明从设备有大量有效数据。但如果daV信号无效,主设备也可以置位ena信号。当ena信号被置位时,如果从设备没有可以立刻读取的数据,从设备将复位val信号。图8.28所示为具有主设备汇端的Atlantic接口时序。
时序说明:
(1)从设备源端表明数据可用。
(2)主设备汇端开始读数据。
(3)主设备汇端在一个时钟周期时间内停止读数据,val信号保持高电平,并且dat、sop和eop信号
保持当前状态。
(4)从设备源端表明只有少量可读数据。主设备汇端在检测到val信号复位之前可继续读取数据。
(5)主设备汇端继续读取数据,val信号为高电平时数据仍然有效。
(6)从设备源端不能提供更多数据,复位val信号。
(7)在dav信号被重新置位之前,主设备汇端处于空闲状态。
(8)从设备源端检测到一个eop错误,同时置位err信号。
(9)从设备源端检测到一个数据错误,在复位eop信号之前置位err信号。
图8.28具有主设备汇端的Atlantic接口时序
4.2 信号说明
为了在同一模块中支持多个Atlantic接口,用户应通过加入前缀的方法区分各个接口的信号名,即<前缀>_<信号名>。表8.7、8.8、8.9分别给出了Atlantic接口全局信号、控制信号和数据信号的描述。