天天看点

FPGA的内部组成结构

FPGA由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。 

    每个单元简介如下: 

    1.可编程输入/输出单元(I/O单元) 

    目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电器标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。 

    2.基本可编程逻辑单元 

    FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Register)组成的,查找表完成纯组合逻辑功能。FPGA内部寄存器可配置为带同步/异步复位和置位、时钟使能的触发器,也可以配置成为锁存器。FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可编程单元的配置是一个寄存器加一个查找表,但不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。 

    学习底层配置单元的LUT和Register比率的一个重要意义在于器件选型和规模估算。由于FPGA内部除了基本可编程逻辑单元外,还有嵌入式的RAM、PLL或者是DLL,专用的Hard IP Core等,这些模块也能等效出一定规模的系统门,所以简单科学的方法是用器件的Register或LUT的数量衡量。 

    3.嵌入式块RAM 

    目前大多数FPGA都有内嵌的块RAM。嵌入式块RAM可以配置为单端口RAM、双端口RAM、伪双端口RAM、CAM、FIFO等存储结构。 

    CAM,即为内容地址存储器。写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的地址。简单的说,RAM是一种写地址,读数据的存储单元;CAM与RAM恰恰相反。 

    除了块RAM,Xilinx和Lattice的FPGA还可以灵活地将LUT配置成RAM、ROM、FIFO等存储结构。 

    4.丰富的布线资源 

    布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。布线资源的划分: 

    1)全局性的专用布线资源:以完成器件内部的全局时钟和全局复位/置位的布线; 

    2)长线资源:用以完成器件Bank间的一些高速信号和一些第二全局时钟信号的布线(这里不懂什么是“第二全局时钟信号”); 

    3)短线资源:用来完成基本逻辑单元间的逻辑互连与布线; 

    4)其他:在逻辑单元内部还有着各种布线资源和专用时钟、复位等控制信号线。 

    由于在设计过程中,往往由布局布线器自动根据输入的逻辑网表的拓扑结构和约束条件选择可用的布线资源连通所用的底层单元模块,所以常常忽略布线资源。其实布线资源的优化与使用和实现结果有直接关系。 

    5.底层嵌入功能单元(书上举了很多例子,不过这些东东要看具体哪个厂商的哪种型号的芯片上嵌有什么资源决定) 

    6.内嵌专用硬核 

    与“底层嵌入单元”是有区别的,这里指的硬核主要是那些通用性相对较弱,不是所有FPGA器件都包含硬核。

1、总体结构

FPGA内部最主要的、最需要关注的部件是CLB(Configurable Logic Block,可配置逻辑块)、Input/Output Block(输入/输出块)和BlockRAM(块RAM)。

CLB是FPGA具有可编程能力的主要承担者。通过配置这些CLB可以让FPGA实现各种不同的逻辑功能。Input/Output Block分布在FPGA的周边,也具有可编程特性,可以配置支持各种不同的接口标准,如LVTTL、LVCMOS、PCI和LVDS等。BlockRAM是成块的RAM,可以在设计中用于存储数据,是设计的重要资源。在大规模设计选择FPGA时,RAM资源是否够用是重要的考虑因素。

除了CLB、Input/Output Block和BlockRAM以外,FPGA还有很多其他的功能单元,例如布线资源、DCM(Digital Clock Manager,数字时钟管理器)和Multiplier(乘法器)等。布线资源在FPGA内部占用硅片面积很大,为FPGA部件提供灵活可配的连接;DCM模块提供各种时钟资源,包括多种分频、移相后的时钟;Multiplier为18bit×18bit硬件乘法器,可以在一个时钟周期内完成乘法运算。

在高级的FPGA中,还包含了嵌入式处理器、DSP模块、以太网MAC、高速串行IO收发器等。

1.1 可配置逻辑块CLB

Xilinx Virtex-5 FPGA的一个CLB包含两个Slice。Slice内部包含4个LUT(查找表)、4个触发器、多路开关及进位链等资源。部分Slice还包括分布式RAM和32bit移位寄存器,这种Slice称为SLICEM,其他Slice称为SLICEL。

CLB内部的两个Slice是相互独立的,各自分别连接开关阵列(Switch Matrix),以便与通用布线阵列(General routing Matrix)相连。

在Xilinx FPGA设计工具中,Slice的位置用“XmYn”表示,其中m为Slice所在横坐标,一个CLB的两个Slice的横坐标分别是m和m+1;n为CLB的纵坐标,一个CLB的两个Slice有相同的n。Virtex-5左下角的Slice编号为X0Y0。

实际上,查找表类似于一个ROM,容量是64bit,6个输入作为地址输入,存储的内容作为布尔运算的结果。查找表中的内容由ISE生成并在FPGA配置时加载进去。

Slice中的触发器可以配置成多种工作方式,例如是FF或Latch,同步复位或异步复位、复位高有效或低有效等。

