FPGA 自诞生以来,经历了从配角到主角的过程,由于 FPGA 飞速的发展,凭借其灵活性高、开发周 期短、并行计算效率高等优势,使其应用到越来越多的领域中,如通信、消费电子、工业控制以及嵌入式 等领域。
Zynq-7000 系列是 Xilinx 公司推出的全可编程片上系统(All Programmable SoC),包含 PS (Processing System,处理器系统)和 PL(Programmable Logic,可编程逻辑)两部分。Zynq SoC 整合了 ARM 双核 cortex-A9 处理器和 Xilinx 7 系列 FPGA 架构,使得它不仅拥有 ASIC 在能耗、性能和兼容性方 面的优势,而且具有 FPGA 硬件可编程性的优点。 Zynq-7000 系列具有丰富的型号,如 XC7Z010、XC7Z020 和 XC7Z030 等,领航者 ZYNQ 底板搭配的 核心板有两种型号,分别为 ZYNQ-7020(XC7Z020)和 ZYNQ-7010(XC7Z010)。XC7Z020 内部的 LC (Logic Cell,逻辑单元)达到 85K,XC7Z010 的内部 LC 为 28K。对于我们学习使用以及项目开发来说, 已经足够了。
Xilinx的ZYNQ系列FPGA是二种看上去对立面的思想的融合,ARM处理器的串行执行+FPGA的并行执行,着力于解决大数据处理、人工智能等复杂高性能算法处理。新的设计工具的推出,vivado HLS,更加注重嵌入式系统的系统级建模,通过HLS工具,用户只需要编写C语言代码,就可以让工具自动转换和生成HDL代码。
随着异构架构和片上系统技术的不断发展,协同设计、协同仿真和协同调试将成为未来嵌入式系统开发者必备的素质。所谓的协同,就是要求设计者同时掌握软件和硬件知识,这与传统上软件和硬件分离的设计方法有着本质的区别。由于半导体技术的不断发展,使得电子系统从传统的PCB板级进化到芯片级,对于嵌入式系统的小型化、低功耗和可靠性的改善都提供了强大的保证。
https://china.xilinx.com/products/silicon-devices/soc.html
SOC:System On Chip,也称为All Programmable SOC,称为全可编程片上系统.。
Xilinx的SOC有4个系列:
-
ZYNQ-7000,此系列是Xilinx于2015年发布的第一代SOC架构的芯片,也是世界上首个SOC芯片系列
-
ZYNQ UltraScale+ MPSoC,性能强劲
-
ZYNQ UltraScale+ RDSoC,性能强劲
-
Versal ACAP,Xilinx最新发布的芯片,性能也最强
SOC内部集成了单/多个ARM处理器核心与1个FPGA,将软件可编程的硬核处理器与硬件可编程的FPGA集成在一个芯片中。软硬件均可编程也是SOC被称为APSOC全可编程片上系统的原因。
SOC中的ARM处理器被称为PS(Processing System,处理系统),而FPGA被称为PL(Progarmmable Logic,可编程逻辑)。
SOC = PS + PL,其中,PS为主,与单独的ARM芯片(如ST公司的STM32系列)一样,PS配备了多个外设,如串口,CAN口,GPIO等,PL部分可以看做是PS的一个”可编程外设”。
有人也许有疑问,既然SOC = PS + PL,那么用一个ARM芯片和一个FPGA组合的方式,不考虑面积成本等问题,在性能方面是不是就和SOC一样了呢?答案是不行,因为在同一芯片中,ZYNQ中PS与PL可进行低延时高速片内通信,而两个芯片间的片间通信就难以实现低延时和高速,这是SOC的主要优势之一。
SOC的优点:1.灵活,2.成本低(一个芯片比两个芯片便宜)
SOC的缺点:1.开发难度大,开发人员最好同时会FPGA和ARM
参考资料:
-
ZYNQ 之 FPGA 开发指南
-
Xilinx官方文档:Zynq-7000 SoC 技术参考手册(UG585)
从本文开始,主要学 习 ZYNQ 的 PL(Program Logic,可编程逻辑)部分!
ZYNQ是赛灵思公司(Xilinx)推出的新一代全可编程片上系统,它将处理器的软件可编程性与FPGA的硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。
ZYNQ旨在为视频监控、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理能力与计算性能。这款基于ARM处理器的SoC可满足复杂嵌入式系统的高性能、低功耗和多核处理能力等要求。
ZYNQ 的本质特征,是它组合了一个双核 ARM Cortex-A9 处理器和一个传统的现场可编程门阵列(FPGA)逻辑部件。由于该新型器件的可编程逻辑部分基于赛灵思 28nm 工艺的 7 系列 FPGA,因此该系列产品的名称中添加了“7000”,以保持与 7 系列 FPGA 的一致性,同时也方便日后本系列新产品的命名。
在 Zynq 上,ARM Cortex-A9 是一个应用级的处理器,能运行完整的像Linux这样的操作系统,而可编程逻辑(PL)是基于Xilinx 7 系列的 FPGA 架构。这个架构实现了工业标准的 AXI 接口,在芯片的两个部分之间实现了高带宽、低延迟的连接。这意味着处理器和逻辑部分各自都可以发挥最佳的用途,而不会有在两个分立的芯片之间的那种接口开销。同时又能获得系统被简化为单一芯片所带来的好处,包括物理尺寸和整体成本的降低。(关于Xilinx 7 系列的 FPGA 架构,感兴趣的读者可以做进一步深入的了解。)
一.概念
ZYNQ 的全称是 Zynq-7000 All Programmable SoC,也就是说,ZYNQ 实际上是一个片上系统(System on Chip,SoC)。
1.什么是“SoC”(System-on-Chip)?
(1)板上系统(System-on-a-Board)
一个能够实现一定功能的电路系统由多个模块构成,如处理器、接口、存储器、模数转换器等等。这些功能模块可以由分立的器件来实现,然后在印刷电路板(PCB)上组合起来,最终形成板上系统(System-on-a-Board)。板上系统的示意图如下所示:
在上图所示的板上系统中,绿色的矩形代表印刷电路板(PCB),上面各种颜色的小矩形代表了系统中各个功能模块,如存储器等。这些模块的功能都由一个个独立的硅芯片分别实现的,它们之间通过 PCB 上 的金属走线连接,最终构成一个完整的系统。
(2)片上系统(System-on-Chip)
而片上系统(System-on-Chip)指的是在单个硅芯片就可以实现整个系统的功能,其示意图如下所示:
如上图所示,片上系统 SoC 在一个芯片里就实现了存储、处理、逻辑和接口等各个功能模块,而不是像板上系统那样,需要用几个不同的物理芯片来实现。与板上系统相比,SoC 的解决方案成本更低,能在不同的系统单元之间实现更快更安全的数据传输,具有更高的整体系统速度、更低的功耗、更小的物理尺寸和更好的可靠性。
基于ASIC的SOC
在过去,SoC 这个术语常用于指专用集成电路(Application Specific Integrated Circuit,ASIC) 。即专用集成电路,它上面可以有数字的、模拟的和射频的元件,和混合信号模块组 合起来来实现模拟 – 数字转换和数字 – 模拟转换 (ADC 和 DAC)。单就数字部分而 言,一块 SoC 可以组合上数字系统所有的功能:处理、高速逻辑、接口、存储器等等。基于 ASIC的 SoC 的代表性例子包括在 PC、平板和智能手机上使用的处理器,如华为旗舰手机中的麒麟系列芯片。这些处理器典型地是由至少两个处理器核、存储器、图形处理器、接口和其他功能模块组合起来的。
目前,随着用户需求更加趋于灵活,可编程片上系统(System-on-Progammable-Chip)的出现,SoC的范围变得更加广。
基于ASIC的SoC(也就是过去人们常说的“SoC”)这种 SoC 类型只 适合于大批量而且将来不需要升级的市场领域。基于 ASIC 的 SoC 的代表性例子包括 在 PC、平板和智能手机上用的集成处理器。这些处理器典型地是由至少两个处理器 核、存储器、图形处理器、接口和其他功能模块组合起来的,而且大批量生产 出来用于寿命有限的产品中。相较于像FPGA、ZYNQ这一类可编程片上系统在灵活性、快速适应市场应用需求方面有着相当大的局限性。
基于 ASIC的 SoC 的主要缺点有两个:
-
开发周期长且成本巨大;
-
缺乏灵活性。
开发 ASIC 时不可重用的工程投入是巨大的,使得这种 SoC 类型只适合于大批量而且寿命有限的产品中。
ASIC SoC 的局限性导致它们不适用于很多应用,特别是当快速投入市场能力、灵活性和升级能力已经成为重要的关键因素。对于小批量或中批量的产品,ASIC SoC 也不是好的解决方案。
2.可编程片上系统(SOPC)
可编程片上系统(SOPC,System-on-Progammable-Chip) 为上述应用提供了一个更灵活的解决方案:一种在可编程、可重新配置的芯片上实现的 SoC。
可编程的芯片指的就是 FPGA。FPGA 天生的灵活性使其可以被随心所欲地重新配置,以实现不同系统的功能,包括嵌入式处理器。和使用 ASIC 来实现 SoC相比,FPGA 能构成更为基础灵活的平台,方便系统的升级。
3.全可编程片上系统(APSoC,All-Programmable SoC)
相比于 SOPC,ZYNQ 为实现灵活的 SoC 提供了一个更加理想的平台:Xilinx 将其打造成 “全可编程片上系统(APSoC,All-Programmable SoC)” 。它将处理器的软件可编程性与 FPGA 的硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。
ZYNQ 是由两个主要部分组成的:一个由双核 ARM Cortex-A9 为核心构成的处理系统(PS,Processing System),和一个等价于一片 FPGA 的可编程逻辑(PL,Programmable Logic)部分。
ZYNQ 架构的简化模型如下图所示:
在上图中:
-
PS 具有固定的架构,包含了处理器和系统的存储器;
-
而 PL 完全是灵活的,给了设计者一块“空白画布”来创建定制的外设。
在 ZYNQ 上,ARM Cortex-A9 是一个应用级的处理器,能运行像 Linux 这样的操作系统,而可编程逻辑是基于 Xilinx 7 系列的 FPGA 架构。
进一步细化模型如下图:
可以看到,蓝色PS部分(Processing System)具有固定的架构,承载了处理器和系统存储区, 而黄色PL 部分(Programmable Logic)完全是灵活的,给了设计者巨大的自由空间来创建定制的外设,或重用标准外设。
这里的外设我们可以理解成知识产权(Intellectual Property,IP)功能模块,也就是我们常说的IP——这些IP可以从Xilinx的库获得(随着设计工具提供)来源,也可以从之前的项目中重用,或是从第三方或是从开源仓库获得,然后再集成起来形成系统的设计。
Zynq 是一块 SoC,具有大量的标准 IP,这表明这些部件就不再需要重新设计了。这也加快了设计者的开发速度。我们需要考虑 IP 的各种来源,包括 Xilinx 库、产生自己的 IP 的机制,和第三方 IP 来源。当然,仅仅只提及这些模块是不够的 —— 它们还得被集成进系统去,建立起恰当的连接和交互。
而互联是通过连接了 PS 和 PL 的 AXI 接口总线来实现的。值得注意的是:这里处理器与外设链接的是单一总线,但其实一个处理器也可以连接多个外设总线。另外,可以看到软件是放在处理器那里的,也就是这里位 于 Zynq 的 PS 里的 ARM Cortex-A9。软件系统由一连串的软件单元组成的。
ZYNQ 架构实现了工业标准的 AXI 接口,在芯片的两个部分之间实现了高带宽、低延迟的连接。这意味着处理器和逻辑部分各自都可以发挥最佳的用途,而不会产生在两个分立器件之间的接口开销。与此同时,又能获得系统被简化为单一芯片所带来的好处,包括物理尺寸和整体成本的降低。
Zynq-7000 采用可扩展式处理平台架构(Extensible Processing Platform、EPP),是 Xilinx 用 28nm HKMG工艺制成的低功耗,高性能,高扩展性的新型芯片,这款新品里面集成了ARM CORTEX-A9 MPSOC 硬核以及相应的SOC系统。
-
PS: 处理系统(Processing System),与FPGA无关的ARM的SOC的部分。
-
PL: 可编程逻辑 (Progarmmable Logic),FPGA部分。
-
APU: 应用处理器单元(Application Processor Unit)。位于PS里面的中心位置。
-
SCU: Snoop Control Unit,用来保持双核之间的数据Cache的一致性。也就是说,第一个A9 处理器写存储时,只是写在了缓存里,没有进主存,如果第二个A9读操作,涉及到第一个写脏了的数据段,SCU要保证第二个A9的缓存里是最新的数据。如果第二个A9写同样数据段的数据,需要在第一个中体现出写的内容。SCU的存在,才使得两个核成互相联系的 “双核”,才能成为MPsoc。
AP SoC的诞生背景:
在全可编程平台设计阶段,设计已经从传统上以硬件描述语言HDL为中心的硬件逻辑设计,转换到以C语言为代表的软件为中心的功能描述,所以就形成了以C语言描述嵌入式系统结构的功能,而用HDL语言描述硬件的具体实现的设计方法,这也是基于全可编程SoC和传统上基于SoC器件实现嵌入式系统设计的最大区别,即真正实现了软件和硬件的协同设计。
最大优点可实现硬件加速:
设计者可以根据需求在硬件实现和软件实现之间进行权衡,使所设计的嵌入式系统满足最好的性价比要求,例如,在实现一个嵌入式系统设计时,当使用软件实现算法成为整个系统性能的瓶颈时,设计人员可以选全可编程SoC内使用硬件逻辑定制协处理器引擎来高效的实现该算法,这个使用硬件逻辑实现的协处理器,可以通过AMBA接口与全可编程SoC内的ARM Cortex A9嵌入式处理器连接,此外,通过XilinX所提供的最新高级综合工具HLS,设计者很容易将软件瓶颈转换为由硬件处理。
全可编程片上系统中的处理器类型:
根据不同的需求,全可编程片上系统的处理器可以分为软核和硬核处理器。
-
硬核处理器:早期Xilinx将IBM公司的PowerPC硬核集成在V5系列的FPGA中,后来将ARM公司的双核Cortex-A9硬核集成在ZYNQ 7000系列的SoC芯片中
-
软核处理器:对于一些对处理器性能要求不是很高的需求,没有必要在硅片上专门划分一定的区域来实现专用的处理器,而是通过使用FPGA芯片内所提供的设计资源,包括LUTbram、触发器和互联资源,实现一个处理器的功能,这就是软核处理器,对于软核处理器,他通过HDL语言或者网表进行描述 ,通过通过综合后才能被使用。
SoC、CPU、MCU的比较
-
SoC:可以集成多个功能强大的处理器内核、可以集成存储块、IO资源及其他外设、可以集成GPUDSP音频视频解码器等、可以运行不同的操作系统、用于高级应用如智能手机平板电脑等;
-
CPU:单个处理器核,需要外部额外的存储器核外设支持,应用绝大多数场合;
-
MCU:典型的只有一个处理器内核、内部包含了存储器、IO及其他外设、用于工业控制领域如嵌入式应用。
最后一句话总结:ZYNQ的本质特征,是它组合了一个双核ARM Cortex-A9处理器和一个传统的现场可编程门阵列 (FPGA)逻辑部件。
ZYNQ-7000全可编程片上Soc是Xilinx公司采用的是ARM-Cortex-A9双核处理器,处理器以硬核的形式存在于FPGA中。
说到硬核,下面介绍一下硬核和软核的区别:
-
硬核 :处理器以硅片的形式存在于FPGA中,不占用本身的可编程逻辑资源,运算速度快,性能优于软核。
-
软核:以网表的形式存在,在需要调用软核时,在vivado等IDE平台上综合实现后利用FPGA可编程逻辑资源实现,软核灵活性大于硬核。
简单说:
-
Soc可以看成是是集成了大量外设和存储资源的CPU
-
传统CPU则没有外设及存储资源
-
ZYNQ-7000全可编程片上Soc,不仅Soc本身具有大量的外设资源,而且还支持外设定制,可以根据用户需求进行特定外设的开发,这部分外设采用FPGA可编程逻辑资源实现。说简单点就是,ZYNQ-7000是一种传统意义上的FPGA+ARM-Cortex-A9的异构架构芯片,两者可以相互调用,相互配合,取长补短。
ZYNQ-7000全可编程Soc可以运用到很多领域,比如数据中心,通信基站,安防监控,无人驾驶,AI加速等很多领域。具有广阔的应用空间。
1 7000S与7000的区别
ZYNQ-7000 SOC分为ZYNQ-7000S 与 ZYNQ-7000两类产品,7000S中的S是Single(单个)的缩写,指的是7000S芯片中只集成了一个A9核,而7000是两个。
2 资源概览
参考:ZYNQ-7000产品选型手册.pdf
https://docs.xilinx.com/v/u/1L_hkh2pbc5l0Oz7tcLspA
可见7000系列芯片不同型号间的主要区别在于:1.处理器核心数,2.处理器主频,3.PL资源,而外设没区别。
3 速度等级与温度等级
可见,速度等级共分3级,-1最慢,-2中等,-3最快。带L表示Low Power(低功耗)
温度等级共分3级:
-
C,Commerical,商业级,0~85℃
-
E,Extended,扩展级,0~100℃
-
I,Industrial,工业级,-40~+100℃
4 芯片命名规则
参考:ds190 ZYNQ-7000-概览.pdf
https://china.xilinx.com/support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf
5 ZYNQ-7000描述
Zynq-7000系列基于Xilinx的第一代SoC架构。这些产品在单个设备中集成了功能丰富的基于双核或单核ARM Cortex-A9的处理系统(PS)和28nm Xilinx可编程逻辑(PL)。ARM Cortex-A9 CPU是PS的核心,此外还包括片上存储器,外部存储器接口以及丰富的外围接口。
Zynq-7000系列提供了FPGA的灵活性和可扩展性,同时提供了与通常使用的ASIC(Application Specific Integrated Circuit,专用集成电路)和ASSP(Application Specific Standard Parts,专用标准产品)同等的性能,功率和易用性。同时, Zynq-7000系列提供了行业标准设计工具(Vivado,SDK,Vitis等),使设计人员可以使用单一平台开发成本敏感以及高性能的应用程序。 Zynq-7000系列中的每个设备都包含相同的PS,但是PL和IO资源在设备之间会有所不同。因此,Zynq-7000和Zynq-7000S SoC能够满足多种应用场景.
Zynq-7000集成了PS与PL,在PL中实现自定义逻辑,在PS中实现自定义软件,两者组合实现多种功能。两芯片的解决方案(FPGA + ASSP)因为I / O带宽,延迟和功耗的原因,无法达到同等性能水平。
Xilinx为Zynq-7000系列提供了大量的软IP。 基于ARM的PS还结合了Xilinx现有的PL生态系统,带来了广泛的第三方工具和IP提供商。
PS和PL可独立工作,也可以在PS上跑操作系统,例如Linux。Xilinx也提供其它标准操作系统。
PS和PL位于单独的电源域上,当不使用PL时可关闭PL电源。PS中的处理器始终首先启动,从而允许以软件为中心的方法对PL进行配置。对PL的配置由CPU上运行的软件管理,因此ZYNQ的启动类似于ASSP。
6 ZYNQ-7000架构概览
如上图所示,PS包含四大块:
-
Application processor unit (APU),应用处理器单元
-
Memory interfaces,存储器接口
-
I/O peripherals (IOP),输入/输出外设
-
Interconnect,内部互联
注意:ZYNQ-7000系列芯片的PS架构均相同。
早期生产的数字集成电路逻辑功能都是固定不变的。
要想改变它的逻辑功能,就必须改变内部各单元电路之间的连接,而这种连接在集成电路制作过程中已经固定下来了。
允许用户自行修改内部连接的集成电路:可编程逻辑器件(Programmable Logic Device)
1、PLD内部的电路结构可以通过写入编程数据来设置;
2、写入PLD的编程数据还可以擦除重写;
PLD的逻辑功能可以由使用者通过编程来设定。
常用的可编程逻辑器件:
-
CPLD:复杂可编程逻辑器件(Complex Programmable Logic Device)
-
FPGA:现场可编程门阵列(Field Programmable Gate Array)
本质差异:电路结构不同。
-
CPLD:基于“乘积项”的与或逻辑阵列
-
FPGA:基于“查找表”(LUT,Look UP Table)的CLB阵列
什么是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 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示意图如下所示
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 位,或 8192×4位),或是另外做成更少更长的单元(如 1024 单元 x36 位 512×72 位)。把两个或多个块 RAM 组合起来可以形成更大的存储容量。PL 中的块 RAM 示意图如下所示:
-
Artix™-based devices: Z-7010, Z-7015, and Z-7020
-
Kintex™-based devices: Z-7030, Z-7045, and Z-7100
需要补充的一点是,除了块 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 架构的示意图,如下所示:
一、系统资源
整个ZYNQ-7000全可编程Soc系统框图可由如图所示,从图可以看出整个ZYNQ-7000大体由两部分构成,一部分是由ARM Cortex-A9双核处理器及其外设构成的PS部分,另外一部分是由可编程逻辑资源构成的PL部分,PS与PL之间采用AXI4互联协议进行通信。在PS部分,包括USB,UART,CAN,I2C等外设资源,也有SRAM,Cache高速缓存等存储器资源,PS部分还可以通过特定端口在外部挂载DDR存储器,在PS部分,各个外设与ARM Cortex-A9内核通过中央互联单元进行连接通信,PS通过HP端口和GP端口与PL进行数据交换,GP端口一般用于传送控制信号,速度较慢,HP端口一般用于高速数据传输,速度较快。
虽然我们在前面花费了大量的篇幅来介绍 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。
二、ZYNQ-7000 SoC功能与结构
在该全可编程SoC中,双核ARM-Cortex-A9多核CPU是PS的心脏,它包含片上存储器、外部存储器接口和丰富功能的外设。与传统的FPGA和SoC相比,ZYNQ7000不但提供了FPGA灵活性和可扩展性,也提供了专用集成电路的相关性能、功耗和易用性。
ZYNQ 7000的结构便于将定制逻辑和软件分别映射到PL和PS中,这样就可实现独一无二和差异化的系统功能。
与传统的FPGA方法不同的是,ZYNQ 7000 SoC总是最先启动PS内的处理器,这样允许PS上运行的基于软件程序用于启动系统并且配置PL,这样可以将配置PL设置成启动过程的一部分或者在将来的某个时间再单独的配置PL,此外可以实现PL的完全重配置或者使用部分可重配置(PR,Partional Reconfihuration,允许动态的重新配置PL中的某一个部分,这样能够对设计进行动态的修改)。
三. PS侧架构解析
1 APU(应用处理器单元)
APU包括:
-
单/两个A9核,7000S的APU只有单核,缺少上图右上角虚线框部分
-
SWDT(System Watch Dog Timer,系统看门狗定时器)
-
TTC(Triple Timer/Counter,3重定时器/计数器)
-
System-Level Control Regs(系统级控制寄存器)
-
DMA 8 Channel(Direct Memory Access,8通道直接内存存储)
-
GIC( General interrupt controller,一般中断控制器)
-
Snoop Controller(窥探控制),AWDT(ARM Watch Dog Timer,ARM看门狗定时器),Timer(定时器)
-
512KB L2 Cache & Controller (Level 2 Cache,2级缓存与控制器)
-
OCM Interconnect 256K SRAM(On-Chip Memory,256KB片上静态随机存储器)
每个A9核包括:
-
FPU and NEON Engine(Float Point Unit,浮点运算单元 与 NEON?不知道是什么缩写,待查)
-
MMU(Memory Management Unit,内存管理单元)
-
A9 CPU(central processing unit,中央处理器)
-
32KB I-Cache(Instruction Cache,指令缓存)
-
32KB D-Cache(Date Cache,数据缓存)
如上图所示是 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 Memory interfaces(存储器接口)
Zynq-7000 APSoC 上的存储器接口单元包括一个动态存储器控制器和几个静态存储器接口模块。动态存储器控制器可以用于 DDR3、DDR3L、DDR2 或 LPDDR2。静态存储器控制器支持一个 NAND 闪存接口、一个 Quad-SPI 闪存接口、一个并行数据总线和并行 NOR 闪存接口。
从上图可看到有两处存储器接口,左侧下边与右侧中部
左侧三种接口:
-
SRAM/NOR,SRAM接口
-
ONFI 1.0 NAND(Open Nand Flash Interface,开放与非闪存接口)
-
Q-SPI CTRL(Qual SPI控制,四通道SPI的FLASH接口)
这三种都是接FLASH等非易失存储器的。
右侧接易失存储器的DDR接口,支持DDR2/3,DDR3L,LPDDR2
3 片上存储器
片上存储器包括 256kB 的 RAM(OCM)和 128kB 的 ROM(BootROM)。OCM 支持两个 64 位 AXI 从机接口端口,一个端口专用于通过 APU SCU 的 CPU/ACP 访问,而另一个是由 PS 和 PL 内其他所有的总线主机所共享的。BootROM 是 ZYNQ 芯片上的一块非易失性存储器,它包含了 ZYNQ 所支持的配置器件的驱动。BootROM 对于用户是不可见的,专门保留且只用于引导的过程。
4 外部接口
Input/output peripherals,输入/输出外设,位于上图左侧,从上到下的外设分别是:
-
2路USB
-
2路GigE(Gigabit Ethernet,千兆以太网)
-
2路SD SDIO(SD卡接口SDIO,Secure Digital Input and Output,安全数字输入输出)
-
GPIO(General Purpose Input Output,通用输入输出)
-
2路UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器,简称串口)
-
2路CAN(Controller Area Network,控制器局域网)
-
2路I2C(Inter-Integrated Circuit Bus,Bus省略了,称为集成电路总线)
-
2路SPI(Serial Peripheral Interface,串行外设接口)
如图 1.4.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。
5 Interconnect(内部互联)
将处理器,存储器接口,外设等连起来。
6 AXI 接口
ZYNQ 将高性能 ARM Cotex-A 系列处理器与高性能 FPGA 在单芯片内紧密结合,为设计带来了如减小体积和功耗、降低设计风险,增加设计灵活性等诸多优点。在将不同工艺特征的处理器与 FPGA 融合在一个芯片上之后,片内处理器与 FPGA 之间的互联通路就成了 ZYNQ 芯片设计的重中之重。如果 CotexA9 与 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 的连接,如下图所示:
-
AMBA: Advanced Microcontroller Bus Architecture
-
AXI: Advanced Extensible Interface
一、AMBA协议规范
AMBA协议起初是由ARM公司提出来的,全称为Advanced Microcontroller Bus Architecture,即高级微控制器总线架构。
-
AMBA V1.0:该版本包括高级系统总线(Advanced System Bus(ASB))和高级外设总线(Advanced Periphral Bus(APB));
-
AMBA V2.0:该版本在ASB和APB的基础上提出了高级高性能总线(Advanced High-performance Bus(AHB));
-
AMBA V3.0:该版本提出了高级可扩展接口(Advanced eXtensible Interface(AXI3)),高级高性能简化总线(AHB-Lite),高级跟踪总线(Advanced Trace Bus(ATB));
-
AMBA V4.0:该版本其实是ARM公司和Xilinx公司合作开发,共同提出的,主要包括AXI4,AXI4-Lite,AXI4-Stream等协议。适用于FPGA和可编程逻辑部分(PL)和片上Soc(PS)部分的通信。
二、AXI4互联协议
AXI4协议是ARM公司和Xilinx联合开发的新一代适用于全可编程片上Soc的片上互联协议。包括以下几个通道:
-
读地址通道(AR)
-
写地址通道(AW)
-
读数据通道(R)
-
写数据通道(W)
-
写响应通道(B)
当工作于读数据模式时,整个过程如图1所示,
图1 读数据模式过程
同时AXI4是基于READY和VALID信号的握手机制,当工作于读数据模式时,此时主设备启用READY信号线,READY信号线拉高,表示主设备已经准备好接收数据,从设备启用VALID信号,VALID信号拉高表示从设备已经准备好发送的数据,当READY和VALID信号线都为高时,读数据正式开始,整个握手过程如图2所示。
图2 读数据模式握手时序图
当工作于写数据模式时,整个过程如图3所示,
图3 写数据模式过程
当工作于写数据模式时,此时从设备启用READY信号线,READY信号线拉高,表示从设备已经准备好接收数据,主设备启用VALID信号,VALID信号拉高表示主设备已经准备好要写的数据,当READY和VALID信号线都为高时,写数据正式开始,整个握手过程如图所示。
写数据模式握手时序图
没有回复内容