4、FPGA的内部结构
简化的 FPGA 基本结构由 6 部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等,如下图所示。
每个单元的基本概念介绍如下:
(1) 可编程输入/输出单元
输入/输出( Input/Ouput)单元简称 I/O 单元,它们是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配需求,为了使 FPGA 具有更灵活的应用,目前大多数 FPGA 的 I/O 单元被设计为可编程模式,即通过软件的灵活配置,可以适配不同的电气标准与 I/O 物理特性;可以调整匹配阻抗特性、上下拉电阻、以及调整驱动电流的大小等。
可编程 I/O 单元支持的电气标准因工艺而异,不同芯片商、不同器件的 FPGA 支持的 I/O 标准不同,一般来说,常见的电气标准有 LVTTL, LVCMOS, SSTL, HSTL, LVDS, LVPECL 和 PCI 等。值得一提的是,随着 ASIC 工艺的飞速发展,目前可编程 I/O 支持的最高频率越来越高,一些高端 FPGA 通过 DDR寄存器技术,甚至可以支持高达 2Gbit/s 的数据数率。
(2)基本可编程逻辑单元
基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。 FPGA 一般是基于 SRAM 工艺的,其基本可编程逻辑单元几乎都是由查找表( LUT, Look UpTable)和寄存器( Register)组成。 FPGA 内部查找表一般为 4 输入,查找表一般完成纯组合逻辑功能。
FPGA 内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位,时钟使能的触发器,也可以配置成锁存器, FPGA 依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可编程逻辑单元的配置是一个寄存器加一个查找表,但是不同厂商的寄存器与查找表也有一定的差异,而且寄存器与查找表的组合模式也不同。例如, Altera 可编程逻辑单元通常被称为 LE( Logic Element), 由一个寄存器加一个 LUT 构成。 Altera 大多数 FPGA 将 10 个 LE 有机地组合在一起,构成更大的功能单元——逻辑阵列模块( LAB,Logic Array Block), LAB 中除了 LE 还包含 LE 之间的进位链, LAB 控制信号,局部互联线资源, LUT 级联链,寄存器级联链等连线与控制资源。 Xilinx 可编程逻辑单元叫 Slice,它是由上下两个部分组成,每个部分都由一个寄存器加一个 LUT 组成,被称为 LC( Logic Cell,逻辑单元),两个 LC 之间有一些共用逻辑,可以完成 LC 之间的配合与级联。 Lattice 的底层逻辑单元叫 PFU( Programmable Function Unin,可编程功能单元),它是由 8 个 LUT 和 8~9 个寄存器构成,当然这些可编程逻辑单元的配置结构随着器件的不断发展也在不断更新,最新的一些可编程逻辑器件常常根据需求设计新的 LUT 和寄存器的配置比率,并优化其内部的连接构造。
学习底层配置单元的 LUT 和寄存器比率的一个重要意义在于器件选型和规模估算。很多器件手册上用器件的 ASIC 门数或等效的系统门数表示器件的规模。但是由于目前 FPGA 内部除了基本可编程逻辑单元外,还包含丰富的嵌入式 RAM, PLL 或 DLL,专用 Hard IP Core(如 PCIE、 Serdes 硬核)等,这些功能模块也会等效出一定规模的系统门,所以用系统门权衡基本可编程逻辑单元的数量是不准确的,常常混淆设计者。比较简单科学的方法是用器件的寄存器或 LUT 的数量衡量。例如, Xilinx 的 Spartan 系列的XC3S1000 有 15360 个 LUT,而 Lattice 的 EC 系列 LFEC15E 也有 15360 个 LUT,所以这两款 FPGA 的可编程逻辑单元数量基本相当,属于同一规模的产品。同样道理, Altera 的 Cyclone IV 器件族的 EP4CE10 的LUT 数量是 10320 个,就比前面提到的两款 FPGA 规模略小。需要说明的是,器件选型是一个综合性的问题,需要将设计的需求、成本、规模、速度等级、时钟资源、 I/O 特性、封装、专用功能模块等诸多因素综合考虑进来。
(3)嵌入式块 RAM
目前大多数 FPGA 都有内嵌的块 RAM( Block RAM), FPGA 内部嵌入可编程 RAM 模块,大大地拓展了 FPGA 的应用范围和使用灵活性。 FPGA 内嵌的块 RAM 一般可配置为单口 RAM,双口 RAM,伪双口 RAM, CAM, FIFO 等常用存储结构。 RAM 的概念和功能读者应该非常熟悉,在此不再赘述。 FPGA中其实并没有专用的 ROM 硬件资源,实现 ROM 的思路是对 RAM 赋予初值。所谓 CAM,即内容地址存储器, CAM 这种存储器在其每个存储单元都包含了一个内嵌的比较逻辑,写入 CAM 的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的地址。概括的讲, RAM 是一种根据地址读,写数据的存储单元;而 CAM 和 RAM 恰恰相反,它返回的是端口数据相同的所有内部地址。
CAM 的应用也十分广泛,比如在路由器中的交换表等。 FIFO 是先进先出队列的存储结构。 FPGA 内部实现 RAM, ROM, CAM, FIFO 等存储结构都可以基于嵌入式块 RAM 单元,并根据需求自动生成相应的粘合逻辑以完成地址和片选等控制逻辑。
不同器件商或不同器件族的内嵌块 RAM 的结构不同, Xilinx 常见的块 RAM 大小是 4kbit 和 18kbit 两种结构, Lattice 常用的块 RAM 大小是 9KBIT, Altera 的块 RAM 最灵活,一些高端器件内部同时含有 3 种块 RAM 结构,分别是 M512 RAM, M4K RAM, M9K RAM。
需要补充的一点是,除了块 RAM,还可以灵活地将 LUT 配置成 RAM, ROM, FIFO 等存储结构,这种技术被称为分布式 RAM。根据设计需求,块 RAM 的数量和配置方式也是器件选型的一个重要标准。
(4)丰富的布线资源
布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。 FPGA 芯片内部有着丰富的布线资源,这些布线资源根据工艺、长度、宽度和分布位置的不同而划分为 4 类不同的类别:
第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
第二类是长线资源,用以完成芯片 Bank 间的高速信号和第二全局时钟信号的布线;
第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;
第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。
在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有直接的关系。
(5)底层嵌入功能单元
底层嵌入功能单元的概念比较笼统,这里我们指的是那些通用程度较高的嵌入式功能模块,比如 PLL( Phase Locked Loop)、 DLL( Delay Locked Loop)、 DSP、 CPU 等。随着 FPGA 的发展,这些模块被越来越多地嵌入到 FPGA 的内部,以满足不同场合的需求。
目前大多数 FPGA 厂商都在 FPGA 内部集成了 DLL 或者 PLL 硬件电路,用以完成时钟的高精度、低抖动的倍频、分频、占空比调整、相移等功能。目前,高端 FPGA 产品集成的 DLL 和 PLL 资源越来越丰富,功能越来越复杂,精度越来越高。 Altera 芯片集成的是 PLL, Xilinx 集成的是 DLL, Lattice 的新型FPGA 同时集成了 PLL 与 DLL 以适应不同的需求。 Altera 芯片的 PLL 模块分为增强型 PLL 和快速 PLL 等。
Xilinx 芯片 DLL 的模块名称为 CLKDLL,在高端 FPGA 中, CLKDLL 的增强型模块为 DCM。这些时钟模块的生成和配置方法一般分为两种,一种是在 HDL 代码和原理图中直接例化,另一种是在 IP 核生成器中配置相关参数,自动生成 IP。另外可以通过在综合、实现步骤的约束文件中编写约束文件来完成时钟模块的约束。
越来越多的高端 FPGA 产品将包含 DSP 或 CPU 等软处理核,从而 FPGA 将由传统的硬件设计手段逐步过渡到系统级设计平台。例如 Altera 的 Stratix IV、 Stratix V 等器件族内部集成了 DSP core,配合同样逻辑资源,还可实现 ARM、 MIPS、 NIOS II 等嵌入式处理系统; Xilinx 的 Virtes II 和 Virtex II pro 系列 FPGA内部集成了 Power PC450 的 CPU Core 和 MicroBlaze RISC 处理器 Core; Lattice 的 ECP 系列 FPGA 内部集成了系统 DSP Core 模块,这些 CPU 或 DSP 处理模块的硬件主要由一些加、乘、快速进位链、 Pipelining和 Mux 等结构组成,加上用逻辑资源和块 RAM 实现的软核部分,就组成了功能强大的软运算中心。这种CPU 或 DSP 比较适合实现 FIR 滤波器、编码解码、 FFT 等运算密集型运用。 FPGA 内部嵌入 CPU 或 DSP等处理器,使 FPGA 在一定程度上具备了实现软硬件联合系统的能力, FPGA 正逐步成为 SOPC 的高效设计平台。 Altera 的系统级开发工具是 SOPC Buider 和 DSP Builder,专用硬件结构与软硬件协同处理模块等;Xilinx 的系统设计工具是 EDK 和 Platform Studio; Lattice 的嵌入式 DSP 开发工具是 Matlab 的 Simulink。
(6)内嵌专用硬核
这里的内嵌专用硬核与前面的底层嵌入单元是有区分的,这里讲的内嵌专用硬核主要指那些通用性相对较弱,不是所有 FPGA 器件都包含硬核。我们称 FPGA 和 CPLD 为通用逻辑器件,是区分于专用集成电路( ASIC)而言的。其实 FPGA 内部也有两个阵营:一方面是通用性较强,目标市场范围很广,价格适中的 FPGA;另一方面是针对性较强,目标市场明确,价格较高的 FPGA。前者主要指低成本 FPGA,后者主要指某些高端通信市场的可编程逻辑器件。
搜索
复制