详解FPGA的基本结构
详解FPGA的基本结构
FPGA(现场可编程门阵列)是一种可编程逻辑器件,具有高度的灵活性和可定制性。本文将详细介绍FPGA的基本结构,包括可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等六个部分。
1. 可编程输入/输出单元
输入/输出(I/O)单元是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配需求。目前大多数FPGA的I/O单元被设计为可编程模式,可以通过软件灵活配置,适配不同的电气标准与I/O物理特性。常见的电气标准有LVTTL、LVCMOS、SSTL、HSTL、LVDS、LVPECL和PCI等。高端FPGA通过DDR寄存器技术,甚至可以支持高达2Gbit/s的数据速率。
ZYNQ上的通用输入/输出功能(IOB)合起来被称作SelectIO资源,它们被组织成50个IOB一组。每个IOB包含一个焊盘,用于与外部世界连接来做单个信号的输入或输出。每个IOB还包含一个IOSERDES资源,可以做并行和串行数据的可编程转换。
2. 基本可编程逻辑单元
基本可编程逻辑单元是FPGA的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。FPGA一般是基于SRAM工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT)和寄存器组成。Xilinx 7系列FPGA内部查找表为6输入,通常完成纯组合逻辑功能。FPGA内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位,时钟使能的触发器,也可以配置成锁存器,FPGA依赖寄存器完成同步时序逻辑设计。
Xilinx 7系列FPGA中的可编程逻辑单元叫CLB(Configurable Logic Block),每个CLB里包含两个逻辑片(Slice)。每个Slice由4个查找表、8个触发器和其他一些逻辑所组成。CLB示意图如下所示:
3. 嵌入式块RAM
目前大多数FPGA都有内嵌的块RAM,大大地拓展了FPGA的应用范围和使用灵活性。不同器件商或不同器件族的内嵌块RAM的结构不同,Lattice常用的块RAM大小是9KBIT;Altera的块RAM最灵活,一些高端器件内部同时含有3种块RAM结构,分别是M512 RAM、M4K RAM、M9K RAM。
Zynq-7000里的块RAM和Xilinx 7系列FPGA里的那些块RAM是等同的,它们可以实现RAM、ROM和先入先出(FIFO)缓冲器。每个块RAM可以存储最多36KB的信息,并且可以被配置为一个36KB的RAM或两个独立的18KB RAM。默认的字宽是18位,这样的配置下每个RAM含有2048个存储单元。RAM还可以被“重塑”来包含更多更小的单元(比如4096个单元x9位,或8192x4位),或是另外做成更少更长的单元(如1024单元x36位512x72位)。把两个或多个块RAM组合起来可以形成更大的存储容量。
4. 丰富的布线资源
布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,这些布线资源根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别:
- 第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
- 第二类是长线资源,用以完成芯片Bank间的高速信号和第二全局时钟信号的布线;
- 第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;
- 第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。
在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有直接的关系。
5. 底层嵌入功能单元
底层嵌入功能单元的概念比较笼统,这里指的是那些通用程度较高的嵌入式功能模块,比如PLL(锁相环)、DLL(延迟锁定环)、DSP、CPU等。随着FPGA的发展,这些模块被越来越多地嵌入到FPGA的内部,以满足不同场合的需求。
目前大多数FPGA厂商都在FPGA内部集成了DLL或者PLL硬件电路,用以完成时钟的高精度、低抖动的倍频、分频、占空比调整、相移等功能。高端FPGA产品集成的DLL和PLL资源越来越丰富,功能越来越复杂,精度越来越高。
另外,越来越多的高端FPGA产品将包含DSP或CPU等硬核,从而FPGA将由传统的硬件设计手段逐步过渡到系统级设计平台。例如Altera的Stratix IV、Stratix V等器件内部集成了DSP核;Xilinx的Virtex II和Virtex II pro系列FPGA内部集成了Power PC450的处理器。FPGA内部嵌入DSP或CPU等处理器,使FPGA在一定程度上具备了实现软硬件联合系统的能力,FPGA正逐步成为SOPC的高效设计平台。
6. 内嵌专用硬核
这里的内嵌专用硬核主要指那些通用性相对较弱,不是所有FPGA器件都包含的硬核。在ZYNQ的PL端有一个数模混合模块——XADC,它就是一个硬核。XADC包含两个模数转换器(ADC),一个模拟多路复用器,片上温度和片上电压传感器等。可以利用这个模块监测芯片温度和供电电压,也可以用来测量外部的模拟电压信号。
7. ZYNQ PL架构
在介绍完FPGA的基本结构之后,给出ZYNQ PL架构的示意图: