【正点原子FPGA连载】第一章 ZYNQ简介 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
时间:2022-09-29 10:00:00
1)实验平台:正点原子领导者ZYNQ开发板
2)平台采购地址:https://item.taobao.com/item.htm?&id=606160108761
3)全套实验源码 手册 视频下载地址:http://www.openedv.com/thread-301505-1-1.html
4)正点原子FPGA感兴趣的同学可以加群讨论:99424016
5)关注正点原子微信官方账号,获取最新信息更新
第一章 ZYNQ简介
ZYNQ是赛灵思公司(Xilinx)新一代全可编程片系统推出(APSoC),它将处理器处理器的软件FPGA为了提供无与伦比的系统性能、灵活性和可扩展性,完美整合了硬件的可编程性。与传统SoC不同的解决方案是高度灵活的可编程逻辑(FPGA)可实现系统的优化和差异化,允许添加定制外设和加速器,以适应各种广泛的应用。
本章包括以下几个部分:
11.1ZYNQ简介
1.2FPGA简介
1.3ZYNQ PL简介
1.4ZYNQ PS简介
1.1ZYNQ简介
Zynq-7000系列是Xilinx该行业于2010年4月推出的第一个可扩展处理平台旨在为视频监控、汽车驾驶员辅助、工厂自动化等高端嵌入式应用提供所需的处理能力和计算性能。这是基于ARM处理器的SoC可满足复杂嵌入式系统的高性能、低功耗和多核处理能力等要求。
ZYNQ它结合了双核的本质特征ARM Cortex-A9处理器和传统的现场可编程门阵列 (FPGA)逻辑部件。因为新设备的可编程逻辑部分是基于赛灵思28nm工艺的7系列FPGA,因此,7000被添加到该系列产品的名称中,以保持与7系列相同FPGA本系列新产品的命名也很方便。
ZYNQ的全称是Zynq-7000 All Programmable SoC,也就是说,ZYNQ其实是一个片上系统(System on Chip,SoC)。那什么是那么,SoC”?
一个具有一定功能的电路系统由处理器、接口、存储器、模数转换器等多个模块组成。这些功能模块可以通过单独的设备实现,然后打印电路板(PCB)上组合最终形成板上系统(System-on-a-Board)。板上系统的示意图如下:
图 2.1.1.1板上系统
在上图所示的板上系统中,绿色矩形代表印刷电路板(PCB),上述各种颜色的小矩形代表了系统中的各种功能模块,如存储器。这些模块的功能是由独立的硅芯片实现的,它们通过PCB金属布线连接最终形成一个完整的系统。
而片上系统(System-on-Chip)指在单个硅芯片中实现整个系统的功能,其示意图如下:
图 2.1.1.2 片上系统
如上图所示,片上系统SoC存储、处理、逻辑和接口等功能模块实现在一个芯片中,而不是使用几个不同的物理芯片,如板上系统。与板上系统相比,SoC解决方案成本较低,可以在不同的系统单元之间实现更快、更安全的数据传输,整体系统速度更高,功耗更低,物理尺寸更小,可靠性更好。
在过去,SoC该术语常用于指专用集成电路(Application Specific Integrated Circuit,ASIC)。基于 ASIC的SoC有代表性的例子包括在内PC、平板和智能手机上使用的处理器,如华为旗舰手机中的麒麟系列芯片。这些处理器通常由至少两个处理器核、存储器、图形处理器、接口和其他功能模块组成。基于ASIC的SoC有两个主要缺点:1、开发周期长,成本高;2、缺乏灵活性。开发ASIC不可重用的项目投资巨大,使得这种投资SoC该类型仅适用于大批量寿命有限的产品。
ASIC SoC其局限性使其不适用于许多应用程序,特别是当快速投资于市场能力、灵活性和升级能力已成为一个重要的关键因素时。对于小批量或中批量的产品,ASIC SoC 这不是一个好的解决方案。
可编程片上系统(SOPC,System-on-Progammable-Chip)为上述应用程序提供了更灵活的解决方案:在可编程和可重新配置的芯片上实现的SoC。可编程芯片指的是FPGA。FPGA为了实现包括嵌入式处理器在内的不同系统的功能,自然的灵活性可以随意重新配置。和使用ASIC来实现SoC相比,FPGA构建更基础、更灵活的平台,方便系统升级。
相比于SOPC,ZYNQ实现灵活性SoC提供更理想的平台:Xilinx 把它变成全可编程 片上系统(APSoC,All-Programmable SoC)FPGA为了提供无与伦比的系统性能、灵活性和可扩展性,完美整合了硬件的可编程性。
ZYNQ它由两个主要部分组成:一个由双核组成ARM Cortex-A99是核心组成的处理系统(PS,Processing System),等价于一片FPGA可编程逻辑(PL,Programmable Logic)部分。ZYNQ如下图所示:
图 2.1.1.3 ZYNQ结构简化模型
在上图中,PS具有固定的架构,包含了处理器和系统的存储器;而PL它完全灵活,给设计师一块空白画布来创建定制的外设。
在ZYNQ上,ARM Cortex-A9 它是一种可以运行的应用级处理器 Linux 基于此类操作系统的可编程逻辑Xilinx 7系列的FPGA架构。ZYNQ实现工业标准的架构AXI高带宽、低延迟连接在芯片的两部分之间。这意味着处理器和逻辑部分可以在两个分立器件之间的接口费用中发挥最佳用途。同时,系统可以简化为单芯片,包括降低物理尺寸和整体成本。
1.2FPGA简介
通过之前的介绍,我们知道ZYNQ中集成了ARM处理器与FPGA。ZYNQ全可编程SoC,其中FPGA可编程性能的硬件是必不可少的。FPGA它的灵活性从何而来?
1) 开发数字集成电路
在数字集成电路中,门电路是最基本的逻辑单元,用于实现最基本的逻辑操作(和、或、非)和复合逻辑操作(非、异或等)。与上述逻辑操作相对应,常用的门电路包括门、或门、非门、非门、异或门等,其电路符号如下图所示:
图 2.1.1.1 基本的门电路符号
在最初的数字逻辑电路中,每个门电路都由几个分立的半导体器件和电阻和电容器连接而成。不难想象,这种单元电路很难形成大规模的数字电路,严重制约了数字电路的广泛应用。1961年,美国德州仪器公司(TI)率先在同一片硅片上制作数字电路元件,制成集成电路(Intergrated Circuits,IC),并迅速取代了分立器件电路。
早期的数字逻辑设计要求设计师在电路板上或下图所示的面包板上连接多个芯片。每个芯片包含一个或多个逻辑门,或一些简单的逻辑结构(如触发器或多路重用器等)。如下图所示,芯片是德州仪器7400系列的设备,将用于20世纪60年代和70年代的许多设计。
图 2.1.1.2 由74系列设备构建的电路
自20世纪60年代以来,随着集成电路工艺水平的不断提高,集成电路的集成度也在不断提高。数字集成电路经历了小规模集成电路(Small Scale Integrated circuit,SSI),到中规模集成电路(Medium Scale Integrated circuit,MSI),再到大规模集成电路(Large Scale Integrated circuit,LSI),然后是超大规模的集成电路(Very Large Scale Integrated circuit,VLSI),以及大规模的集成电路(Ultra Large Scale Integrated circuit,ULSI)发展过程。今天,我们可以在一个小硅片上制作非常复杂的数字系统,形成一个片上系统。
2) FPGA的由来
我们从逻辑功能的特点对数字集成电路进行分类,可分为通用型和专用型。上述中小型集成电路(如74系列)均为通用数字集成电路。们的逻辑功能都比较简单,而且是固定不变的。由于它们的这些功能在组成复杂数字系统时经常要用到,所以这些器件具有很强的通用性。
从理论上来讲,用这些通用型的中、小规模集成电路可以组成任何复杂的数字系统。随着集成电路的集成度越来越高,如果能把所设计的数字系统做成一片大规模集成电路,则不仅能减小电路的体积、重量和功耗,而且可以使电路的可靠性大为提高。像这种为某种专门用途而设计的集成电路称为专用集成电路,即所谓的ASIC(Application Specific Integrated Circuit)。
ASIC的使用在生产、生活中非常普遍,比如手机、平板电脑中的主控芯片都属于专用集成电路。
图 2.1.1.3 华为Mate 30手机中的麒麟990芯片
虽然ASIC有诸多优势,但是在用量不大的情况下,设计和制造这样的专用集成电路不仅成本很高,而且设计制造的周期也很长。可编程逻辑器件(Programmable Logic Device,PLD)的出现成功解决了这个矛盾。
可编程逻辑器件PLD是作为一种通用器件生产,但它的逻辑功能是由用户通过对器件进行编程来设定的。而且有些PLD的集成度很高,足以满足设计一般数字系统的需要。这样就可以由设计人员自行编程从而将一个数字系统“集成”在一片PLD上,做成“片上系统”(System on Chip,SoC),而不必去请芯片制造厂商设计和制作专用集成电路芯片了。
最后,我们再来总结一下这三种数字集成电路之间的差异。通用型数字集成电路和专用集成电路内部的电路连接都是固定的,所以它们的逻辑功能也是固定不变的。而可编程逻辑器件则不同,它们内部单元之间的连接是通过“写入”编程数据来确定的,写入不同的编程数据就可以得到不同的逻辑功能。
自20世纪70年代以来,PLD的研制和应用得到了迅速的发展,相继开发出了多种类型和型号的产品。PLD的发展历程如下图所示:
图 2.1.1.4 PLD的发展历程
目前常见的PLD大体上可以分为SPLD(simple PLD,简单PLD)、CPLD(complex PLD,复杂PLD)和FPGA(field-programmable gate array,现场可编程门阵列)。SPLD中又可分为PLA、PAL和GAL几种类型。FPGA也是一种可编程逻辑器件,但由于在电路结构上与早期已经广为应用的PLD不同,所以采用FPGA这个名称,以示区别。
通过对数字电路的学习我们知道,任何一个逻辑函数式都可以变换成与-或表达式,因而任何一个逻辑函数都能用一级与逻辑电路和一级或逻辑电路来实现。PLD最初的研制思想就来源于此。
图 2.1.1.5 PAL器件的基本电路结构
上图是SPLD中PAL(可编程阵列逻辑)的电路结构图。通过对输入端(inputs)到与门之间的可编程阵列(programmable array)进行编程,利用PAL可以获得不同形式的组合逻辑函数。数字电路课程告诉我们,任何逻辑函数式都可以转化为若干乘积项(product tems)之和的形式,亦称“积之和”形式。通过对可编程阵列进行编程,与逻辑电路输出所需要的乘积项,再通过或逻辑电路将这些乘积项相加,就得到了最终的功能输出。然后该输出送给输出电路中的寄存器用于存储或者同步,当然也可以忽略寄存器直接输出。这就是PAL作为一种“可编程逻辑器件”能够实现不同逻辑功能的原理。
通过扩展SPLD的概念就可以得到CPLD。CPLD是复杂可编程逻辑器件,相当于将多个PAL用可编程互联阵列(Programmable Interconnect Array,PIA)连接起来,形成一个大的PLD,如下图所示:
图 2.1.1.6 CPLD结构示意图
上图中的Logic block(逻辑块)通常被称为逻辑阵列模块,或者LAB(Logic Array Block)。每个LAB相当于一个PAL电路,不同型号的CPLD器件可以包含十几个甚至上百个LAB。通过PIA将这些LAB连接起来,就可以构成规模更大的逻辑电路了。另外,在PAL中,I/O管脚是直接连接到逻辑的。而在CPLD中,I/O管脚是通过PIA从器件的主要逻辑中分离出来的。I/O管脚有它自己的控制逻辑,I/O控制单元可以根据需要将相应的引脚设置成输入、输出或双向工作模式。
CPLD相对于SPLD最大的优势就是拥有更大的逻辑资源和布线的可能性。CPLD中LAB逻辑和PIA是完全可编程的,使得它具有在单芯片中非凡的设计灵活性。CPLD的I/O特性和功能也远比SPLD中简单的I/O更有价值。
FPGA是在PAL、GAL和CPLD等可编程逻辑器件的基础上进一步发展的产物,但是FPGA和其前辈CPLD有着非常大的差异。
FPGA由许多“可配置逻辑模块”(Configurable Logic Block,CLB)、输入/输出单元(I/O Block,IOB)和分布式的可编程互联矩阵(Programmable Interconnection Matrix,PIM)组成。在FPGA中,CLB被布置成阵列的形式,如图 2.1.1.7所示。可编程的布线资源分布在CLB与CLB之间,像大城市的街道一样纵横联接。这些布线资源分为行互联和列互联,可以跨过整个器件,也可以是局部CLB之间的互联。
我们将图 2.1.1.6与图 2.1.1.7进行对比可以发现,FPGA中的布线资源看上去似乎比CPLD中的互联阵列更简单,但它实际上提供了更大的功能性和连通性。FPGA中的布线资源使得器件中所有的逻辑资源都可以与芯片内其他资源进行通信,这种结构可以实现更大容量、低成本的逻辑器件。
图 2.1.1.7 FPGA结构示意图
在前面所讲的各种SPLD和CPLD电路中,都采用了与或逻辑阵列加上输出逻辑单元的结构形式。而FPGA则采用了完全不同的电路结构形式(查找表,LUT),有关FPGA的结构我们将在本章ZYNQ PL简介中作详细介绍。
3) FPGA的用途
在介绍FPGA的用途之前,先给大家讲一个笑话:
话说一个资深工程师出国的时候带了一块FPGA开发板。
海关问道:“这是什么东西?”
工程师说:“FPGA开发板”。
海关又问:“FPGA是什么?”。
工程师回答说:“你想让它是什么,它就是什么(It can be whatever you want)”
能看懂这个笑话就说明你已经对FPGA有了一定的了解。作为一种可编程器件,FPGA能实现任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用FPGA来实现。FPGA就像一张白纸,任由你在上面涂鸦或者作画;FPGA又如同一堆积木,随便你用来搭建城堡或者玩“过家家”。
FPGA是什么这个问题可能不太好回答。但是如果说FPGA用来干什么,那么答案就显而易见了。你可能都还没意识到,在我们的生活中,FPGA已经无处不在了。从你家里使用的高清电视,到附近的无线电接收塔;从银行门口的ATM机,到微软数据中心的服务器,都可以看到FPGA的身影。
图 2.1.1.8 FPGA应用领域
如上图所示,FPGA广范应用在汽车、军用装备、图像处理、有线和无线通信、医药,以及工业控制等诸多领域。
可编程逻辑天生就为并行地实现算法提供了理想的资源。比如在图像处理中,要同时对大量的像素点进行数学运算,而FPGA就很适合像这种像素点级别的图像处理所需的快速、并行的操作。
FPGA并行的特性决定了它在某些特定行业应用上具有得天独厚的优势,例如在医疗领域。医学影像比普通图像纹理更多,分辨率更高,相关性更大。因此,为严格确保临床应用的可靠性,对图像的压缩、分割等预处理、图像分析及图像理解等要求更高。这些要求恰恰可以充分发挥FPGA的优势,通过FPGA加速图像压缩进程、删除冗余、提高压缩比、并确保图像诊断的可靠性。
在金融领域,由于采用流水线逻辑体系结构,数据流处理要求低延时,高可靠性。这在金融交易风险建模算法应用中是重要的关键点,而FPGA正具备了这种优势。类似的行业和领域还有很多,特别是在深度学习和神经网络,以及图像识别和自然语言处理等领域,FPGA正显示出其独有的优势。
1.3ZYNQ PL简介
ZYNQ PL部分等价于Xilinx 7系列FPGA,因此我们将首先介绍FPGA的架构。
简化的FPGA基本结构由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等,如下图所示:
图 2.1.1.1 FPGA基本结构
每个单元的基本概念介绍如下。
-
可编程输入/输出单元
输入/输出(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.1.1.2 PL中的IOB
2) 基本可编程逻辑单元
基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活地改变其内部连接与配置,完成不同的逻辑功能。FPGA一般是基于SRAM工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT,Look Up Table)和寄存器(Register)组成。Xilinx 7系列FPGA内部查找表为6输入,查找表一般完成纯组合逻辑功能。FPGA内部寄存器结构相当灵活,可以配置为带同步/异步复位或置位,时钟使能的触发器,也可以配置成锁存器,FPGA依赖寄存器完成同步时序逻辑设计。
一般来说,比较经典的基本可编程逻辑单元的配置是一个寄存器加一个查找表,但是不同厂商的寄存器与查找表也有一定的差异,而且寄存器与查找表的组合模式也不同。当然这些可编程逻辑单元的配置结构随着器件的不断发展也在不断更新,最新的一些可编程逻辑器件常常根据需求设计新的LUT和寄存器的配置比率,并优化其内部的连接构造。
例如,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示意图如下所示:
图 2.1.1.3 CLB示意图
CLB是逻辑单元的最小组成部分,在PL中排列为一个二维阵列,通过可编程互联连接到其他类似的资源。每个 CLB 里包含两个逻辑片,并且紧邻一个开关矩阵,如下图所示:
图 2.1.1.4 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示意图如下所示:
图 2.1.1.5 PL中的Block 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架构的示意图,如下所示:
在这里插入图片描述
图 2.1.1.6 ZYNQ PL架构示意图
1.4ZYNQ PS简介
虽然我们在前面花费了大量的篇幅来介绍ZYNQ的PL部分,但是ZYNQ实际上是一个以处理器为核心的系统,PL只是它的一个外设。Zynq-7000系列的亮点在于它包含了完整的ARM处理器系统,且处理器系统中集成了内存控制器和大量的外设,使Cortex-A9处理器可以完全独立于可编程逻辑单元。而且实际上在ZYNQ中,PL和PS两部分的供电电路是独立的,这样PS或PL部分不被使用的话就可以被断电。
在前面我们介绍SOPC时提到过,FPGA可以用来搭建嵌入式处理器,像Xilinx的MicroBlaze处理器或者Altera的Nios II处理器。像这种使用FPGA的可编程逻辑资源搭建的处理器我们称之为“软核”处理器,它的优势在于处理器的数量以及实现方式的灵活性。
而ZYNQ中集成的是一颗“硬核”处理器,它是硅芯片上专用且经过优化的硬件电路,硬核处理器的优势是它可以获得相对较高的性能。另外,ZYNQ中的硬件处理器和软核处理器并不冲突,我们完全可以使用PL的逻辑资源搭建一个Microblaze软核处理器,来和ARM硬核处理器协同工作。
需要注意的是,Zynq处理器系统里并非只有ARM处理器,还有一组相关的处理资源,形成了一个应用处理器单元(Application Processing Unit,APU),另外还有扩展外设接口、cache存储器、存储器接口、互联接口和时钟发生电路等。
ZYNQ 处理器系统(PS)示意图如下所示,其中红色高亮区域为APU。
图 2.1.1.1 PS系统示意图
-
APU
图 2.1.1.2 APU简化示意图
如上图所示是APU的简化框图。APU主要是由两个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对接,图中没有标出这个接口。
2) 外部接口
如图 2.1.1.1所示,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。如下图所示:
图 2.1.1.3 PS的外部接口
3) 存储器接口
Zynq-7000 APSoC上的存储器接口单元包括一个动态存储器控制器和几个静态存储器接口模块。动态存储器控制器可以用于DDR3、DDR3L、DDR2或LPDDR2。静态存储器控制器支持一个NAND闪存接口、一个Quad-SPI闪存接口、一个并行数据总线和并行 NOR 闪存接口。
4) 片上存储器
片上存储器包括256kB的RAM(OCM)和128kB的ROM(BootROM)。OCM支持两个64位AXI 从机接口端口,一个端口专用于通过APU SCU的CPU/ACP访问,而另一个是由PS和PL内其他所有的总线主机所共享的。BootROM是ZYNQ芯片上的一块非易失性存储器,它包含了ZYNQ所支持的配置器件的驱动。BootROM对于用户是不可见的,专门保留且只用于引导的过程。
5) AXI接口
ZYNQ将高性能ARM Cotex-A系列处理器与高性能FPGA在单芯片内紧密结合,为设计带来了如减小体积和功耗、降低设计风险,增加设计灵活性等诸多优点。在将不同工艺特征的处理器与FPGA融合在一个芯片上之后,片内处理器与FPGA之间的互联通路就成了ZYNQ芯片设计的重中之重。如果Cotex-A9与FPGA之间的数据交互成为瓶颈,那么处理器与FPGA结合的性能优势就不能发挥出来。
Xilinx从Spartan-6和Virtex-6系列开始使用AXI协议来连接IP核。在7系列和ZYNQ-7000 AP SoC器件中,Xilinx在IP核中继续使用AXI协议。AXI的英文全称是Advanced eXtensible Interface,即高级可扩展接口,它是ARM公司所提出的AMBA(Advanced Microcontroller Bus Architecture)协议的一部分。
AXI协议是一种高性能、高带宽、低延迟的片内总线,具有如下特点:
1、总线的地址/控制和数据通道是分离的;
2、支持不对齐的数据传输;
3、支持突发传输,突发传输过程中只需要首地址;
4、具有分离的读/写数据通道;
5、支持显著传输访问和乱序访问;
6、更加容易进行时序收敛。
在数字电路中只能传输二进制数0和1,因此可能需要一组信号才能高效地传输信息,这一组信号就组成了接口。AXI4协议支持以下三种类型的接口:
1、AXI4:高性能存储映射接口。
2、AXI4-Lite:简化版的AXI4接口,用于较少数据量的存储映射通信。
3、AXI4-Stream:用于高速数据流传输,非存储映射接口。
在这里首先我们首先解释一下存储映射(Meamory Map)这一概念。如果一个协议是存储映射的,那么主机所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。
AXI4协议支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。AXI-Lite为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。而AXI-Stream接口则像FIFO一样,数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速AD、PCIe、DMA接口等需要高速数据传输的场合。
在PS和PL之间的主要连接是通过一组9个AXI接口,每个接口有多个通道组成。这些形成了PS内部的互联以及与PL的连接,如下图所示:
图 2.1.1.4 PS与PL 的AXI互联
我们将上图中的接口总结如下所示:
图 2.1.1.5 PS与PL的AXI接口
上图给出了每个接口的简述,标出了主机和从机(按照惯例,主机是控制总线并发起会话的,而从机是做响应的)。需要注意的是,接口命名的第一个字母表示的是PS的角色,也就是说,第一个字母 “M” 表示 PS 是主机,而第一个字母“S”表示 PS 是从机。
上图中PS和PL之间的9个AXI接口可以分成三种类型:
1、通用AXI(General Purpose AXI):一条 32 位数据总线,适合PL和PS之间的中低速通信。接口是透传的不带缓冲。总共有四个通用接口:两个PS做主机,另两个PL做主机。
2、加速器一致性端口(Accelerator Coherency Port):在 PL和APU内的SCU之间的单个异步连接,总线宽度为64位。这个端口用来实现APU cache和PL的单元之间的一致性。PL 是做主机的。
3、高性能端口(High Performance Ports):四个高性能 AXI 接口,带有FIFO缓冲来提供“批量”读写操作,并支持PL和PS中的存储器单元的高速率通信。数据宽度是32或64位,在所有四个接口中PL 都是做主机的。
上面的每条总线都是由一组信号组成的,这些总线上的会话是根据AXI4总线协议进行通信的。有关AXI4协议更详细的内容,我们将在后续的章节进行介绍。
正点原子FPGA