ZYNQ简介
ZYNQ 是赛灵思公司(Xilinx)推出的新一代全可编程片上系统(APSoC),它将处理器的软件可编程 性与 FPGA 的硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。
ZYNQ简介
- Zynq-7000 系列是 Xilinx 于 2010 年 4 月推出的行业第一个可扩展处理平台
- 基于 ARM 处理器的 SoC 可满足复杂嵌入式系统的高性能、低功耗和多核处理能力等要求。
- 组合了一个双核 ARM Cortex-A9 处理器和一个传统的现场可编程门阵列 (FPGA)逻辑部件
- ZYNQ 的全称是 Zynq-7000 All Programmable SoC
SOC概念介绍
一个能够实现一定功能的电路系统由多个模块构成,如处理器、接口、存储器、模数转换器等等。这些功能模块可以由分立的器件来实现,然后在印刷电路板(PCB)上组合起来,最终形成板上系统 (System-on-a-Board)。
板上系统的示意图
片上系统(System-on-Chip)指的是在单个硅芯片就可以实现整个系统的功能
示意图如下:
- 片上系统 SoC 在一个芯片里就实现了存储、处理、逻辑和接口等各个功能模块,而不是 像板上系统那样,需要用几个不同的物理芯片来实现
- 与板上系统相比,SoC 的解决方案成本更低,能在不同的系统单元之间实现更快更安全的数据传输,具有更高的整体系统速度、更低的功耗、更小的物理尺寸和更好的可靠性。
可编程片上系统(SOPC,System-on-Progammable-Chip)提供了一个更灵活的解决方案:一种在可编程、可重新配置的芯片上实现的 SoC
FPGA 天生的灵活性使其可以被随心所欲地重新配置,以实现不同系统的功能,包括嵌入式处理器。
和使用 ASIC 来实现 SoC 相比,FPGA 能构成更为基础灵活的平台,方便系统的升级。
ZYNQ 是由两个主要部分组成的:
- 一个由双核 ARM Cortex-A9 为核心构成的处理系统(PS,Processing System)
- 一个等价于一片 FPGA 的可编程逻辑(PL,Programmable Logic)部分
ZYNQ 架构的简化模型:
PS 具有固定的架构,包含了处理器和系统的存储器;而 PL 完全是灵活的,给了设计者一 块“空白画布”来创建定制的外设。
在 ZYNQ 上,ARM Cortex-A9 是一个应用级的处理器,能运行像 Linux 这样的操作系统,而可编程 逻辑是基于 Xilinx 7 系列的 FPGA 架构。
ZYNQ 架构实现了工业标准的 AXI 接口,在芯片的两个部分之间 实现了高带宽、低延迟的连接。
PFGA简介
ZYNQ 中集成了 ARM 处理器与 FPGA
- 数字集成电路的发展
在数字集成电路中,门电路是最基本的逻辑单元,用以实现最基本的逻辑运算(与、或、非)和复合 逻辑运算(与非、异或等)。与上述逻辑运算相对应,常用的门电路有与门、或门、非门、与非门、异或 门等 - FPGA的由来
从逻辑功能的特点上将数字集成电路分类,可以分为通用型和专用型两类。
为某种专门用途而设计的集成电路称为专用集成电路, 即所谓的 ASIC(Application Specific Integrated Circuit)。
可编程逻辑器件 PLD 是作为一种通用器件生产,但它的逻辑功能是由用户通过对器件进行编程来设定 的。
可编程逻辑器件,它们内部单元 之间的连接是通过“写入”编程数据来确定的,写入不同的编程数据就可以得到不同的逻辑功能。
FPGA 由许多“可配置逻辑模块”(Configurable Logic Block,CLB)、输入/输出单元(I/O Block,IOB) 和分布式的可编程互联矩阵(Programmable Interconnection Matrix,PIM)组成。
在 FPGA 中,CLB 被布置 成阵列的形式,可编程的布线资源分布在 CLB 与 CLB 之间,像大城市的街道一样纵横联 接。这些布线资源分为行互联和列互联,可以跨过整个器件,也可以是局部 CLB 之间的互联。
FPGA 中的布线资源使得器件中所有的逻辑资源都可以 与芯片内其他资源进行通信
SPLD 和 CPLD 电路中,都采用了与或逻辑阵列加上输出逻辑单元的结构形式。
FPGA 则采用了完全不同的电路结构形式(查找表,LUT)
FPGA的用途
作为一种可编程器件,FPGA 能实现任何数字器件的功能,上至高性能 CPU,下至简单的 74 电路,都可以用 FPGA 来实现。
可编程逻辑天生就为并行地实现算法提供了理想的资源。比如在图像处理中,要同时对大量的像素点进行数学运算,而 FPGA 就很适合像这种像素点级别的图像处理所需的快速、并行的操作。
ZYNQ PL简介
ZYNQ PL部分等价于 Xilinx 7 系列 FPGA,
简化的 FPGA 基本结构由 6 部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块 RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等,
- 可编程输入/输出单元
I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配需求,为了使 FPGA 具有更灵活的应用,目前大多数 FPGA 的 I/O 单元被设计为可编程模式,即通过软件的灵活配置,可以适配不同的电气标准与 I/O 物理特性
可以调整匹配阻抗特性、上下拉电阻、以及调整驱动电流的大小等。
常见的电气标准有 LVTTL,LVCMOS,SSTL,HSTL,LVDS,LVPECL 和 PCI 等
ZYNQ 上的通用输入/输出功能(IOB)合起来被称作 SelectIO 资源,它们被组织成 50 个 IOB 一组。每 个 IOB 有一个焊盘,是与外部世界连接来做单个信号的输入或输出的。
每个 IOB 还包含一个 IOSERDES 资源,可以做并行和串行数据的可编程转换。 - 基本可编程逻辑单元
基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。
FPGA 一般是基于 SRAM 工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT,Look Up Table) 和寄存器(Register)组成。Xilinx 7 系列 FPGA 内部查找表为 6 输入,查找表一般完成纯组合逻辑功能。
FPGA 内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位,时钟使能的触发器,也可以配置成锁存器,FPGA 依赖寄存器完成同步时序逻辑设计。
例如,Altera 可编程逻辑单元通常被称为 LE(Logic Element),由一个寄存器加一个 LUT 构成。Altera 大多数 FPGA 将 10 个 LE 有机地组合在一起,构成更大的功能单元——逻辑阵列模块(LAB,Logic Array Block)。LAB 中除了 LE 还包含 LE 之间的进位链,LAB 控制信号,局部互联线资源,LUT 级联链,寄存器级联链等连线与控制资源。
Xilinx 7 系列 FPGA 中的可编程逻辑单元叫 CLB(Configurable Logic Block,可配置逻辑块)每个 CLB 里包含两个逻辑片(Slice)每个 Slice 由 4 个查找表、8 个触发器和其他一些逻辑所组成的。
CLB 是逻辑单元的最小组成部分,在 PL 中排列为一个二维阵列,通过可编程互联连接到其他类似的资源。每个 CLB 里包含两个逻辑片,并且紧邻一个开关矩阵 - 嵌入式块RAM
目前大多数 FPGA 都有内嵌的块 RAM(Block RAM),FPGA 内部嵌入可编程 RAM 模块,大大地拓 展了 FPGA 的应用范围和使用灵活性。
Zynq-7000 里的块 RAM 和 Xilinx 7 系列 FPGA 里的那些块 RAM 是等同的,它们可以实现 RAM、ROM 和 先入先出(First In First Out,FIFO)缓冲器。每个块 RAM 可以存储最多 36KB 的信息,并且可以被配置 为一个 36KB 的 RAM 或两个独立的 18KB RAM。默认的字宽是 位,这样的配置下每个 RAM 含有 2048 个 存储单元。
RAM 还可以被“重塑”来包含更多更小的单元(比如 4096 个单元 x9 位,或 8192x4 位),或是另外做成更少更长的单元(如1024单元 x36 位, 512x72 位)。
把两个或多个块 RAM 组合起来可以形成更 大的存储容量。
除了块 RAM,还可以灵活地将 LUT 配置成 RAM,ROM,FIFO 等存储结构,这种技术被称为分布式 RAM。
根据设计需求,块RAM的数量和配置方式也是器件选型的一个重要标准。 - 丰富的布线资源布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速 度。FPGA 芯片内部有着丰富的布线资源,这些布线资源根据工艺、长度、宽度和分布位置的不同而划分为 4 类不同的类别:
- 第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线
- 第二类是长线资源,用以完成芯片 Bank 间的高速信号和第二全局时钟信号的布线
- 第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线
- 第四类是分布式的布线资源,用于专有时钟、复位等控制信号线
- 设计者不需要直接选择布线资源,**布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。**从本质上讲,布线资源的使用方法和设计的结果有直接的关系。
- 底层嵌入功能单元
底层嵌入功能单元的概念比较笼统,这里指的是那些通用程度较高的嵌入式功能模块,比如 PLL (Phase Locked Loop)、DLL(Delay Locked Loop)、DSP、CPU 等。
随着 FPGA 的发展,这些模块被越来越多地嵌入到 FPGA 的内部,以满足不同场合的需求
大多数 FPGA 厂商都在 FPGA 内部集成了 DLL 或者 PLL 硬件电路,用以完成时钟的高精度、低抖动的倍频、分频、占空比调整、相移等功能。目前,高端 FPGA 产品集成的 DLL 和 PLL 资源越来越丰富, 功能越来越复杂,精度越来越高。 - 内嵌专用硬核
内嵌专用硬核与前面的底层嵌入单元是有区分的,内嵌专用硬核主要指那些通用性相对较弱,不是所有 FPGA 器件都包含硬核。
在ZYNQ的PL 端有一个数模混合模块——XADC,它就是一个硬核。XADC包含两个模数转换器(ADC), 一个模拟多路复用器,片上温度和片上电压传感器等。可以利用这个模块监测芯片温度和供电电压, 也可以用来测量外部的模拟电压信号。
ZYNQ PS简介
ZYNQ 实际上是一个以处理器为核心的系统,PL 只是它的一个外设。
Zynq-7000 系列的亮点在于它包含了完整的 ARM 处理器系统,且处理器系统中集成了内存控制器和大量的外设,使 Cortex-A9 处理器可以完全独立于可编程逻辑单元。而且实际上 在 ZYNQ 中,PL 和 PS 两部分的供电电路是独立的,这样 PS 或 PL 部分不被使用的话就可以被断电。
FPGA 可以用来搭建嵌入式处理器,像 Xilinx 的 MicroBlaze 处理器 或者 Altera 的 Nios II 处理器,像这种使用 FPGA 的可编程逻辑资源搭建的处理器称之为“软核”处理器,它的优势在于处理器的数量以及实现方式的灵活性。
ZYNQ 中集成的是一颗“硬核”处理器,它是硅芯片上专用且经过优化的硬件电路,硬核处理器的优势是它可以获得相对较高的性能。另外,ZYNQ中的硬件处理器和软核处理器并不冲突,完全可以使用 PL 的逻辑资源搭建一个 Microblaze 软核处理器,来和 ARM 硬核处理器协同工作。
Zynq 处理器系统里并非只有 ARM 处理器,还有一组相关的处理资源,形成了一个应用处理器单元(Application Processing Unit,APU),另外还有扩展外设接口、cache 存储器、存储器接口、 互联接口和时钟发生电路等。
ZYNQ 处理器系统(PS)示意图如下
- APUAPU 主要是由两个 ARM 处理器核组成的,每个都关联了一些可计算 的单元:
- 一个 NEONTM 媒体处理引擎(Media Processing Engine,MPE)和浮点单元(Floating Point Unit, FPU)
- 一个内存管理单元(Memory Management Unit,MMU)
- 一个一级 cache 存储器(分为指令和 数据两个部分)。
- APU 里还有一个二级 cache 存储器,再往下还有片上存储器(On Chip Memory,OCM), 这些是两个 ARM 处理器共用的。
- 由一个一致性控制单元(Snoop Control Unit,SCU)在 ARM 核和 二级 cache 及 OCM 存储器之间形成了桥连接。
SCU 还部分负责与 PL 对接
-
- 外部接口
Zynq PS 实现了众多接口,既有 PS 和 PL 之间的,也有 PS 和外部部件之间的
PS 和外部接口之间的通信主要是通过复用的输入/输出(Multiplexed Input/Output,MIO)实现的, 它提供了可以灵活配置的 54 个引脚,这表明外部设备和引脚之间的映射是可以按需定义的。
当需要扩展超过 54 个引脚的时候可以通过扩展 MIO(Extended MIO,EMIO)来实现,EMIO 并不是 PS 和外部连 接之间的直接通路,而是通过共用了 PL 的 I/O 资源来实现的。
PS 中可用的 I/O 包括标准通信接口和通用输入/输出(General Purpose Input/Output,GPIO), GPIO 可以用做各种用途,包括简单的按钮、开关和 LED
- 存储器接口
Zynq-7000 APSoC 上的存储器接口单元包括一个动态存储器控制器和几个静态存储器接口模块。
动态存储器控制器可以用于 DDR3、DDR3L、DDR2 或 LPDDR2。
静态存储器控制器支持一个 NAND 闪存接口、 一个 Quad-SPI 闪存接口、一个并行数据总线和并行 NOR 闪存接口。 - 片上存储器
片上存储器包括 256kB 的 RAM(OCM)和 128kB 的 ROM(BootROM)。
OCM 支持两个 64 位 AXI 从 机接口端口,一个端口专用于通过 APU SCU 的 CPU/ACP 访问,而另一个是由 PS 和 PL 内其他所有的总线 主机所共享的。
BootROM 是 ZYNQ 芯片上的一块非易失性存储器,它包含了 ZYNQ 所支持的配置器件的驱动。
BootROM 对于用户是不可见的,专门保留且只用于引导的过程。 - AXI接口ZYNQ 将高性能 ARM Cotex-A 系列处理器与高性能 FPGA 在单芯片内紧密结合,为设计带来了如减小 体积和功耗、降低设计风险,增加设计灵活性等诸多优点。在将不同工艺特征的处理器与 FPGA 融合在一 个芯片上之后,片内处理器与 FPGA 之间的互联通路就成了 ZYNQ 芯片设计的重中之重。如果 Cotex-A9 与 FPGA 之间的数据交互成为瓶颈,那么处理器与 FPGA 结合的性能优势就不能发挥出来。Xilinx 在 IP 核中使用 AXI 协议,AXI 的英文全称是 Advanced eXtensible Interface,即高级可扩展接口,它是 ARM 公司所提出的 AMBA(Advanced Microcontroller Bus Architecture)协议的一部分。AXI 协议是一种高性能、高带宽、低延迟的片内总线,具有如下特点:
- 总线的地址/控制和数据通道是分离的;
- 支持不对齐的数据传输;
- 支持突发传输,突发传输过程中只需要首地址;
- 具有分离的读/写数据通道;
- 在数字电路中只能传输二进制数 0 和 1,因此可能需要一组信号才能高效地传输信息,这一组信号就组成了接口。
AXI4 协议支持以下三种类型的接口:
- AXI4:高性能存储映射接口。
- AXI4-Lite:简化版的 AXI4 接口,用于较少数据量的存储映射通信。
- AXI4-Stream:用于高速数据流传输,非存储映射接口。
- 存储映射(Meamory Map):如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。
AXI4 协议支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。
AXI-Lite 为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。
AXI-Stream 接口则像 FIFO 一样, 数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速 AD、PCIe、DMA 接口等需要高速数据传输的场合。
在 PS 和 PL 之间的主要连接是通过一组 9 个 AXI 接口,每个接口有多个通道组成
这些形成了 PS 内 部的互联以及与 PL 的连接,如下图所示:
PS 与 PL 的 AXI 接口
上图给出了每个接口的简述,标出了主机和从机(按照惯例,主机是控制总线并发起会话的,而从机是做响应的)
接口命名的第一个字母表示的是 PS 的角色,也就是说,第一个字母 “M” 表示 PS 是主机,而第一个字母“S”表示 PS 是从机。
PS 和 PL 之间的 9 个 AXI 接口可以分成三种类型
- 通用 AXI(General Purpose AXI):一条 32 位数据总线,适合 PL 和 PS 之间的中低速通信。接口是透传的不带缓冲。总共有四个通用接口:两个 PS 做主机,另两个 PL 做主机。
- 加速器一致性端口(Accelerator Coherency Port):在 PL 和 APU 内的 SCU 之间的单个异步连接, 总线宽度为 64 位。这个端口用来实现 APU cache 和 PL 的单元之间的一致性。PL 是做主机的。
- 高性能端口(High Performance Ports):四个高性能 AXI 接口,带有 FIFO 缓冲来提供“批量”读写操作,并支持 PL 和 PS 中的存储器单元的高速率通信。数据宽度是 32 或 64 位,在所有四个接口中 PL 都是做主机的。
上面的每条总线都是由一组信号组成的,这些总线上的会话是根据 AXI4 总线协议进行通信的。
参考
正点原子–1_启明星ZYNQ之FPGA开发指南_V2.0