CLB内部包含多个选择器。CLB的选择器与一般的选择器不同,它们没有选择端。通路的选择在FPGA配置后固定下来。

CLB内部还包含了一个重要的资源——进位链,其作用是方便加法器的实现。

SLICEM的结构与SLICEL的结构类似,最大的区别是使用了一个新的单元代替SLICE中的查找表。这个新的单元可以配置为LUT、RAM、ROM或移位寄存器(SRL16/SRL32),从而可以实现LUT的逻辑功能,也能做存储单元(多个单元组合起来可以提供更大的容量)和移位寄存器(提供延迟等功能)

CLB内部查找表、触发器、多路器等基本单元的配置是由ISE自动完成,一般情况下不需要设计者干预。但是,如果认为有必要,设计者可以通过ISE中集成的FPGA底层编辑器——FPGA Editor直接编辑CLB内部触发器和多路器的配置。

1.2 输入输出模块(Input/Output Block)

Input/Output Block 作用是为FPGA提供内部资源与外围电路之间的接口,提供输入缓冲、输出驱动、接口电平转换、阻抗匹配、延迟控制等功能。高端FPGA的输入/输出模块还提供了DDR输入/输出接口、高速串行接口(SERDES)(见注1)等功能。

Xilinx FPGA 的输入/输出模块采用SelectIO技术(SelectIO是Xilinx公司的注册商标),提供多达960个用户IO,支持20多个单端和差分电平I/O标准;还支持DDR、DDR-2、SDRAM、QDR-II和RLDRAM-II等Memory接口标准。SelectIO经验DCI(Digitally Controlled Imepedence,数字控制阻抗),提供有源I/O终端以实现阻抗匹配。

Virtex-5的Input/Output Block以Tile为单位,IO Tile的概念与CLB有相似之处,同样是一个较大的组成单元,内部包含多个相同单元。一个Tile包含两个IOB、两个ILOGIC/ISERDES单元和两个OLOGIC/OSERDES单元。

IOB内部的主要组成部分是输入/输出Buffer和PAD(焊盘,在集成电路版图上由金属焊点和静电防护二极管组成),提供输入信号缓冲、输出信号驱动等功能。

在Input/Output Block 中,每个ILOGIC/ISERDES 单元都可以配置为ILOGIC或ISERDES。配置为ILOGIC时,可以作为常见的输入逻辑单元,或作为DDR接口的输入端;配置为ISERDES时,可以完成1到6的串并转换,两个ISERDES单元相连可以完成1到10的串并转换。

类似地,每个OLOGIC/OSERDES 单元可以配置为OLOGIC,实现常见的输入逻辑单元,或作为DDR接口的输出端。也可以配置为OSERDES,完成6到1的并串转换,经过IOB和PAD驱动高速串行总线。两个OSERDES单元相连可以完成10到1的并串转换。

Input/Output Block中有IDELAY单元,可以提供精确的延迟,这个延迟不受工艺和温度的影响。延迟共有64个抽头,每个抽头提供75ps的延迟,因此延迟的数值可以在0~4800ps之间进行选择。

部分IO接口标准需要特定的Vcco和Vref电压,这些电压由FPGA外部电路提供,并连接到FPGA管脚,供多个I/O Tile共享。连接到同一组Vcco和Vref电压的I/O Tile组成一个Bank(中文意思是“组”,但是通常直接用Bank表示更方便)。

1.3 块RAM(BlockRAM)

Xilinx FPGA 内部成块的RAM资源称为BlockRAM;根据器件系列不同,BlockRAM大小有4096bit(Virtex、VirtexE和Spartan系列)、18Kbit(Virtex-II、Spartan-3和Virtex-4系列)和38Kbit等3种(Virtex-5)。BlockRAM是真正的双口RAM结构,有两套读写数据、地址和控制总线。两套总线的操作是完全独立的,共享同一组存储单元。BlockRAM的双口RAM结构对于逻辑设计至关重要,它有两套独立的接口,可以方便地连接两个其他设计单元,允许一个端口写入数据的同时,另一个端口读出数据,提高了数据吞吐率(Throughput)。

BlockRAM的内容除了在电路运行中重写以外,也可以通过配置文件在FPGA上电配置时清零或初始化为特定值。写BlockRAM时,数据输出端可以输出新写入的数据、被覆盖的数据或保持不变。FIFO是逻辑设计中常用的功能单元,Virtex-5的BlockRAM具有FIFO专用逻辑,因此实现FIFO时将不需要额外的CLB资源,也不需要设计者自行设计FIFO逻辑控制电路,对BlockRAM进行配置即可。

BlockRAM的调用,一般通过CORE Generator进行,在CORE Generator的图形界面中指定所需要RAM的数据宽度和深度、设置控制信号和初值,就可以生成设计者所需要的RAM(这些RAM通过调用BlockRAM实现),然后在项目RTL代码中优化,即可进行仿真、综合、布局布线。

继续阅读