从前面可知,本质上DSP所采用的是串行的处理方式,这种处理方式对数字信号的高性能处理产生了非常严重的瓶颈。在使用单核和多核DSP进行信号处理时:①当提高时钟速度的时候会提高采样率;②随着系数个数的增加,也就是算法复杂度增加的时候,采样率会显著降低。与采用单核DSP相比,采用双核DSP处理信号的性能并没有明显提高。此外,多核DSP的结构非常复杂(如图2.9所示),这对算法开发人员而言,也带来不小的难度。
图2.9 TI C6678多核DSP的内部结构
思考与练习2-1 :近年来,TI的DSP芯片采用多核DSP结构,其目的是什么?多核DSP的结构特点会导致什么不利的结果?
与前面所介绍的DSP相比,FPGA内包含了大量可通过编程连接的逻辑门。因此,FPGA 提供了具有可变字长的、灵活的、具有潜在并行处理能力的架构。此外,在近些年来所推出的FPGA中还集成了DSP切片(DSP48x)来执行通用的DSP算法。使用FPGA执行DSP可以满足特定的处理速度和性能要求,同时兼备了低成本和低功耗的特点。
查找表(Look-up Tables,LUT)是FPGA内实现逻辑功能的基本单元。不同输入下所需要的LUT的资源如表2.2所示。查找表主要完成的功能如下所示。
(1)执行一个输入的组合功能(无反馈)。
(2)无论输入多么复杂,一个4输入/6输入LUT总会执行输入数小于或等于4或6的函数功能。
(3)地址输入选择存储单元中的逻辑函数。
(4)LUT的复杂度与输入端口的个数有关。输入端口越多,LUT的复杂度越高。
表2.2 不同输入下所需要的LUT资源
虽然LUT是FPGA器件内实现组合逻辑功能的基本单元,但是通过综合过程,设计者实际上并不需要知道逻辑功能具体实现的过程。但是对LUT结构的理解非常重要,这是因为LUT允许在FPGA 中实现逻辑函数。LUT实际上就是静态随机存取存储器(SRAM),它通过将n个输入的2 n 个逻辑函数存储起来以实现LUT功能。在这种形式中,SRAM的地址线被当作输入,而其输出提供了逻辑函数的值。
对于下面的一个逻辑表达式而言,有4个逻辑输入(A、B、C和D)和1个逻辑输出(Z):
使用Verilog HDL语言描述它,如代码清单2-1所示。
代码清单2-1 top.v文件
注 :读者可以定位到本书提供资料的\fpga_dsp_example\four_input_logic\Project1\目录下,用Vivado 2017.2打开project_1。
没有化简前的逻辑结构如图2.10所示。很明显,传统数字逻辑使用逻辑与门、或门、非门实现逻辑表达式所要呈现的功能。
图2.10 逻辑表达式的等效逻辑门组合
使用Vivado工具对该设计综合后的逻辑结构如图2.11所示。从图2.11中可知,在FPGA内使用LUT来实现逻辑表达式所要呈现的功能。这种使用LUT实现组合逻辑功能的方法解决了传统实现方法所带来的实现复杂度和逻辑传输延迟不能确定的缺点,显著提高了逻辑功能的实现性能,其查找表的内部实现结构如图2.12所示。
图2.11 使用Vivado工具综合后的逻辑结构
图2.12 使用LUT实现逻辑表达式的功能
思考与练习2-2 :请说明采用LUT实现逻辑功能的原理,并说明与传统使用逻辑门实现逻辑功能的优势。
思考与练习2-3 :读者知道使用C语言的按位逻辑运算也可以实现上述的逻辑功能,但是与使用底层硬件逻辑相比,两者的本质区别是什么?
SRAM单元中存储器的每个位都是一个D锁存器。SRAM单元按阵列构成并与控制逻辑结合在一起,构成一个完整的存储器件。除了专用的多路复用器以外,LUT也可配置为一个多用复用器。Xilinx Artix-7系列FP GA内6输入查找表的结构如图2.13所示。6输入查找表可以看作带有公共输入的两个5输入查找表:①它可以有一个或者两个输出;②可以实现6个逻辑变量的任何函数,或者两个5变量的相互独立的任何函数。
图2.13 6输入查找表
Xilinx Artix-7系列FPGA的内部结构如图2.14所示。所有的FPGA都包含下面几个相同的基本资源。
图2.14 Xilinx Artix-7系列FPGA的内部结构
(1)由Slice(切片)构成的可配置逻辑块(Configurable Logic Block,CLB)。CLB中提供组合逻辑和寄存器资源。
(2)I/O接口。它是FPGA和片外设备连接的接口。
(3)可编程的互连线资源。
(4)其他资源,包括存储器、乘法器、全局时钟缓冲区和边界扫描逻辑等。
1.可配置逻辑块 ( CLB )
CLB是FPGA内最基本的逻辑设计资源,其内部结构如图2.15所示。从图2.15中可知,每个CLB内包含2个切片(Slice)。两个切片之间并没有直接进行连接,而是通过旁边的开关阵列(Switch Matrix)连接。并且,通过开关还可以与FPGA内其他CLB内的切片进行连接。在每个CLB内,快速进位链穿过所有的切片。
图2.15 CLB的内部结构
1 ) 切片
为了在功耗、成本和性能之间进行权衡,CLB内提供了两种不同类型的切片(Slice),如图2.16所示。
图2.16 CLB的Slice的类型
(1) Slice_M (M是Memory的缩写) 称为全功能切片,这是因为:
① 其内部的LUT可以用于逻辑和存储器/SRL。
② 有较宽的多路复用开关和进位链。
(2) Slice_L只能用于逻辑和算术,除了不能用于存储器/SRL外,其他功能和Slice_M相同。
Slice_M内部的完整结构如图2.17所示。从图2.17中可知,一个Slice_M内部的所有资源包括:①4个6 输入的 LUT;②多路复用器;③进位链;④SRL;⑤8 个触发器/锁存器。
图2.17 Slice_M的内部结构
6输入的LUT可以作为两个带有公共端的5输入LUT,产生1/2个输出,因而可以实现6变量的任何组合函数或者5变量的两个函数,如图2.18所示。
图2.18 6输入LUT用作5输入LUT的组合
2 ) 多路复用器
在每个切片内部,含有不同功能的多路复用器,如图2.19所示。不同多路复用器的作用包括:
(1)每个F7MUX可以将两个LUT的输出组合在一起,其实现的功能包括:①能实现一个任意7输入函数;②能实现一个8∶1的多路复用器。
图2.19 切片内的多路复用器
(2)每个F8MUX可以组合为两个F7MUX的输出,其实现的功能包括:①能实现一个任意8输入函数;②能实现一个16∶1的路复用器。
(3)多路选择器由BX/CX/DX切片输入控制。
(4)多路选择器可以用于驱动触发器/锁存器。
3 ) 进位链
切片内的进位链用于实现快速的加法运算和减法运算,如图2.20所示。进位输出垂直通过一个切片的4个LUT。进位链从一个切片的输出连接到一个CLB上面相同列的切片,并且使用超前进位链结构。
图2.20 Slice内的进位链
4 ) 切片触发器和触发器/锁存器
切片内部触发器/锁存器的结构如图2.21所示。
图2.21 切片内部触发器/锁存器的结构
(1)每个切片有4个触发器/锁存器(FF/L),它们可以配置为触发器或锁存器。D输入可以来自于O6 LUT输出、进位链、宽的多路复用器或者AX/BX/CX/DX的切片输入。
(2)每个切片有4个触发器(FF)。D输入可以来自O5输出或者AX/BX/CX/DX的输入,它不能访问进位链、宽的多路选择器或者切片的输入。
注 :如果任何一个FF/L被配置为锁存器,则4个FF则不可使用。
切片触发器的符号如图2.22所示,主要特点包括:
(1)都是D类型的触发器,带有Q输出。
(2)所有触发器都有一个时钟输入(CK),可以在切片的边界将时钟反相。
(3)所有触发器都有一个高有效的芯片使能信号CE。
图2.22 切片触发器的符号
(4)所有触发器都有一个高有效的置位复位输入信号SR。
① 该输入可以是同步的或者异步的,它由相应的配置位决定。
② 将触发器的值设为预置的状态,它由相应的配置位决定。
切片内触发器/锁存器的控制集如图2.23所示。
图2.23 切片内触发器/锁存器的控制集
(1)所有的触发器和触发器/锁存器共享相同的CLK、SR和CE信号。
① 这些信号称为触发器的控制信号集。
② CE和SR信号均为高有效。
③ 在切片边界可以对CK信号反相。
(2)如果任何一个触发器使用了CE,则所有其他触发器也必须使用相同的CE。
① 在切片的边界,CE得到时钟;
② 降低功耗。
(3)如果任何一个触发器使用了SR,则所有其他触发器也必须使用相同的SR。每个触发器使用的复位值,由SRVAL属性设置。
5 ) 分布式存储器结构
对于Slice_M而言,内部的触发器/锁存器元件可以用于保存逻辑信息,称为分布式存储器结构。
① 使用相同的存储结构,用于LUT功能。
② 使用同步写和异步读方式,可以通过使用切片内的触发器将其转换为同步读取方式。
分布式存储器的不同配置模式如表2.3所示。
表2.3 分布式存储器的不同配置模式
分布式存储器可以配置成:
(1)单端口(Single Port,SP)模式。在该模式下,一个6端口LUT可以配置成64×1或者32×2比特容量的RAM,并且可以级联配置成最多256×1比特的RAM。
(2)双端口(Dual Port,DP)模式。在该模式下,可以配置成1个读/写端口和一个只读端口。
(3)简单双端口(Simple Dual Port,SDP)模式。在该模式下,分布式存储器可以配置为1个只写端口和一个只读端口。
(4)四端口Slice_M(Quad Port,QP)模式。在该模式下,可以配置为一个读/写端口和3个只读端口。
6 ) Slice_M配置成SRL
Slice_M可以用作32位的移位寄存器,即移位寄存器LUT(Shift Register LUT,SRL),如图2.24所示。它可实现的功能包括:①可变长度的移位寄存器;②同步FIFO;③内容可寻址存储器(Content Addressable Memory,CAM);④模式生成器;⑤补偿延迟/时延。
图2.24 LUT配置为SRL
对于由LUT构成的移位寄存器而言,其长度由地址决定。常数值给出了固定的延迟线,而动态寻址用于弹性缓冲区。在一个切片中,可以级联实现最多128×1的移位寄存器。
使用LUT并将其配置为移位寄存器。对于SRL16而言,最多可以实现16个延迟;对于SRL32而言,最多可以实现32个延迟。
使用Verilog HDL语言描述一个16位的移位寄存器,如代码清单2-2所示。
代码清单2-2 top.v文件
注 :读者可以定位到本书提供资料的\fpga_dsp_example\SRL\P roject1\目录下,用Vivado 2017.2打开project_1.xpr工程。
使用Vivado 2017.2对该设计执行综合后的结果如图2.25所示。从图2.25中可知,与使用触发器实现16位移位寄存器相比,成本明显降低。
注 :(1)对于SRL16而言,一个LUT等效于16个触发器;对于SRL32而言,一个LUT等效于32个触发器。
(2)使用SRL唯一的限制是,不能对寄存器内的每个元素进行单独复位操作。
图2.25 使用SRL实现移位寄存器的功能
SRL16E的内部结构如图2.26所示。从该结构可知,它可以实现可变长度的移位寄存器。在图2.25给出的结构中,SRL16E的输入A3A2A1A0等于1101,则读取从第14个寄存器的输出。
注 :(1)第14个寄存器的索引为1101,索引从0000开始。
(2)从图2.25可知,SRL16E后的FDRE可以额外增加一个延迟。
图2.26 SRL16E的内部结构
思考与练习2-4 :前面介绍移位寄存器(触发器)可以实现延迟的功能,读者可以给出用软件(比如C语言)模拟硬件延迟的实现方法,并说明这两种实现方法的本质区别。
2.I/O块
目前,I/O接口面临的挑战主要有:
(1)保证信号完整性的高速操作。
① 源同步操作(时钟前向);
② 系统同步操作(公共的系统时钟);
③ 端接传输线,以避免信号反射。
(2)在宽的并行总线上驱动和接收数据。
① 补偿总线抖动和时钟时序误差;
② 在串行和并行数据之间进行转换;
③ 达到非常高的比特速率(大于1Gbps)。
(3)单数据率(Single Data Rate,SDR)或者双数据率(Double Data Rate,DDR)接口。
(4)与不同电气标准的设备连接,它们的电压不同,驱动强度和协议不同。
1 ) I/O接口的内部结构
对于Xilinx 7系列的FPGA而言,I/O接口的内部结构如图2.27所示,其特性主要包括:
图2.27 Xilinx 7系列FPGA中I/O接口的内部结构
(1)宽电压操作范围,即1.2~3.3V之间。
(2)支持宽范围的I/O标准,即单端和差分、参考电压输入、三态能力。
(3)提供了高性能,即对于LVDS而言,最高速率可以达到1600Mbps;对于DDR3而言,单端最高速率可以达到1866Mbps。
(4)提供了与存储器的接口,硬件支持QDRII和DDR3存储器。
(5)提供了数字控制阻抗的能力(Digitally Controlled Impedance,DCI)。
(6)提供了降低功耗的特性。
2 ) I/O接口的类型
Xilinx 7系列的FPGA内提供了两种不同类型的I/O接口,如表2.4所示,包括:
(1)宽范围(High Range,HR)。这种I/O接口的供电电压(V cco )最高可以达到3.3V。
(2)高性能(High Performance,HP)。这种I/O接口提供了最高性能以及ODELAY和DCI能力,其供电电压(V cco )最高只能达到1.8V。
表2.4 Xilinx 7系列的FPGA对不同类型的I/O接口的支持
3 ) I/O接口的电气资源
对于Xilinx 7系列的FPGA而言,I/O接口的电气资源如图2.28所示,包括:
图2.28 Xilinx 7系列FPGA中I/O接口的电气资源
(1)P引脚和N引脚可以单独配置为单端信号或者差分对。
(2)接收器可以作为标准的CMOS或者电压比较器。
① 作为标准的CMOS。当接近地时,为逻辑0(低电平);当接近V cco 时,为逻辑1(高电平)。
② 作为参考的V REF 。当低于V REF 时,为逻辑0(低电平);当高于V REF 时,为逻辑1(高电平)。
③ 作为差分。当V P <V N 时,为逻辑0(低电平);当V P >V N 时,为逻辑1(高电平)。
注 :V P 为P引脚的电压,V N 为N引脚的电压。
4 ) I/O接口的逻辑资源
对于Xilinx 7系列的FPGA而言,I/O接口的逻辑资源参见图2.27,包含:
(1)两个I/O对有两个块,即主(Master)和从(Slave),它们可以独立操作或者连起来使用。
(2)每个块包含:①ILOGIC/ISERDES,实现SDR、DDR或者高速串行输入逻辑;②OLOGIC/OSERDES,实现SDR、DDR或者高速串行输出逻辑;③IDELAY,可选择的细粒度输入延迟;④ODELAY,可选择的细粒度输出延迟,只可用于HP类型的I/O接口。
下面具体讲解每块的内容。
(1)ILOGIC。ILOGIC实现输入SDR和DDR逻辑,其内部逻辑如图2.29所示。在Xilinx 7系列的FPGA内,提供了两种类型的ILOGIC块,即:ILOG IC2,用于高性能组;ILOGIC3,用于HR组(提供了零保持延迟的能力)。ILOGIC的输入来自输入接收器(直接地或者间接地通过IDELAY块)。ILOGIC的输出驱动FPGA内的逻辑资源和布线资源,即直接地(没有时序逻辑)或通过IDDR(在SDR模式下使用时钟的上升/下降沿)在DDR模式下使用时钟的所有边沿。
图2.29 ILOGIC的内部逻辑
(2)OLOGIC。OLOGIC的内部逻辑如图2.30所示。OLOGIC块也有两种类型,其中OLOGIC2用于HP组,OLOGIC3用于HR组。OLOGIC的输出直接连接到输出驱动器或者连接到ODELAY单元上(只有HP组可用)。来自FPGA内部的逻辑单元和布线资源可以直接驱动它,直接通过一个SDR触发器或者使用双沿的ODDR。从图2.30中可知,每个OLOGIC块包含两个ODDR,一个用于将所控制的数据送到输出驱动器,一个用于控制三态使能。
图2.30 OLOGIC的内部逻辑
注 :所有的ODDR均有相同的时钟和复位驱动。
(3)ISERDES。ISERDES用于将输入串行数据转换为并行数据,其内部结构如图2.31所示。输入到D端的数据由高速时钟(CLK)确定时序,可以是SDR或者DDR。ISERDES将接收到的高速串行数据解串行,然后送到FPGA的内部逻辑,并且Q端输出的数据由低速时钟(CLKDIV)确定时序。
图2.31 ISERDES的内部结构
注 :CLK和CLKDIV必须同相位。
对于解串行后的数据而言:
① 单数据率模式时,数据宽度为2、3、4、5、6、7或者8。
② 双数据率模式时,数据宽度为4、6或8。
当将它们级联在一起时,可以得到更宽的数据宽度。在双数据率模式时,数据宽度可以达到10或者14。此外,提供了BITSLIP逻辑用于将并行数据成帧。
(4)OSERDES。OSERDES用于把将要输出的数据串行化,送到引脚或者ODELAY单元,其内部结构如图2.32所示。输出到Q端的数据由高速时钟(CLK)确定时序,可以是SDR或者DDR。送到D端的并行数据来自FPGA内的逻辑资源,并且D端输入的数据由低速时钟(CLKDIV)确定时序。
图2.32 OSERDES的内部结构
注 :CLK和CLKDIV必须同相位。
对于需要串行化的数据而言:
① 单数据率模式时,数据宽度为2、3、4、5、6、7或者8。
② 双数据率模式时,数据宽度为4、6或8。
当将它们级联在一起时,可以得到更宽的数据宽度。在双数据率模式时,数据宽度可以达到10或者14。此外,当使用三态串行化器时,所有数据和三态宽度必须是4。
(5)IDELAY和ODELAY。在Xilinx 7系列的FPGA内,提供了独立的IDELAY和ODELAY延迟线。对于IDELAY而言,HP和HR组均提供该单元;对于ODELAY而言,只有HP组提供该单元。
通过IDELAY单元,可以对延迟线元件进行标定。对于IDELAY和ODELAY而言,它们的能力几乎相同,可以通过FPGA内的逻辑访问IDELAY。对于Xilinx 7系列所有速度等级的FPGA而言,参考时钟频率可以达到200MHz;对于最快速度等级的FPGA而言,参考时钟频率可以达到300MHz。
3.块存储器资源
在前面介绍了可以使用的分布式存储器资源。此外,在FPGA的内部还提供了专用的块存储资源(Block RAM,BRAM)和FIFO资源,如图2.33所示。对于Xilinx 7系列的FPGA而言,它们内部BRAM/FIFO的特性主要包括:
图2.33 FPGA内部的BRAM/FIFO 资源
(1)Xilinx所有7系列的FPGA都有相同的BRAM/FIFO。
(2)支持全同步操作,所有的操作都是同步的,所有的输出都被锁存。
(3)内部提供可选的流水线寄存器,用于更高频率下的读写操作。
(4)两个独立的端口用于访问数据,这两个端口有各自独立的地址、时钟、写使能和时钟使能信号,并且每个端口可以单独设置各自的数据宽度。
(5)提供多个配置选项,包括真正的双端口、简单的双端口和单端口模式。
(6)内部集成了级联的逻辑。
(7)在较宽数据的配置中,提供了字节写使能信号。
(8)集成了用于控制FIFO的逻辑,提高快速而高效的访问能力。
(9)集成了64/72位的海明码纠错码。
(10)为BRAM提供了单独的供电电源轨,用于保证BRAM的性能。
1 ) 配置为单端口模式
当BRAM配置为单端口模式时,其结构如图2.34所示。
图2.34 FPGA内部的BRAM/FIFO资源配置成单端口模式时的结构
这种配置的特性主要包括:
(1)单个的读/写端口,包括:①时钟CLKA;②地址ADDRA;③写使能WEA;④写数据DIA;⑤读数据DOA。
(2)36Kb配置:32Kb×1、16Kb×2、8Kb×4、4Kb×9、2Kb×18、1Kb×36。
(3)18Kb配置:16Kb×1、8Kb×2、4Kb×4、2Kb×9、1Kb×18、512b×36。
(4)可配置的写模式如下所示。
① WRITE_FIRST:写到DIA的数据可在DOA端口使用。
② READ_FIRST:在ADDRA位置上,RAM以前的内容出现在DOA端口。
③ NO_CHANGE:DOA保持它以前的值 (降低功耗)。
(5) 可选的寄存器用于最高的性能 (DOA_REG=1)。
2 ) 配置为双端口模式
当BRAM配置为双端口模式时,其结构如图2.35所示。这种配置的特性主要包括:
图2.35 FPGA内部的BRAM/FIFO资源配置成双端口模式时的结构
(1)两个独立的读/写端口。
① 每个端口都有独立的时钟、地址、数据输入、数据输出和写使能等。
注 :两个端口的时钟是异步的。
② 两个端口允许有不同的宽度。
③ 两个端口可以有不同的写模式。
(2) 当所有的端口访问相同的地址时,没有内容冲突,除非如果由相同的时钟驱动,写端口为READ_FIRST,则读端口将捕获到以前的数据。
3 ) 配置为简单双端口模式
当BRAM配置为简单双端口模式时,其结构如图2.36所示。
图2.36 FPGA内部的BRAM/FIFO资源配置成简单双端口模式时的结构
这种配置的特性主要包括:
(1)一个读端口和一个写端口,每个端口有独立的时钟和地址。
(2)在36Kb配置中,两个端口的其中一个必须是72位宽度,另一个端口可以是×1、×2、×4、×9、×18、×36或者×72。
(3)在18Kb配置中,两个端口的其中一个必须是36位宽度,另一个端口可以是×1、×2、×4、×9、×18或者×36。
此外,可以将BRAM级联,Xilinx 7系列的FPGA内建级联逻辑用于实现64Kb×1的存储器容量。它可以将两个垂直相邻的32Kb×1的BRAM级联在一起,而不需要使用额外的CLB。通过这种方式,显著节约了资源,提高了大容量BRAM的访问速度,如图2.37所示。
图2.37 将两个垂直的BRAM级联在一起
通过更多的级联选项,可以用于构成更大容量的存储器,如图2.38所示。例如,可以构成128Kb、256Kb、512Kb等容量的存储器。通过使用额外的CLB逻辑,实现深度扩展。注意,这种方式不如级联BRAM速度快。此外,通过使用并行的BRAM,可以实现宽度扩展。
图2.38 将8个BRAM级连在一起构建一个256Kb的存储器
在本节前面提到,在Xilinx 7系列的FPGA内部集成了先进先出的存储结构FIFO,其结构如图2.39所示,特性主要包括:
图2.39 Xilinx 7系列的FPGA内部集成的FIFO的内部结构
(1)同步或者异步的读/写时钟。
(2)提供了4个标志,即满、空、可编程的几乎满或空。
(3)可选的首字跌落(First Word Fall Through,FWFT)模式。
(4)FIFO的配置如下所示。
① 任意36Kb容量的BRAM:8Kb×4、4Kb×9、2Kb×18、1Kb×36、512b×72。
② 任意18Kb容量的BRAM:4Kb×4、2Kb×9、1Kb×18、512b×36。
③ 写和读的宽度必须相同。
注 :当使用512b×72宽度时,可以使用集成的纠错码。
4.数字信号处理阵列
在Xilinx 7系列的FPGA内部集成了大量的DSP48E1切片,如图2.40所示。每个DSP48E1切片的内部结构如图2.41所示。
图2.40 在Xilinx 7系列的FPGA内部集成的DSP48E1切片
图2.41 DSP48E1切片的内部结构
DSP48E1切片可实现的操作包括:①25×18的有符号乘法器;②48位加法器/减法器/累加器;③48位的逻辑操作;④用于高速运算的流水线寄存器;⑤模式检测器;⑥SIMD操作(12/24位);⑦用于更多功能的级联逻辑;⑧预加法器。
5.时钟管理
在Xilinx 7系列的FPGA内部时钟管理的特性包括:
(1)全局时钟缓冲区,提供了高扇出的时钟分配缓冲区。
(2)低抖动时钟分配,提供了区域时钟布线功能。
(3)时钟区域的面积为50个CLB的高度和跨度。
(4)时钟管理单元。
① 在每个时钟内,包含一个混合模式时钟管理器(Mixed-Mode Clock Managers,MMCM)和一个锁相环(Phase Locked Loop,PLL)。
② 实现频率合成、时钟抖动和滤除抖动的功能。
③ 高输入频率范围。
(5)通过Xilinx Vivado工具提供的IP核设计向导Clocking Wizard,使得读者很容易完成时钟设计。
1 ) 时钟使能输入
所有的同步设计至少需要一个外部时钟作为参考,显然需要将这些时钟引入FPGA内。在Xilinx 7系列的FPGA内部,每个I/O组都提供了时钟使能输入引脚,如图2.42所示。
图2.42 单时钟区域(器件的右侧)
(1)这些输入都是普通I/O引脚,有专用的布线资源将其连接到时钟资源。
(2)每个I/O组有4个时钟使能的引脚,包括:
① 两个多区域时钟使能(Multi-Region Clock Capable,MRCC)。
② 两个单区域时钟使能(Single-Region Clock Capable,SRCC)。
(3)每个时钟输入可以用作单端时钟输入,或者与相邻的引脚配对构成差分时钟输入。因此,每个组有4个单端或者4个差分输入时钟。
2 ) 时钟域
与前一代FPGA相比,Xilinx 7系列的FPGA提供了更大的时钟区域面积,如图2.43所示。其时钟域覆盖区域为:①50个CLB高度,50个I/O高度;②与I/O组有相同的大小;③半个器件的宽度;④2~24个区域(根据器件规模大小)。
图2.43 时钟域
在每个时钟域内的资源包括:
(1)12个全局时钟网络,它由BUFH驱动。
(2)4个区域时钟网络,它由BUFR驱动。
(3)4个时钟网络,它由BUFIO驱动。
3 ) 全局时钟缓冲区
Xilinx 7系列的FPGA的中心提供了BUFGCTRL或者BUFG。
(1)BUFGCTRL的符号如图2.44所示,其驱动源包括:
图2.44 BUFGCTRL的符号
① 在相同半个域内的时钟使能I/O(Clock Capable I/O,CCIO)。
② 在相同半个域内的时钟输出。
③ 在相同半个域内的吉比特收发时钟。
④ 其他BUFG,互连或者BUFR。
(2)BUFGCTRL的输出驱动垂直的全局时钟“主干”。
(3)BUFGCTRL元件实现包括:
① 简单的时钟缓冲区(BUFG)。
② 带有时钟切换 (BUFGMUX,或者BUFGMUX_CTRL) 的时钟缓冲区,其符号如图2.45所示。
图2.45 BUFGCE和BUFGMUX的符号
③ 带有时钟使能的时钟缓冲区(BUFGCE),其符号如图2.45(b)所示。
与传统的使用DSP、CPU或者GPU实现数字信号处理相比,FPGA在实现高性能数字信号处理方面有着不可比拟的巨大优势,主要表现在如下几个方面。
1.FPGA处理高运算量的负载
在FPGA和DSP内,都可以实现需要10个MAC的运算操作。可在DSP内以串行方式一个接一个地执行10个MAC,很明显该操作需要10个时钟周期;如果使用FPGA以全并行方式执行,则只需要1个时钟周期。实际上,可以根据实际性能要求,选择在5个时钟周期中执行10个MAC操作,或者使用2个时钟周期执行10个MAC操作;而使用DSP就不会如此灵活地根据需求修改执行周期。
这种灵活性是根据面积和速度成反比的关系来确定的,如图2.46所示。如果必须快速执行10次MAC操作,则FPGA可在1个时钟周期内全并行地执行它们;但是这样会消耗大量的芯片资源(面积)。如果允许以低速度执行10次MAC操作,则FPGA可以串行执行它们。这样,FPGA芯片内逻辑资源的使用量则可以减少为原来的1/10,但需要10个时钟周期来执行MAC操作。因此,在FPGA内实可根据需求和技术指标灵活确定实现数字信号处理的策略。
图2.46 FPGA信号处理的结构
2.FPGA处理多通道数字信号
对于多通道的数字信号处理而言,FPGA也显示出其巨大的优势。一种策略是以全并行方式对4个通道的采样数据进行同时处理,如图2.47(a)所示;另一种策略是提高采样率,使4个通道的数据在一个多通道的滤波器上时分复用,如图2.47(b)所示。
图2.47 FPGA对多通道数据处理
3.FPGA定制数字信号处理结构
FPGA可以根据成本和性能的要求,对设计策略进行权衡,以满足数字信号处理对硬件结构的要求,如图2.48所示。当要求实现高性能数字信号处理时,使用全并行的结构;而当数字信号处理的性能要求并不非常苛刻时,可以采用部分并行结构甚至全串行结构。这样,可以通过在面积和速度之间进行权衡,以满足不同的数字信号处理需求。
图2.48 不同结构满足成本和性能要求
4.FPGA处理降低功耗
通过将大量的逻辑设计资源集成在单个芯片内,FPGA显著降低了数字信号处理系统的整体功耗,这也是其优势的重要体现。
在许多应用中,FPGA被用作中央处理单元。这些应用包括消费电子、汽车电子、图像/视频处理、军事/空间、通信基站、网络/通信、超级计算和无线应用等。近年来,FPGA芯片的性能不断发展,以适合未来高性能信号处理的要求,主要体现在:
(1)逻辑门数越来越大,运行速度越来越高。
(2)通过采用更小纳米的流片工艺来提高FPGA器件的密度。一旦密度增加,器件的逻辑门数将变大,速度将变得更快。
(3)新一代FPGA朝着在单个器件上实现整个系统的方向发展。
1.全可编程器件Zynq-7000
2009年,Xilinx 可编程器件Zynq-7000的推出,为数字信号的高性能处理注入了新的活力。Zynq-7000 SoC器件真正实现了软件和硬件的协同设计、协同仿真和协同调试。这样,使得设计者可以更加灵活地在成本和性能之间进行权衡。Zynq-7000 SoC器件的内部结构如图2.49所示,其结构特点体现在:
图2.49 Zynq-7000 SoC器件的内部结构
(1)集成ARM处理器系统。①双核ARM Cortex-A9 MP处理器;②集成外部存储器控制器和外设;③与片内可编程的逻辑资源实现充分连接。
(2)集成高密度大容量的可编程逻辑资源。①用于对处理器系统进行扩展;②提供了高性能的ARM AXI接口;③灵活选择逻辑资源和实现性能。
(3)灵活的I/O阵列。①满足不同电气标准的宽范围I/O;②集成高性能的串行收发器;③提供与片内ADC连接的外部输入。
2.UltraScale架构的FPGA器件
最近,Xilinx推出了一种全新的FPGA结构,称为UltraScale架构。UltraScale架构是业界首款采用最先进的ASIC架构优化的全可编程架构,该架构能从20nm平面的FET结构扩展至16nm鳍式的FET晶体管,同时还能从单芯片扩展到3D IC。借助Xilinx Vivado设计套件提供的分析型协同优化能力,UltraScale架构可以提供海量数据的路由功能,同时还能够智能地解决先进工艺节点上系统性能瓶颈的问题。这种协同设计可以在不降低性能的前提下实现超过90%的器件利用率。
UltraScale架构不仅能够解决系统总吞吐量扩展和时延方面的局限性,而且还能直接应对先进工艺节点上的头号系统性能瓶颈,即互连问题。UltraScale新一代互连架构的推出体现了可编程逻辑布线技术的真正突破。赛灵思致力于满足从多吉字节智能包处理到多太字节数据路径等的新一代应用需求,即必须支持海量数据流。在实现宽总线逻辑模块(将总线宽度扩展至512位、1024位甚至更高)的过程中,布线或互连拥塞问题一直是影响实现时序收敛和高质量结果的主要制约因素。如果逻辑设计过于复杂,则当使用Xilinx早期架构的FPGA器件时,无法在芯片内实现高质量的布线。即使Xilinx提供的开发工具能够对拥塞的设计进行布线,最终设计也经常需要在低于预期的时钟速率下运行。而UltraScale布线架构则能完全消除布线拥塞问题。