详解FPGA的基本结构

描述

ZYNQ PL 部分等价于 Xilinx 7 系列 FPGA,因此我们将首先介绍 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 的数据数率。

ZYNQ 上的通用输入/输出功能(IOB)合起来被称作 SelectIO 资源,它们被组织成 50 个 IOB 一组。每个 IOB 有一个焊盘,是与外部世界连接来做单个信号的输入或输出的。每个 IOB 还包含一个IOSERDES 资源,可以做并行和串行数据的可编程转换。

嵌入式

(2)基本可编程逻辑单元

基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。FPGA 一般是基于 SRAM 工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT, Look UpTable)和寄存器(Register)组成。Xilinx 7 系列 FPGA 内部查找表为 6 输入,查找表一般完成纯组合逻辑功能。FPGA 内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位,时钟使能的触发器,也可以配置成锁存器, FPGA 依赖寄存器完成同步时序逻辑设计。

一般来说,比较经典的基本可编程逻辑单元的配置是一个寄存器加一个查找表,但是不同厂商的寄存器与查找表也有一定的差异,而且寄存器与查找表的组合模式也不同。当然这些可编程逻辑单元的配置结构随着器件的不断发展也在不断更新,最新的一些可编程逻辑器件常常根据需求设计新的 LUT 和寄存器的配置比率,并优化其内部的连接构造。

例如, Altera 可编程逻辑单元通常被称为 LE(Logic Element),由一个寄存器加一个 LUT 构成。Altera 大多数 FPGA 将 10 个 LE 有机地组合在一起,构成更大的功能单元——逻辑阵列模块(LAB, LogicArray Block)。LAB 中除了 LE 还包含 LE 之间的进位链, LAB 控制信号,局部互联线资源, LUT 级联链,寄存器级联链等连线与控制资源。

Xilinx 7 系列 FPGA 中的可编程逻辑单元叫 CLB(Configurable Logic Block,可配置逻辑块)每个CLB 里包含两个逻辑片(Slice)。每个 Slice 由 4 个查找表、 8 个触发器和其他一些逻辑所组成的。CLB示意图如下所示:

嵌入式

CLB 是逻辑单元的最小组成部分,在 PL 中排列为一个二维阵列,通过可编程互联连接到其他类似的资源。每个 CLB 里包含两个逻辑片,并且紧邻一个开关矩阵, 如下图所示:

嵌入式

(3)嵌入式块 RAM

目前大多数 FPGA 都有内嵌的块 RAM(Block 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和先入先出(First In First Out, FIFO)缓冲器。每个块 RAM 可以存储最多 36KB 的信息,并且可以被配置为一个 36KB 的 RAM 或两个独立的 18KB RAM。默认的字宽是 18 位,这样的配置下每个 RAM 含有2048 个存储单元。RAM 还可以被“重塑”来包含更多更小的单元(比如 4096 个单元 x9 位,或 8192x4位),或是另外做成更少更长的单元(如 1024 单元 x36 位 512x72 位)。把两个或多个块 RAM 组合起来可以形成更大的存储容量。PL 中的块 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 资源越来越丰富,功能越来越复杂,精度越来越高。

另外, 越来越多的高端 FPGA 产品将包含 DSP 或 CPU 等硬核,从而 FPGA 将由传统的硬件设计手段逐步过渡到系统级设计平台。例如 Altera 的 Stratix IV、 Stratix V 等器件内部集成了 DSP 核;Xilinx 的Virtes 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 架构的示意图,如下所示:

嵌入式

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分