"); //-->
目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。
1. 可编程输入输出单元(IOB)
可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O标准。通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。目前,I/O口的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2Gbps的数据速率。
外部输入信号可以通过IOB模块的存储单元输入到FPGA的内部,也可以直接输入FPGA 内部。当外部输入信号经过IOB模块的存储单元输入到FPGA内部时,其保持时间(Hold Time)的要求可以降低,通常默认为0。
为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同。只有相同电气标准的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。
2.基本可编程逻辑单元
基本可编辑逻辑单元是可编程逻辑的主题,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。fpga一般基于SRAM工艺的,其基本可编辑逻辑单元几乎都是由查找表(LUT,Look Up Table)和寄存器(Reigister)组成的。FPGA内部查找表一般为4输入(注:Altera Stratix II的自适应逻辑模块ALM结构比较特殊),查找表一般完成纯组合逻辑功能。FPGA内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位、时钟使能的触发器(FF,Flip Flop),也可以配置成为锁存器(Latch)。FPGA一般依赖寄存器完成同步时序逻辑设计,一般来说,比较经典的基本可编辑单元的配置是一个寄存器加一个查找表,但是不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。例如:Altera 可编程逻辑单元通常被称为LE(Logic Element,逻辑单元),有一个Register加一个LUT构成。Altera大多数FPGA将10个LE有机地组合起来,构成更大功能单元--逻辑阵列模块(LAB,Logic Array Block),LAB中出了LE还包含LE间的进位链、LAB控制信号、局部互联线资源、LUT级联链、寄存器级联链等连线与控制资源。Xilinx可编程逻辑单元叫Slice,它是由上下两个部分构成,每个部分都由一个Register加一个LUT组成,被称为LC(Logic Cell,逻辑单元),两个LC之间有一些公用逻辑,可以完成LC之间的配合与级联,Lattice的底层逻辑单元叫PFU(Programmalbe Function Unit,可编程功能单元),它由8个LUT和8~9个Register构成。当然这些可编程单元的配置结构随着器件的发展也在不断更新,最新的一些可编程逻辑器件常常根据设计需求推出一些新的LUT和Register的配置比率,并优化其内部的连接构造。
学习底层配置单元的 LUT和Rtgister比率的一个重要意义在于器件选型和规模估算,很多器件手册上用期间的 ASIC门级或等效的系统门级表示器件的规模。但是由于目前FPGA内部出了基本可编程逻辑单元外,还包含有丰富的嵌入式RAM,PLL或DLL,专用Hard IP Core(硬知识产权功能核)等。这些功能模块也会等效出一定规模的系统门,所以用系统门权衡基本可编程逻辑单元的数量是不准确的,常常混淆设计者。比较简单科学的方法是用器件的Register和LUT的数量衡量(一般来说两者比率为1:1)例如:Xilinx的Apartan-III系列的XC3S1000有15360个LUT,而Lattice的EC系列LEFC15E也有15360个LUT,所以这两款FPGA的可编程逻辑单元数量基本相当,属于同一规模的产品。同样道理,Altera的Cyclone器件族的EP1C12的LUT数量是12060个,就比前面提到的两款FPGA规模略小。需要说明的是,器件选型是一个综合性问题,需要将设计的需求、成本压力、规模、速度等级、时钟资源、I/O特性、封装、专用功能模块等诸多因素综合考虑。
3. 嵌入式块RAM(BRAM)
目前大多数FPGA都有内嵌的块RAM(Block RAM).FPGA内部嵌入可编程RAM模块。大大地扩展了FPGA的应用范围和使用灵活性。FPGA内嵌的块RAM一般可以灵活配置为单端口RAM(SPRAM.Single Pseudo RAM)、双端口RAM(DPRAM,Double Ports RAM)、伪双端口RAM(Pseudo DPRAM)、CAM(Content Addressable Memory).FIFO(First In First Out)等常用存储结构。FPGA中其实没有专用的ROM硬件资源,实现ROM的思路是对RAM赋予初值,并保持该初值。所谓CAM,即内容地址储存器。CAM这种存储器在其每个存储单元都包含了一个内嵌的比较逻辑,写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的地址。概括地讲,RAM是一种根据地址读、写数据的存储单元;而CAM和RAM恰恰相反,它返回的是与端口数据相匹配的内部地址。CAM的应用也非常广泛。比如在路由器中的地址交换表等。FIFO是“先进先出队列”式存储结构。FPGA内部实现RAM.ROM.CAM.FIFO等存储结构都可以基于嵌入式块RAM单元,并根据需求自动生成相应的粘合逻辑(Glue Logic)以完成地址和片选等控制逻辑。
不同器件商或不同器件族的内嵌块RAM的结构不同,Xilinx常见的块RAM大小是4kbit和18kbit两种结构。Lattice常用的块RAM大小是9kbit,Altera的块RAM最为灵活,一些高端器件内部同时含有3种块RAM结构,分别是M512RAM(512bit),M4KRAM(4kbit),M-RAM(512kbit)。
需要补充的是,出了块RAM,Xilinx和Lattice的FPGA还可以灵活地将LUT配置成RAM.ROM.FIFO等存储结构,这种技术被称为分布式RAM(Distributed RAM)。根据设计需求,块RAM的数量和配置方式也是器件选型的一个重要标准
4. 丰富的布线资源
布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。
在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有密切、直接的关系。
5. 底层内嵌功能单元
内嵌功能模块主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等软处理核(Soft Core)。现在越来越丰富的内嵌功能单元,使得单片FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC平台过渡。
DLL和PLL具有类似的功能,可以完成时钟高精度、低抖动的倍频和分频,以及占空比调整和移相等功能。Xilinx公司生产的芯片上集成了DLL,Altera公司的芯片集成了PLL,Lattice公司的新型芯片上同时集成了PLL和DLL。PLL 和DLL可以通过IP核生成的工具方便地进行管理和配置。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。