1、 本书所有的信号处理的实现都是在Xilinx公司的FPGA芯片上实现。本章主要介绍Xilinx的三个最重要的FPGA产品Virtex-II,Virtex-4和Virtex-5的内部结构及主要的功能,在此基础上介绍了基于FPGA算数运算的一些基本理论。了解这些FPGA的内部结构及功能,为读者深入掌握使用FPGA实现数字信号处理算法打下良好基础。如图所示,Xilinx的Virtex-II系列的FPGA内的一个CLB包含四片slice单元,而Virtex和Spartan系列的FPGA每个CLB 包含两片slice单元。下面给出CLB实现的功能:图2.1 CLB的内部结构 1.CLB中的slice逻辑
2、可实现任何的数字逻辑设计;2.Slice在CLB中被互连到一起并且通过开关矩阵将CLB连接起来;3Cin和Cout信号对实现算术功能非常重要。每个CLB列中存在两个相互独立的Cin/Cout列;4一片slice可实现一个2位全加器,所以一个CLB可实现两个独立的4位全加器,作为与其它CLB 协同工作的高位宽度加法运算的一部分。一旦设计人使用VHDL或Verilog语言完成设计输入,设计将被综合,并得出一个在指定FPGA上实现的方案。设计者指定目标器件的类型(比如厂商,系列,规格,封装类型,速率等级)。综合处理是一个复杂的过程,它将任何可综合的VHDL/Verilog通过软件工具转转换为FPGA
3、可以识别的比特流文件。对于Xilinx的产品,综合工具将决定如何使用可用的slice逻辑来执行设计的数字逻辑操作。由FPGA制造商提供的工具通过一系列的复杂操作来接收设计文件,其目的是将设计转化成一种比特流,该比特流可被下载并对FPGA 进行配置。Slice是CLB内的功能单元。衡量Xilinx FPGA资源规模的主要标准是slice的数量。图2.2给出了Slice的内部结构。在Slice内实现用户设计的逻辑行为操作。图图2.2 Slice的内部结构的内部结构 Slice可以完成的功能主要有:1)用户设计功能的绝大部分可通过CLB中的slice来实现;2)不同slice之间存在着多种互连的可行
4、性;3)LUT可实现任何4输入布尔函数。绝大部分的数字逻辑设计均可使用4输入LUT执行逻辑操作来实现;4)LUT可用做移位寄存器SRL或者RAM;寄存器提供了实现同步逻辑的方法;1)当FPGA工作频率较高时,正确的使用寄存器显得十分重要,不正确的使用寄存器将降低系统的工作性能;2)多路复用器和CY单元提供了slice中信号布线的可能性;3)底部还包括了算术逻辑与门单元,使得乘法的实现更为有效。Virtex-II的FPGA内部使用的是四输入的LUT。LUT的功能主要有:1)一个4输入布尔函数映射到FPGA内的LUT中;加载到LUT中的比特位包含了用于配置器件的比特流。综合工具将决定用于实现用户设
5、计的LUT的内容,多数情况下设计人员不需要关注这一点。偶尔情况下,需要设计人员人工指定设计的某些部分,并确定LUT的内容(例如,该如何将它们连接在一起)。在对时间和芯片面积要求极为苛刻的应用时,为保证LUT能够满足性能要求,就需要设计人员进行手工优化。这些手工优化类似于用汇编机器代码人工编写部分的软件代码,在人工优化时,不需要编译器做这个工作。如图2.3所示,Xilinx的LUT可实现一个16位移位寄存器(称为SRL16),并且当它与LUT的寄存器连接在一起时,可以在半个slice中实现17个可能的延迟操作。移位寄存器的功能主要有:图图2.3 移位寄存器的结构移位寄存器的结构 移位寄存器可被级
6、联以构成更长的延时;可以使用地址线在任何一点对延迟线进行选择,这样就可以产生长度小于最大延迟的任何延迟。在FPGA内,一方面,由于信号必须通过LUT或数据线进行传输,因此FPGA的时钟工作频率通常由寄存器间的最长路径所限制;另一方面,使用slice寄存器使最长路径尽可能最短,这样可以最大限度地提高时钟工作频率。这是需要掌握的一个 FPGA 设计的基本设计原理。如图2.4所示,在每个时钟沿上,信号在到达下一个触发器之前,必须通过布线、LUT和MUX等传输数据。在每个时钟沿上,对器件上的所有信号来说,这是一定会发生的。有些信号会比其他信号传输的更远。寄存器之间最长的信号路径被称之为关键路径。应当注
7、意的是,寄存器基本上不会影响数据延迟,因为每个LUT都与一个寄存器组成对,而这些寄存器可以按照要求存储LUT的输出。图图2.4 寄存器传输性能比较寄存器传输性能比较 正是这些关键路径决定了FPGA可以达到的最高时钟速率。注意设计人员可根据需要任意选择时钟率。如果关键路径过长,设计的时钟频率将很可能无法满足指定应用的要求。在这种情况下,设计人员必须再回到软件工具或重新设计,并尝试使硬件运行得更快的设计方法,比如:流水线操作,重设计,增加软件工具的努力等级,增加/去除设计约束或者手工编辑设计以优化硬件并缩短关键路径。如图2.5所示,Virtex-II系列的FPGA提供了18Kb的专用块RAM(Bl
8、ock RAM,BRAM)资源。最大的容量的XC2VP125 FPGA芯片具有556个BRAM,即总共556*18=10,008Kb的BRAM资源。BRAM可在器件配置时被写入,或是在实际操作中进行读/写操作。设计人员通过VHDL/Verilog代码来指定如何使用RAM底层原语。图2.5 BRAM的布局结构 如图2.2所示,LUT可存储16比特数据并可被用做16x1的RAM。两个LUT可形成一个32x1单端口RAM,或一个16x1双端口RAM(即使用同一个地址从两个RAM中得到数据)。对于DSP的应用。在器件上任意位置建立小型1,738Kb的分布式RAM。因为RAM的功能对DSP的实现极其重要
9、。使用一个小型分布式RAM的范例可作为通信系统中使用的碎片序列。该序列将被保存到系统中需要它“碎裂”数据的位置。使用小型RAM配置形成更大的单/双端口配置是对FPGA灵活性的进一步的要求。Virtex-II的FPGA芯片内提供了嵌入的硬核乘法器资源,嵌入式乘法器特征主要表现在以下几个方面:1)乘法器按列排列在CLB之间;2)乘法器为18x18位,并且与BRAM相关联以便于存取数据;3)这些硬核乘法器可以是组合型或者流水线型,其工作频率可以高于300MHz。4)将嵌入式乘法器与LUT结合实现的累加器可以创建MAC引擎;5)可以级联以构成更多位数的乘法器。每个嵌入式乘法器与其临近的BRAM结合在一
10、起,因此这些单元共享互连资源。当乘法器不与 BRAM结合而单独使用时,BRAM仍可被使用,但这时只有18位。乘法器可以根据性能要求只用slice逻辑在FPGA的主逻辑中实现,或者用BRAM与slice组合来实现乘法器模块。在没有嵌入式乘法器可用,或者设计的定时要求过于严格时,则必须用这种方法产生乘法器。如图2.6,Virtex-II系列的FPGA内包括了大量可将器件的不同部分连接起来的布线资源,CLB之间的可配置布线逻辑(通过转换开关)是对时钟信号,进位链等专有布线资源的补充。图图2.6 FPGA内的布线资源内的布线资源 器件中信号的布线通常使用工具来实现。在FPGA上实现一种设计有很多可能方
11、案,软件工具可能需要花费许多时间来为一个合理设计产生一个比特流。因为不同的布线选择取决于一个信号必须传输多远,因此布线的各种可能性按层次结构进行描述。很明显,为了保证高的时钟速率,应该使信号传输尽可能短的距离。专用的时钟分布线特别地重要,因为当它们与数字时钟管理模块(Digital Clock Management,DCM)结合时,它们允许高速时钟在未发生扭曲的情况下驱动器件。Virtex-II系列的FPGA可与板级/系统级上的背板、总线和其它系统接口。其I/O端口的主要性能有:1)支持大多数现有的串行/并行I/O标准;2)Virtex-II系列的FPGA中,包含多达24个RocketIO串行
12、收发器模块,每个收发器可在大于3.125Gb/s的速率下全双工运行;3)Virtex-II系列的FPGA中,用户I/O引脚支持许多高达840Mbps LVDS(低电压差分信号)的单端或差分信号标准;4)Virtex-II Pro X系列支持高达20个速率为10.3125Gbp/s的信道。为了将信号输入到FPGA以及从FPGA输出信号,要求信号能够被高速地送进系统板或者FPGA板上的器件中。在板级系统中,遇到的困难常常是信号串扰、反射、以及振铃等,但是如果所支持的I/O标准的数目被给定,设计FPGA与板级信号的接口还是比较容易的。Virtex-II器件有专用的RocketIO模块处理高速I/O需
13、求,它们也有许多通用I/O引脚选择以满足其它的接口需求。Virtex-4系列的FPGA采用了高级硅模组(Advanced Silicon Modular Block,ASMBL)架构。如图2.7所示,ASMBL通过使用独特的基于列的结构,实现了支持多专门领域应用平台的概念。每列代表一个具有专门功能的硅子系统,如逻辑资源、存储器、I/O、DSP、处理、硬IP和混合信号等。Xilinx公司通过组合不同功能列,组装成面向特定应用类别的专门领域FPGA(与专用不同,专用是指一项单一应用)。图图2.7 ASMBL架构架构 ASMBL架构从两个级别对设计进行了提升,一是解决基于应用领域的设计问题;二是解决
14、在传统ASIC和FPGA设计中都存在的一些技术约束问题。特别指出,ASMBL成功的缓解了与I/O和阵列相关性、电源和地分布、以及硬IP缩放相关的约束问题。下面对这几个问题进行简单的介绍:ASMBL的基于列的结构消除了同时困扰内核约束型和焊盘约束型设计的面积-周长相关性问题。使用ASMBL架构的芯片,只需要分配更多的列给I/O功能就可以容纳额外的I/O焊盘,而不需要增加芯片面积总体尺寸。为了使基于列结构的I/O块能放置在芯片周边以内,基于ASMBL的芯片采用了倒装芯片封装,这样就允许在芯片的任何位置放置焊盘,而不仅仅局限在芯片的周边。倒装芯片技术就是将芯片在封装内“上下颠倒”再进行装配,微小焊球
15、将各个焊盘(I/O、电源等)连接到内部封装互联。然后使用焊球技术将封装引脚连接到一块印刷电路板或其它基片上。除了允许在芯片内部放置焊盘外,倒装封装还提供了比压线封装更强的散热能力。ASMBL架构还提供了FPGA中电源和地的分布能力。与把I/O焊盘放置在FPGA内部类似,设计者可以将电源和地焊盘布局在芯片内部的任何位置。ASMBL对内部电源和地焊盘的支持极大地简化了均衡整个FPGA器件电源分布的任务。同时这还减少了电源下降、接地反弹和时钟畸变(因为时钟缓冲器分布在整个芯片上,故而可以得到更稳定的VDD电源电压和更均衡的接地),从而减少了片上信号完整性和信号延迟问题。采用ASMBEL架构支持对硬硅
16、IP放缩的支持。对于在传统FPGA架构中使用直线排列扩展IP核,向上扩展该核以容纳额外的特性可能会需要更大的FPGA。在基于ASMBL的FPGA中缩放IP则只是意味着以列的方式增加更多的IP,因此可以适合于已有的FPGA面积。这就有效地将IP缩放问题从两维(直线内核)降到一维(按列安排IP,缩放就可以通过增加IP列来完成)。从而,设计人员不必再为将硅IP核装入芯片而去寻找更大更贵的芯片。ASMBL架构的另一个重要特点就是有效地利用了11层金属层,从而增强了在条带状模块上的芯片布线能力。Virtex-4系列具有三个平台:1)用于高性能和高密度逻辑综合应用的LX平台,2)用于高性能和高密度综合应用
17、的LX平台,3)用于高性能信号处理的SX平台,用于全功能处理和SoC嵌入式设计连接应用的FX平台。下面对这几个平台进行简单的介绍 最通用的系列是Virtex-4 LX,即逻辑优化的FPGA平台系列。LX系列功能上与早期的Virtex-II器件类似,没有较新的Virtex-II Pro器件中所嵌入的PowerPC处理器或高速串行I/O。所有类型的软IP内核都可在这一平台的器件中实现,包括各种各样的DSP模块和软核处理器内核。该平台的最主要优点是使用了高密度集成的通用逻辑单元,从而使其成为成本效率最高的逻辑平台。Virtex-4 LX平台将包括多款从小规模至大规模的成员器件,从而使其可适用于多种应
18、用。该系列的逻辑密度将比前代FPGA器件提高一倍。在300mm晶圆上应用先进的90nm制造技术所带来的成本优势,再加上采用成本效率高的器件封装,将使这一平台将被广泛地接受。与前一代平台FPGA相比更高的时钟频率和更低的功耗将使LX平台更适合用于做为替代ASIC的解决方案。Virtex-4 SX信号处理/DSP平台系列中提高了DSP以及RAM单元与逻辑单元的比例。功能模块比例的改变使得这一FPGA平台器件用于高速信号处理时比其它Virtex-4平台占用的螺片面积更小。在此基础上再结合新的DSP逻辑单元,使得可以在Virtex-4SX平台器件中实现最高性能DSP的同时,成本效率最高。具备了显著提高
19、的DSP带宽,与先前Virtex-II Pro器件相比又大大降低了功耗,使得Virtex-4 SX平台提供了比其它任何器件都高的单位成本DSP性能。Virtex-4 DSP专用增强特性包括增加新的工作模式和功能,再与SX平台架构的其它优化相结合,可支持功能更强大的高级DSP IP。Virtex-4 FX全功能平台系列中提供了PowerPC和高速系列收发器。先进的架构、功能特性和制造工艺的结合使得处理器时钟可以达到450MHz。再配合支持从600Mbps到11.1Gbps之间任何速度的高速串行收发器,FX系列成为功能极为强大的高性能平台FPGA系列,可满足嵌入式计算处理以及高速互联应用领域的要求
20、。FX平台集成的高级系统特性对于电信、存储和网络领域以及其它需要高性能处理和大带宽I/O的多种应用来说非常有用。嵌入式计算处理领域主要以涉及复杂数据类型的控制流操作为特征。连接应用领域则涉及基于消息的计算处理,并且主要以异步数据流操作为主。Virtex-4全功能平台器件最适合实现这两个领域中的应用。可配置的逻辑块(Configurable Logic Blocks,CLB)是实现顺序和组合电路的最主要的逻辑资源。每个CLB连接到开关矩阵(Switch Matrix)来访问一般的布线矩阵(routing matrix)。每个CLB单元包含4个互联的slice。这些slice成对地组合在一起。每一
21、对组成一列。SLICEM是指左列的slice对,而SLICEL则是右列的slice对。一列中的每一个slice对都有一个独立进位链;然而,只有在SLICEM中的slice才有一个公共的移位链。一个CLB包括的可用逻辑资源有:1)4个Slice;2)8个LUT;3)8个触发器;4)8个MULT_ANDS,5)2个算术和进位链;6)64比特的分布式RAM;7)64比特的移位寄存器。图2.8 Virtex-4内的CLB排列 两种slice对(SLICEM和SLICEL)共同有的单元是两个函数发生器(查表单元),两个存储单元,函数选择器,进位逻辑和算术运算逻辑。SLICEM和SLICEL使用这些单元来
22、提供逻辑功能、算术运算功能和ROM功能。SLICEM还包括两个附加功能:使用分布式RAM存贮数据以及16位寄存器移位数据。SLICEM拥有slice中最多的单元模块和模块之间的连接关系,因此可以说 SLICEM是一个“超集”。Virtex-4的FPGA函数发生器作为4输入的LUT来实现。对于一个Slice内两个函数发生器(F和G),每个函数发生器都有4个独立的输入。函数发生器能实现任意定义的4输入布尔函数。贯穿LUT的传播延迟与所实现的函数无关。来自函数发生器的信号能离开slice(通过X或Y输出),进入XOR专用门,进入进位逻辑复用器选择线,输入到存储元件的D输入端,或者到MUXF5。v 除
23、了基本的LUTs,Virtex-4 FPGA的Slice也包含复用器(MUXF5和MUXFX)。这些复用器用来连接最多8个函数发生器,用来提供在CLB内的5,6,7,8输入的任意功能。MUXFX是MUXF6,MUXF7,MUXF8中的一个,这是根据CLB内的Slice的位置确定。MUXFX也能被用来映射6,7,8输入的任意功能,并且可以选择宽的逻辑功能。功能和最多9个输入(MUXF5复用器)能在一个Slice内实现。宽功能复用器在同一个CLB内有效的连接LUTs,或者穿过不同的CLB来产生更多输入变量的逻辑。Virtex-4的每个BRAM可存储18Kb的数据,数据读出的时钟频率为500MHz。
24、Virtex-4系列最小规模的FPGA器件包含48个BRAM;Virtex-4系列最大规模的FPGA器件具有552个BRAM。临近的BRAM可以通过级联布线而不需要外部布线来合并成32kx1的存储器。最大规模的器件上可获得高达10MB的存储器。该存储器模块具有许多高级特性,包括高性能的流水线和多速率先入先出(FIFO)支持。该存储器模块的架构也可作为双端口RAM,而且双端口RAM读写字宽可独立选择。该18Kb模块也可以按用户的字长要求以不同的方式配置,从16kx1到512x36不等。当然,以特定的实现方式满足BRAM的需求是器件自身的一种功能。设计人员可以根据DSP模块需求,或是存储器需求选择
25、Virtex-4系列中的器件。表2.3给出了Virtex-4LX系列器件中最小规模和最大规模器件的逻辑资源比较:特性特性 XC4VLX15 XC4VLX200 阵列大小(行阵列大小(行x列)列)64x24 192x116 Slice 6144 89088 LUT数量数量 12288 178176 触发器数量触发器数量 12288 178176 最大分布式最大分布式RAM 96Kb 1392Kb XtremeDSP Slice 32 96 18Kb BRAM数量数量 48 288 DCM的数量的数量 4 12 1LX15的阵列规模为64x24=1536,而LX200的规模为192x116=222
26、72,因此LX200的阵列规模和逻辑单元是LX15的大约22272/1536=14.5(200448/13824=14.5)。2比较拥有的DSP48 slice的数目,LX200是LX15的7倍(336/48)。1一个CLB逻辑模块具有4个slice,1CLB=4 slice 2 1个slice包括2个LUT,2个触发器以及算术逻辑,1 slice=2x16位LUT+2触发器+算术逻辑/Mux。因为LX15器件的阵列为64x24=1536CLB,每个CLB具有4个slice,则总共有1536x4=6144个slice;3每个slice具有2x16位的LUT,总的分布式RAM的容量为16x614
27、4=98304=96x1024=96kbits(只有SLICEM的LUT可被用作分布式RAM)。因为LX15具有6144个slice,因此有6144x2位=12288个触发器;由于LX15具有48个18位的BRAM,故全部BRAM有48x18=864kbits DSP48 slice是Virtex-4器件上的Xtreme DSP部件。DSP48 slice 是一种Xilinx开发模型,该模型是ASMBL的一部分。ASMBL被预先设计为具有通用性、易于使用、高效以及优化的性能。提供DSP48的目的是提供一个“立即可用”的DSP 单元,该单元集合了逻辑电路、存储器、输入/输出、时钟接口和管理。每个
28、XtremeDSP单元都包括两个DSP48 slice,构成了一种通用的DSP计算元件。如图2.9,DSP48 slice可执行一个18x18位的乘法以产生一个36位的乘积,该乘积在一个48位累加器中实现了累加。(这就是用“48”命名DSP单元的原因)。图图2.9 DSP48 Slice的内部结构的内部结构 就图2.9,需要说明以下几点:118比特的A总线和B总线并置在一起,A总线是最高有效位 2X,Y,Z复用器是48位宽度的,选择36比特的输入提供了48比特的带符号位扩展的输出 3乘法器输出两个36比特的部分积,有符号扩展到48比特。部分积输入到X,Y复用器。当OPMODE选择复用器时,使用
29、X和Y复用器,并且将部分积合成一个有效的乘法器结果与加法器/减法器连接。4用于P的乘-累加通路要经过Z复用器。当布使用乘法器时,通过X复用器的P的反馈使能P级联的累加。5Wire Shift Right by 17 bit通路截断低17位,并且有符号扩展高17位。6在配制器件,用灰色表示的复用器被编程。7共享的C寄存器支持乘加,宽加法或舍入操作。8使能SUBTRACT,在加法器/减法器的输出实现X-(X+Y+CIN)。DSP48的一个主要属性为易于互连(一个DSP slice连接着下一个DSP slice),无需外部结构的布线。大部分DSP都使用一般意义上的乘加,而在目前的FPGA设计中,大部
30、分DSP实际上使用FIR滤波器执行乘加。经典FIR滤波器算法是DSP48所要实现的主要算法。输入信号可以从一个slice级联到另一个slice,因此很容易实现转置FIR滤波器。v图2.10给出了DSP48 Slice的符号描述。图图2.10 DSP48 Slice接口符号接口符号 DSP48 Slice可以完成的基本算术功能有:加/减运算,累加运算,乘累加运算,复用运算,桶型移位运算,计数器运算,除法运算,均方根运算,平方和均方根运算。1加/减运算 DSP48 Slice在加法器/加法器模式下的输出可以用式2.1表示:Output=Z(X+Y+CIN)(2.1)其中OPMODE设置Z,Y,X复
31、用器。表2.5给出了OPMODE设置和Z,Y,X复用器的关系表2.5 OPMODE设置和Z,Y,X复用器的关系 2累加运算 DSP48 slice能实现加和累加功能(最大36比特输入)。累加运算可以用式2.2表示:Output=Output+A:B+C (2.2)A或B输入来自复用器X,OPMODE1:0=11 3乘累加运算 DSP48 Slice允许两个18比特的数一起相乘,产生的积和前面产生的积相加或相减。输入的被加/被减的积来自Z复用器的输出。4复用运算 在DSP48 Slice中有三个类型的复用器:3:1的Y复用器;4:1的X复用器;6:1的Z复用器。当Slice用于复用器时,只有一个
32、复用器被激活。5桶型移位运算 使用两个DSP48单元就可以实现一个18比特的桶型移位器。进行桶型移位18比特的数,A17:0向左移动两位,从桶型移位寄存器的输出是A15:0,A17,A16。下面给出其操作步骤:1)第一个DSP48 Slice用来将0,A17:1乘22。DSP48的输出为0,A17:1,0,0。2)这个值与来自前面Slice的17比特的右移的值0,A17,A16相加。3)18比特加法器的输出为A15:0,A17,A16。通过以上的步骤A17:0就向左桶型移位2比特。6计数器运算 DSP48 Slice能用作1比特的计数器。将SUBTRACT=0,CIN=1,OPMODE6:0=
33、0100000,则输出为P+CIN,第一个时钟后,P=0+1=1,随后的输出是P+1,这就等效于加1计数。当SUBTRACT=1,则为减1计数器。计数器可以使用C输入作为预制的值。设置进位输入CIN=1和OPMODE6:0=0110000,则第一个周期为P=C+1,随后的时钟周期设置OPMODE6:0=0100000,来选择P=P+1。7乘法运算 一个单独的DSP48 Slice能实现一个18x18有符号乘法。通过在每个时钟周期移动合理的比特位,这样在一个DSP48 Slice内能实现更大的乘法器。8除法运算 在DSP48 Slice内通过移位和减法运算可以实现二进制的除法运算。DSP48 S
34、lice包括移位寄存器,乘法器和加法器/减法器单元,因此能够实现除法运算。算法假设:ND,并且N和D均为正数。如果N或D为负数,则使用正整数除法,然后加上符号位。这里的N为被除数,D为除数。Q和R分别为商和余数。下面给出移位相减实现除法运算的算法描述:如果N是8比特整数,D不超过8比特宽,N/D=Q+R 1)R=”00000000”2)R寄存器左移一位,并且用N8-n填充最低位 3)计算R-D 4)设置R和Q。如果R-D0,Q8-n=1,R=R-D;否则,Q0=0,R=R 5)重复步骤2-4,每一次用N8-n填充Rn,n为迭代次数。当迭代8次后,Q7:0保留商,R7:0保存余数。下面给出一种利
35、用相乘实现除法运算的算法描述:N/D=Q+R,所以N=D*(Q+R),其中N和D均为8比特数。1)设置Q8-n的初始值为1,其它位为0;2)计算D*Q;3)计算N-(D*Q)。如果N(D*Q),Q8-n=1,否则Q8-n=0;4)重复步骤1-3,当迭代8次后,Q7:0保留商,R7:0保存余数。v 9开方运算 整数的开方运算可以通过连续的乘和减法运算来实、现。这和利用减法完成两个数相除类似。N比特整数的均方根为N/2比特(截断)。如果均方根是分数,需要N/2个时钟周期用于整数部分,每一个时钟给出1比特的小数部分。图2.11给出了开方算法的描述。图图2.11 均方根算法的原理均方根算法的原理 8位
36、整数的开方运算可以用式2.3描述:(2.3)其中Y为开方运算的整数部分,Z为开方运算的小数部分。寄存器A为输入到DSP48 Slice的A输入。寄存器C为输入到DSP48 Slice的C输入。下面给出算法的描述:1)将数读入寄存器C。将寄存器A设置为“10000000”;2)计算C-(A*A);3)如果C-(A*A)0,A(8-clock)=1,A(8-clock)-1=1;否则A(8-clock)=0,A(8-clock)-1=1;4)重复步骤1-3。四个周期后得到Y,计算Z所需要的时钟周期取决于所要求的精度。8个时钟周期得到4比特的Y和4比特的Z。比如11的开方值为3.3166。11的8比
37、特描述为0000,1011。存储值为0000,1011,0000,0000。寄存器A的输出为0011,0101。最终的结果为11.0101。10平方和均方根运算 在DSP函数中经常使用到平方和。平方和运算可以使用基本的乘-累加运算实现。一个DSP48 Tile由两个DSP48 slice、共用的48位C总线和寄存器组成。其特点包括:1)在一个DSP48列中,DSP48 slice是垂直堆叠的。2)DSP48 slice的高度与4个CLB(16个slice)或是一个BRAM的高度相同。这种规则性的结构有利于宽数据通路的布线安排。如图2.12,在Virtex II器件中,18x18乘法器和RAM共
38、用互连线资源。但是在Virtex-4中,BRAM和DSP48 Tile具有各自独立的布线。图2.12 Virtex-II和Virtex-4的布线资源 DSP48算术运算单元可按设定的适当操作模式工作。如图2.13所示,并生成一个转置FIR滤波器。该图表示了一个4个系数的滤波器。如果需要更多的系数,则需要添加更多的DSP48 slice。图图2.13 并行转置并行转置FIR滤波器滤波器 该并行转置FIR滤波器的特点有:1)所有的乘法器和加法器的输入,以及输出端均具有寄存器,所以时钟频率可达到最大的500MHz。2)由于寄存器的延迟,从第一个数据输入算起,到最后一个加法器和乘法器的输出,该滤波器将
39、具有3个时钟的系统延迟。3)该滤波器的实现无需任何外部逻辑,仅由 DSP48模块组成。但其缺点是,当滤波器系数个数很大时,对输入信号的扇出能力有较高的要求。如图2.14,通过设定适当的操作模式,一个脉动FIR滤波器也可以使用DSP48 slice 来实现。该滤波器的特点有:1)该架构可以达到DSP48FIR滤波器的最高性能。对于输入信号线没有扇出要求。2)该滤波器无需外部逻辑便可被实现。3)然而,脉动特性意味着,一个N个系数的脉动FIR滤波器具有长度为N的系统延迟。图2.14 脉动滤波器的结构 上面的脉动滤波器同样可以利用FIR滤波器的系数对称性来获得线性相位。如图2.15所示,给出了对于一个
40、系数为h0,h1,h2,h3,h3,h2,h1,h0的8个系数的对称滤波器结构。图2.15 对称脉动滤波器的结构 MACC或MAC(乘-累加)FIR滤波器可产生N个系数的FIR滤波器,这种滤波器使用一个乘法器并反复累加结果N次。对于Virtex-II器件,MACC FIR滤波器的实现使用了片上乘法器、BRAM存储数据与滤波器系数,以及累加的逻辑结构。如图2.16所示,对于Virtex-4器件,DSP48使用BRAM来实现MACC FIR滤波器。图中,BRAM被用来保存数据和系数。如果系数个数不多,可以使用逻辑结构存储系数。图2.16 MACC滤波器的结构 在最后一次加法被执行之后,48位累加值
41、被截短为上面结构中的18位。为了提供48位到18位的舍入,需要增加一个额外的时钟周期以便在最后一次加法中实现舍入(由于舍入需要一个额外的加法)。舍入模式如图2.17所示。图2.17 带舍入功能的 MACC FIR 滤波器的结构 由于四舍五入的需要,滤波器需要N+1次迭代。DSP48 slice 内置的舍入功能保证了滤波器的性能并且最小化了FPGA逻辑结构的使用。DSP48 slice中舍入是使用C输入端口和进位端口实现的。舍入可通过下列方式获得:1)对于正数:二进制数值+0.10000,然后截断 2)对于负数:二进制数值+0.01111.,然后截断 也可以在不需要额外时钟的情况下通过把一个常数
42、加到第一个内部乘积中来实现舍入。在通常情况下,这样的操作是可行的。但在有些情况下会产生错误的结果。本来结果为正,但最后一个内部乘积可能引起结果变负。如果滤波器的系数对称,则需要添加一个额外的加法器来满足该对称滤波器的预加的需求。由于该额外的加法器被添加到关键路径中,因此可能的最大时钟速率将降低。对于上述结构,一个顾虑是,如果预加的两个输入数据均为18位,则结果可能发生溢出。因此为了确保该情况不会出现,设计者需要确认数值不超过17位。图2.18 对称MAC 滤波器结构 用来提高MACC FIR滤波器数据吞吐量的技术是增加用于处理数据的乘法器的数量。这就将并行度引入到DSP设计中,能被推测出完整的
43、并行技术来支持最高的采样率。图2.19和图2.20所示,双乘法器MACC FIR滤波器能通过两个DSP Slice实现。图2.19所示,两个MACC引擎中的每个MACC的系数被累加。这些部分结果必须连到一起,然后被截断来实现最后的结果。如图2.20,这个过程使用一个额外的周期和DSP48 Slice的OPMODE。图2.19 两个乘法器的MACC FIR滤波器结构图2.20 需要额外周期的两个乘法器的MACC FIR滤波器结构 Virtex-5 FPGA基于65纳米的三栅极氧化层技术,使用先进的硅组合模块(ASMBL)架构并且实现了更高级别的系统集成。这个全新的产品系列提供了一个高级平台,可以
44、满足设计者对于建造具有更高性能、更高密度、更低功耗和更低成本的可编程系统日益增长的需求。为以下四个新平台创造了最佳条件:1)针对高性能逻辑进行优化的LX平台;2)针对具有低功耗串行I/O的高性能逻辑进行优化的LXT平台 3)针对具有低功耗串行I/O的高性能算术和存储密集型DSP进行优化的SXT平台 4)针对嵌入式处理和超高速串行I/O进行优化的FXT平台 相对于Virtex-4 系列,Virtex-5 系列中配置最高的型号的平均速度提高了30%,容量提高了65%,动态功耗降低了35%,芯片面积缩小了45%,结果实现了达到每项功能的最低成本。ExpressFabric技术实现了逻辑和局部互连布线
45、。它将查找表(LUT)、六个独立的输入和一个新的对角互连结构结合在一起。相对于Virtex-4架构而言,ExpressFabric技术利用更少的LUT层次以及更少的串行连接(面向相邻构件)实现了组合逻辑。这种方法缩短了数据通路延迟,从而提高了设计性能。这种新的对角对称互连模式通过在更少的布线跳接中获得更多的空间来提高性能。使用Virtex-5FPGA 使该模式更加对称,同时利用更少的跳接到达了更多的CLB。凭借布局布线软件工具,这种对称性可以取得更好的结果。这些特性对于Virtex-5 FPGA的设计来说是完全透明的,并且能够被ISE软件工具自动执行,从而带来更加简单的可布线性和更好的总体性能
46、。多年以来,四输入LUT一直是业界标准。但是,在65纳米工艺条件下,相较于其它电路(特别是互连电路),LUT的常规结构大大缩小。一个具有四倍比特位的六输入LUT(6-LUT)仅仅将CLB 面积提高了15%,但是平均而言,每个LUT上可集成的逻辑数量却增加了40%。更高的逻辑密度通常可以降低级联LUT的数目,并且改进关键路径延迟性能。Virtex-5FPGA提供了真正的6-LUT,可以将它用作逻辑或者分布式存储器,这时LUT是一个64位的分布式RAM(甚至双端口或者四端口)或者一个32位可编程移位寄存器。每个LUT具有两个输出,从而实现了五个变量的两个逻辑函数,存储32x2RAM比特,或者作为1
47、6x2比特的移位寄存器。CLB是用来实现顺序和组合逻辑电路的主要逻辑资源。如图2.21,每个CLB与开关矩阵(Switch Matrix)连接。每个CLB包含一个Slice对。这两个Slice之间并没有直接连接在一起,每个Slice按列组织。列中的每个Slice有一个独立的进位链。对于每一个CLB,在CLB底部的Slice被标记为SLICE(0),在CLB顶部的Slice被标记为Slice(1)。图图2.21 CLB内的内的Slice的布局的布局 Xilinx的设计工具使用下面的定义来标记Slice。“X”加一个数字表示对内的每个Slice在列中的位置。“X”后的数字从底部开始以0,1计数(第
48、一个CLB列),2,3(第二个CLB列);等;“Y”加一个数字表示对内的每个Slice在行中的位置。在CLB内的Y后的数字是保持一样的,但是从一个CLB列到另一个CLB列以顺序方式递增(从底部开始)。图2.22给出了CLB和Slice的行和列的关系。一个CLB包括的可用逻辑资源有:1)2个Slice;2)8个LUT;3)8个触发器;4)2个算术和进位链;5)256比特的分布式RAM;6)128比特的移位寄存器。图图2.22 CLB和和Slice的行和列的关系的行和列的关系 每个Slice包括四个逻辑函数发生器(或者LUT),四个存储元件,多功能的复用器和进位逻辑。这些元件被Slice用来提供逻
49、辑运算、算术运算和ROM功能。此外,一些Slice还支持两个额外的功能:使用分布式RAM存储数据和使用32位的寄存器对数据进行移位操作。支持这些额外功能的Slice称为SLICEM;其它Slice称为SLICEL。SLICEM表示元件的一个超集,在所有的Slice找到连接。在Virtex-5内的函数发生器是通过六输入的查找表实现的。每个函数发生器(LUT)有6个独立的输入(A输入-A1到A6)和两个独立的输出O5和O6。函数发生器能实现任意定义的6输入的布尔函数。每个函数发生器也能实现两个任意定义的5输入的布尔函数(只要这两个函数共享输入)。1)当实现6输入的函数发生器时,只使用O6输入。2)
50、当实现5输入的函数发生器时,使用O5和O6输出,在这种情况下,A6被驱动为高电平。LUT的传播延迟独立于所实现的函数(不管是6输入实现还是5输入实现)。来自函数发生器的信号能离开slice(通过O6的A,B,C,D输出或者O5的AMUX,BMUX,CMUX,DMUX输出),进入到来自O6专用的异或门,进入到来自O5输出的进位逻辑链,进入到O6输出的进位逻辑复用器的选择线,或者到来自O6输出的F7MUX/F7BMUX。除了基本的LUT,Slice包含了三个复用器(F7AMUX,F7BMUX,F8CMUX)。这些复用器(多路选择器)用来连接最多4个函数发生器来提供任意7/8输入的函数功能。F7AM