Xilinx Zynq-7000嵌入式系统设计与实现:基于ARM Cortex-A9双核处理器和Vivado的设计方法(立体化教程)(txt+pdf+epub+mobi电子书下载)

作者:何宾

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Xilinx Zynq-7000嵌入式系统设计与实现:基于ARM Cortex-A9双核处理器和Vivado的设计方法(立体化教程)

Xilinx Zynq-7000嵌入式系统设计与实现:基于ARM Cortex-A9双核处理器和Vivado的设计方法(立体化教程)试读:

前言

本书是在作者已经出版的《Xilinx All Programmable Zynq-7000 SoC设计指南》一书的基础上进行大幅度修订而成的。在本书修订的过程中,汲取了广大读者的参考意见。修订后本书的特色主要包含:(1)本书大幅度增加了ARM Cortex-A9基本知识的讲解,包括指令集、处理器架构等方面的内容,降低读者阅读本书的入门门槛;(2)本书大幅度增加了ARM Cortex-A9应用和设计实例,包括MIO和EMIO、定时器、中断、DMA、NEON等,帮助读者进一步全面掌握ARM Cortex-A9处理器的使用方法;(3)本书开发环境使用了Xilinx最新的Vivado2015.4集成开发环境,使得本书能反映出Vivado集成开发环境的最新特性;(4)本书大幅度增加了Ubuntu操作系统在嵌入式系统中的应用实例,使得读者系统掌握Ubuntu构建、驱动程序开发,以及Qt应用程序开发的全部流程。

在修订本书的过程中,有更多新的体会,在此愿意与广大读者分享。(1)Xilinx推出的Zynq -7000 SoC器件是异构架构的典型代表,即把专用的嵌入式ARM Cortex-A9双核处理器和通用的大规模现场可编程门阵列FPGA结合在单个芯片中,将专用处理器的串行执行和FPGA的并行执行完美结合,为解决未来大数据处理、人工智能等复杂高性能算法处理铺平了道路。(2)新的设计工具的推出,比如Vivado HLS、SDSOC等,更加注重嵌入式系统的系统级建模,对未来设计方法将产生深远的影响。通过HLS工具,用户只需要编写C语言代码,就可以让工具自动转换和生成HDL代码,显著地提高了设计效率,缩短了开发周期。(3)随着异构架构和片上系统技术的不断发展,协同设计、协同仿真和协同调试将成为未来嵌入式系统开发者必须具备的品质。所谓的协同,要求设计者必须同时掌握软件和硬件知识,这与传统上软件和硬件分离的设计方法有着本质的区别。(4)特别值得一提的是,在2016年初Xilinx最新量产的Zynq UltraScale+ MPSoC采用了台积电的16nm工艺,将ARM的Cortex-A53四核处理器、ARM的Cortex-R5双核处理器、ARM的Mali-400 MP2 GPU及超大规模FPGA资源集成在单芯片中,为未来高性能数据中心提供强大的支持,进一步改善了数据中心的处理能力,可以预见越来越多的搜索引擎公司、电商平台及互联网企业等都会使用这种平台加速海量数据的处理。(5)由于半导体技术的不断发展,使得电子系统从传统的PCB板级进化到了芯片级,这对嵌入式系统的小型化、低功耗和可靠性的改善都提供了强大的保障,这也是未来嵌入式系统发展的潮流。

本书在修订的过程中,突出体现ARM的嵌入式和Xilinx最新的Vivado设计工具,所涵盖的内容是作者所出版图书中最多的,全书内容达到29章之多。在编排本书内容时,分成下面几大部分。(1)设计导论是本书中最基础的内容,目的要介绍Zynq-7000 SoC的架构、优势、设计方法,以及Vivado2015.4集成开发环境流程。(2)ARM AMBA规范是读者理解和掌握ARM Cortex-A9架构必须要知道的基本知识,掌握这些知识对于读者能顺利学习本书后续章节非常关键。(3)系统介绍Zynq-7000 SoC内PS所有功能部件的原理及使用方法,内容包括:Cor-tex-A9处理器架构、Cortex-A9指令集、片上存储器系统、设计流程、MIO/EMIO操作、中断和异常、定时器、DMA、安全性扩展、NEON、外设模块。(4)系统介绍Zynq-7000 SoC内PL的资源及Zynq-7000 SoC内的互联结构,使得读者可以清楚地了解并掌握在异构架构下,Cortex-A9专用处理器与PL内定制外设实现满足不同要求的连接方法。(5)系统介绍在Zynq-7000 SoC内PL通过GP、HP和ACP,构建不同定制外设,满足不同数据处理和传输性能要求的方法。(6)系统介绍基于Ubuntu操作系统构建嵌入式系统的方法,包括:Linux开发环境的构建、Zynq-7000 SoC内Ubuntu硬件运行环境的构建、Zynq-7000 SoC内Ubuntu软件运行环境的构建、驱动程序的开发以及基于Ubuntu构建图形处理系统。

在编写本书的过程中,特别感谢Xilinx公司大中华区大学计划经理陆家华、ARM公司亚太区大学计划经理陈炜、Xilinx公司亚太区传媒经理张俊伟给予的大力支持和帮助,也感谢Xilinx公司各位热心的技术支持给予的无私帮助。集宁师范学院物理系聂阳老师参与编写本书的第1 ~3章,作者的研究生张艳辉帮助作者设计和验证本书所有章节的设计案例,研究生李宝隆编写了本书第4 ~5章的内容,本科生汤宗美参与整理并编写了本书所有配套的教学资源。在本书出版的过程中,得到电子工业出版社领导和编辑的大力支持和帮助,在此也一并向他们表示感谢。何宾2016年5月于北京第1章 Zynq-7000 SoC设计导论

本章以Zynq-7000 SoC为代表对Xilinx公司的全可编程技术进行了全面的介绍,内容主要包括:全可编程片上系统基础知识、Zynq-7000 SoC功能和结构、Zynq-7000 SoC在嵌入式系统中的优势以及Zynq-7000 SoC的Vivado设计流程。

通过对以上内容全面系统的介绍,帮助读者把握全可编程片上系统的概念、设计方法和Zynq-7000 SoC的Vivado设计流程。1.1 全可编程片上系统基础知识

以传统的现场可编程门阵列(Field Programmable Gate Array, FPGA)结构为基础,将专用的中央处理器单元(Central Processing Unit, CPU)和可编程逻辑资源集成在单个芯片中,产生了一种全新的设计平台,我们将其称为全可编程片上系统(All Programmable Sys-tem-on-chip, All Programmable SoC)。这个全新平台的诞生,对全球信息技术的发展起到了巨大的推动作用。一方面,使得嵌入式系统的设计结构更加灵活,体积显著缩小,可靠性和系统整体性能明显提高;另一方面,使得FPGA可以进入到嵌入式系统应用领域,极大地扩展了FPGA的应用范围。1.1.1 全可编程片上系统的演进

在二三十年前,构建一个嵌入式系统需要使用大量的器件。典型的,对于一台个人电脑来说,其主板由大量的电子元器件、散热装置及固定连接器组成,如图1.1所示。图1.1 传统电脑的主板结构

从图中可以看出,实现一个嵌入式系统的基本结构需要使用大量的机械连接装置,以及额外大量的专用集成电路(Application Specific Integrated Circuit, ASIC)器件。这种传统的设计结构会带来以下4个方面的问题:(1)增加了系统的整体功耗;(2)增加了系统的总成本;(3)降低了系统的可靠性和安全性;(4)系统维护成本较高。

随着半导体技术的不断发展,可以将构成计算机基本结构的大量元件集成到单个芯片中,如CPU内核、总线结构、功能丰富的外设控制器,以及模数混合器件。典型地,ARM公司向其合作伙伴提供了以ARM CPU体系结构为基础的嵌入式处理器物理知识产权(Intel-lectual Property, IP)核,以这个嵌入式处理器结构为核心,可以在单个芯片内搭载功能丰富的外设资源,如图1.2所示。这种将一个计算机系统集成到单芯片中的结构称为片上系统(System On a Chip, SoC)。在这个结构中,集成了ARM CPU核、高级微控制器总线结构(Ad-vanced Microcontroller Bus Architecture, AMBA),以及用于和外部不同外设连接的物理IP核。图1.2 以ARM CPU体系结构为核心的片上系统

通过图1.1和图1.2的比较可以发现,采用SoC结构的优势体现在以下5个方面。

1)改善性能(1)由于将构成电脑结构的绝大部分功能部件集成在单个芯片中,显著地缩短了它们之间的连线长度,因此大大减少了CPU和外设之间信号的传输延迟。(2)在SoC内,由于构成计算机功能部件的晶体管具有更低的阻抗,因此也降低了逻辑门的翻转延迟。

2)降低功耗(1)由于半导体技术的不断发展,要求给SoC器件供电的电压在不断降低。典型地,SoC器件的供电电压可以降低到2.0V以下。(2)在SoC内,由于降低了晶体管的电容值,因此在相同的CPU工作频率下,显著降低了系统的整体功耗。

3)减少体积

由于将整个电脑系统的绝大多数元器件集成在一个芯片内,因此大大降低了整个系统的体积和重量。

4)可靠性提高

将整个电脑系统的绝大部份元器件集成在一个芯片内,减少了使用外部器件的数量,与外设连接所需要的接口数量也相应减少。因此,提高了系统的可靠性。

5)降低总成本

由于减少使用外部元器件的数量,因此构成系统所使用印制电路板的面积也相应地缩小。更进一步,缩小了整个系统的封装体积。所以,显著地降低构成系统的总成本。

正如任何事物总不是十全十美的,SoC也有其局限性,主要体现在以下3个方面。

1)灵活性差

传统电脑可以允许用户更新某个外部的元器件,如DDR RAM、显卡。但是,一旦SoC量产后,更新其内部功能部件的可能性基本没有。

2)专用性强

由于绝大多数的SoC器件都是用于某个专门的领域(用途)的,因此很难将其应用到其他的领域,或作为其他用途。

3)设计复杂

通常情况下对于基于SoC的系统设计,要求具备软件和硬件相关的系统级设计知识,这个要求要比传统基于PCB板的系统设计要求要高很多。

因此,一种更灵活的SoC结构应运而生,这就是全球知名的可编程逻辑器件厂商——美国Xilinx公司所提出的全可编程(All Programmable)SoC结构。与SoC相比,全可编程SoC充分利用了现场可编程门阵列内部结构的灵活性,克服了传统SoC器件灵活性差、专用性强及设计复杂的缺点;同时,又具备了传统SoC器件的所有优势。1.1.2 SoC与MCU和CPU的比较

本节将对片上系统SoC、中央处理单元CPU和微控制器MCU进行比较,以帮助读者清楚地区分它们并且能将它们正确的应用到不同的领域中。

1.SoC的特点

SoC的特点主要体现在以下5个方面。(1)在SoC器件内,可以集成多个功能强大的处理器内核。(2)在SoC器件内,可以集成容量更大的存储器块、不同的I/O资源,以及其他外设。(3)随着半导体工艺的不断发展,在SoC器件内也集成了功能更强大的图形处理器单元(Graphics Processing Unit, GPU)、数字信号处理器(Digital Signal Processor, DSP)以及视频和音频解码器等。(4)在基于SoC所构成的系统上,可以运行不同的操作系统。典型地,微软公司的Windows操作系统、Linux操作系统和谷歌公司的Android操作系统。(5)由于SoC具有强大的功能,因此它可以用于更高级的应用,如数字设备的主芯片(智能手机、平板电脑)。

2.CPU的特点

CPU的特点主要体现在以下两个方面。(1)CPU是单个处理器核。当然对于Intel公司量产的包含多个CPU核的芯片来说,已经不是传统意义上的CPU了,它已经体现了SoC的影子。(2)CPU可以用在绝大数的应用场合,但是需要外部额外的存储器和外设的支持。

3.MCU的特点

MCU的特点主要体现在以下3个方面。(1)典型地,只有一个处理器内核。(2)内部包含了存储器块、基本的I/O和其他外设。(3)MCU主要用于工业控制领域,如嵌入式应用。1.1.3 全可编程SoC诞生的背景

由于持续的要求嵌入式系统具有更多的功能、更好的性能和灵活性,因此传统上的设计方法已经不适应这种要求。为了得到更高的处理性能,设计人员尝试通过使用高性能的嵌入式处理器,但是遇到了吞吐量和性能方面的限制。而这种限制源于系统和结构的瓶颈,以及存储器带宽的限制。传统上解决问题的方法是专用,即对某个嵌入式系统的应用使用专门的解决方法。例如,数字信号处理器DSP用于解决某一类专门的数字信号处理。而对于一些高容量的应用,设计人员可能还需要专门开发ASIC芯片。

作为全球知名的可编程逻辑器件供应商,Xilinx将自己开发的8位PicoBlaze和32位Mi-croBlaze软核嵌入式处理器,以及IBM公司的PowerPC和ARM公司的双核Cortex-A9硬核处理器嵌入到FPGA芯片中。这种集成了嵌入式处理器的FPGA芯片被重新定义成All Pro-grammable SoC平台。这种基于FPGA的全可编程平台提供了一个更加灵活的解决方案。在这个解决方案中,单个可编程芯片上提供了大量不同的IP软核和硬核资源,并且设计人员可以在任何时间对这些资源进行升级。这种全可编程的结构特点,大大缩短了系统的开发时间。并且,同一平台能应用在很多领域,因此极大提高了平台的资源复用率。

全可编程结构的出现使得设计人员可以优化系统吞吐量及开发周期,并且提供前所未有的软件和硬件逻辑协同设计的灵活性。这种灵活性主要体现在当设计嵌入式系统时,设计人员能够根据系统性能要求和所提供的设计资源,灵活地确定如何将系统所实现的功能合理地分配到软件(也就是CPU)和可编程逻辑资源。这就是我们所说的软件和硬件设计的协同性,这种协同性不同于传统嵌入式系统的协同设计,这是因为虽然传统的嵌入式系统也使用软件和硬件的协同设计,但是基本上还是大量地使用分离的设计流程。典型地,硬件设计人员负责制定硬件设计规范,而软件设计人员负责制定软件设计规范,结果就导致参与嵌入式系统设计的软件和硬件开发人员对同一问题有着截然不同的理解。同时,对设计团队的沟通能力也提出了很高的要求。

目前,随着全可编程SoC容量和性能的不断提高,全新的全可编程技术已经应用到不同领域中,如通信、汽车电子、大数据处理、机器学习等。它已经不是传统意义上用于连接不同接口设备的连接逻辑,而是逐渐变成整个嵌入式系统最核心的部分。当传统的可编程逻辑器件发展到全可编程SoC后,设计的复杂度也不断提高,硬件和软件的协同设计在这个全可编程平台上显得非常重要。由于全可编程平台集成了大量的包括片上总线和存储器在内的设计资源,设计人员更多的是需要系统设计和系统结构方面的经验,尤其是系统建模的能力。

在全可编程平台设计阶段,设计已经从传统上以硬件描述语言HDL为中心的硬件逻辑设计,转换到了以C语言为代表的软件为中心的功能描述。所以,就形成了以C语言描述嵌入式系统结构的功能,而用HDL语言描述硬件的具体实现的设计方法,这也是基于全可编程SoC和传统上基于SoC器件实现嵌入式系统设计的最大区别,即真正实现了软件和硬件的协同设计。1.1.4 可编程SoC系统技术特点

与传统的嵌入式系统设计相比,使用全可编程SoC实现嵌入式系统的设计,具有以下4个方面的优势。

1.定制

基于全可编程SoC平台,嵌入式系统设计人员可以根据设计的要求灵活地选择所要连接的外设和控制器。这样设计人员就可以在单个全可编程SoC内设计出满足特定要求的定制外设,并且通过ARM AMBA总线与ARM处理器进行连接。对于一些非标准的外设,设计人员很容易地使用全可编程SoC实现。典型地,通过使用全可编程SoC,嵌入式开发人员很容易设计出具有10个UART接口的嵌入式系统,而在基于SoC的传统嵌入式系统设计中需要通过外扩UART芯片才能实现这个特定的功能和需求。

2.延长产品生命周期

一些公司,特别是为军方提供产品的公司,他们产品的供货周期常常比标准电子产品的周期要长。对于他们来说,电子元器件的停产将是一个非常严重的问题,因为这将导致这些公司无法继续稳定地为军方提供所需要的电子产品。解决这个问题的一个方法就是在传统的FPGA器件内嵌入软核处理器,这样就可以充分满足长期稳定供应电子产品的需求。

3.降低元器件成本

由于全可编程SoC功能的多样性,使得以前需要用很多外部专用ASIC器件才能实现的系统,现在可以只使用一个全可编程SoC器件实现。通过这个平台,不但减少在嵌入式系统设计中所使用的电子元器件数量,而且可以显著缩小电路板的尺寸,因此降低实现嵌入式系统的物理总成本。

4.硬件加速

当使用全可编程SoC实现嵌入式系统时,设计者可以根据需求在硬件实现和软件实现之间进行权衡,使所设计的嵌入式系统满足最好的性价比要求。例如,在实现一个嵌入式系统设计时,当使用软件实现算法成为整个系统性能的瓶颈时,设计人员可以选择在全可编程SoC内使用硬件逻辑定制协处理器引擎来高效地实现该算法。这个使用硬件逻辑实现的协处理器,可以通过AMBA接口与全可编程SoC内的ARM Cortex-A9嵌入式处理器连接。此外,通过Xilinx所提供的最新高级综合工具HLS,设计者很容易将软件瓶颈转换为由硬件处理。1.1.5 全可编程片上系统中的处理器类型

根据不同的需求,全可编程片上系统内的处理器可分为软核和硬核处理器。

1.硬核处理器

在芯片内的硅片上通过划分一定的区域来实现一个处理器称为硬核处理器,早期Xilinx将IBM公司的PowerPC硬核处理器集成到Virtex-II Pro到Virtex-5系列的FPGA芯片中。后来Xilinx将ARM公司的双核Cortex-A9硬核处理器集成到Zynq-7000系列的SoC芯片中。

2.软核处理器

对于一些对处理器性能要求不是很高的需求来说,没有必要在硅片上专门划分一定的区域来实现专用的处理器,而是通过使用FPGA芯片内的所提供的设计资源,包括LUT、BRAM、触发器和互连资源,实现一个处理器的功能,这就是软核处理器。对于软核处理器来说,它通过HDL语言或网表进行描述,然后通过综合后才能被使用。

当采用硬核处理器时,其性能较高,但是整个器件的成本也相对较高,同时灵活性较差。而采用软核处理器正好相反,即性能较低,但是整个器件的成本相对较低,同时灵活性较高,也就是只有需要的时候,才在FPGA内通过使用逻辑资源生成一个专用嵌入式处理器。1.2 Zynq-7000 SoC功能和结构

本节将对Zynq-7000 SoC的功能和结构进行概述,以帮助读者从整体上把握基于Zynq-7000的全可编程SoC所提供的功能。1.2.1 Zynq-7000 SoC产品分类及资源

Zynq-7000 SoC产品分类及资源如表1.1所示。表1.1 Zynq-7000 SoC产品分类及资源1.2.2 Zynq-7000 SoC的功能

Zynq-7000系列基于Xilinx全可编程的可扩展处理平台(Extensible Processing Platform, EPP)结构,该结构在单芯片内集成了基于ARM公司双核ARM Cortex-A9多核处理器的处理系统(Processing System, PS)和基于Xilinx可编程逻辑资源的可编程逻辑(Program-mable Logic, PL)系统,如图1.3所示。同时,该结构基于最新的高性能低功耗(High Performance Low Power, HPL)的28nm、高k金属栅极(High-k Metal Gate, HKMG)工艺,这样就保证了该器件在高性能运行的同时,具有了比同类Cortex-A9双核处理器更低的功耗。图1.3 Zynq-7000 SoC内部结构

在该全可编程SoC内,双核ARM Cortex-A9多核CPU是PS的心脏,它包含片上存储器、外部存储器接口和具有丰富功能的外设。

与传统的FPGA和SoC相比,Zynq-7000全可编程SoC不但提供了FPGA的灵活性和可扩展性,同时也提供了与专用集成电路(Application-Specific Integrated Circuit, ASIC)和专用标准产品(Appciation-Specific Standard Product, ASSP)相关的性能、功耗和易用性。Zynq-7000 SoC使得设计者能使用工业标准的工具在单个平台上实现高性能和低成本的应用。可扩展处理平台中的每个器件包含了相同的PS,不同器件所包含的PL和I/O资源是不同的。Zynq-7000平台可以应用在很多领域,包括汽车驾驶员辅助系统、驾驶员信息系统和娱乐系统;广播级的摄像机;工业的电机控制、工业组网和机器视觉;IP和智能相机;LTE的无线和基带;医疗诊断和成像;多功能打印机;视频和夜视装备。

Zynq-7000结构便于将定制逻辑和软件分别映射到PL和PS中。这样就可实现独一无二和差异化的系统功能。带有PL的PS可扩展处理平台的系统集成,提供了两片解决方案(比如ASSP和FPGA)中,由于I/O带宽、松散耦合和功耗预算所不能达到的性能。

与传统配置FPGA方法不同的是,Zynq-7000 SoC总是最先启动PS内的处理器,这样允许PS上运行的基于软件程序用于启动系统并且配置PL。这样,可以将配置PL的过程设置成启动过程的一部分或者在将来的某个时间再单独地配置PL。此外,可以实现PL的完全重配置或者使用部分可重配置。注:部分可重配置(Partional Reconfiguration, PR),允许动态地重新配置PL中的某一个部分,这样能够对设计进行动态地修改。1.2.3 Zynq-7000 SoC处理系统PS的构成

本节将对处理器系统内的各个模块进行简单介绍,用于帮助读者了解PS可以实现的功能。

1.应用处理器单元APU

应用处理器单元APU提供了大量的高性能特性和兼容标准ARM处理器的能力。主要表现在:(1)双核ARM Cortex-A9多核处理器CPU(ARM V7)。(2)实时运行选项。允许单个处理器,以及对称或非对称的多处理(Symmetrical Multi-processing, SMP)配置。(3)ARM V7 ISA。提供标准的ARM指令和Thumb-2指令,以及Jazelle RTC和Jazelle DBX JAVA加速。(4)每个Cortex-A9处理器核都有独立的NEON,可以实现128位SIMD协处理器和VFPv3。(5)每个Cortex-A9处理器核包含带有校验的32KB L1指令高速缓存和32KB L1数据高速缓存。(6)双核Cortex-A9共享带有校验的512KB L2高速缓存。(7)每个Cortex-A9有私有定时器和看门狗定时器。(8)系统级的控制寄存器(System-Level Control Registers, SLCRs),一组不同的控制器用来控制PS的行为。(9)侦测控制单元(Snoop Control Unit, SCU)包含了L1和L2的一致性要求。(10)从PL(主设备)到PS(从设备)的加速器一致性端口(Accelerator Coherency Port, ACP)。(11)提供带有校验功能的256KB片上存储器OCM。它提供了两个访问端口。Zynq-7000内的Cortex-A9处理器、可编程逻辑及中央互联均可访问OCM。与PS内的L2处于同一层次,但没有提供缓存能力。(12)PS内提供的64位高级可扩展接口(Advanced Extended Interface, AXI)从端口,提供了访问L2高速缓存和片上存储器OCM的能力,以及保证在数据交易时与L1和L2高速缓存的数据一致性。(13)DMA控制器。其中的四个通道用于PS,实现存储器与系统内的任何存储器的数据交换;另外四个通道用于PL,实现存储器到PL及PL到存储器之间的数据交换。(14)通用的中断控制器(General Interrupt Controller, GIC)。它们有各自独立的中断屏蔽和中断优先级。其中包含5个CPU私有外设中断(Private Periphercal Interrupt, PPI)、16个CPU软件中断(Software Generated Interrupt, SGI),以及分配来自系统、PS和PL剩余部分的共享外设中断(Shared Peripheral Interrupt, SPI)(其中20个来自PL)。

此外,支持来自CPU发送到PL的等待中断(Wait for Interrupt, WFI)和等待事件(Wait for Event, WFE)信号,以及扩展的安全特性支持TrustZone技术。

2.存储器接口

存储器接口提供对不同存储器类型的支持。

1)DDR控制器(1)支持DDR3、DDR2、LPDDR-2类型的存储器,由器件的速度和温度等级决定工作速度。(2)该控制器提供了16/32位数据宽度。(3)支持16位ECC。(4)使用最多73个专用的PS引脚。(5)模块(不是DIMM)。对于32位宽度来说,可选配置包括4 × 8位、2 × 16位、1 × 32位;对于16位宽度来说,可选配置包括2 × 8位、1 × 16位。(6)根据可配置的空闲周期,自动进入DDR低功耗状态及自动退出DDR低功耗状态。(7)数据读选通自动标定。(8)写数据字节使能支持每拍数据。(9)使用高优先级读(High Pripority Read, HPR)队列的低延迟读机制。(10)支持发给每个端口的特殊紧急信号。(11)在64MB边界上可编程TrustZone区域。(12)对于两个不同ID来说,每个端口提供了互斥的访问能力,但不支持锁定交易功能。

2)四-SPI控制器(1)提供了连接1个或两个SPI设备的能力。(2)支持一位和两位数据宽度的读操作。(3)用于I/O模块100MHz的32位APB3.0接口,允许包括编程、读和配置的全设备操作。(4)100MHz 32位AXI线性地址映射接口用于读操作。(5)支持单个芯片选择线。(6)支持写保护信号。(7)提供可用的4位双向I/O信号线。(8)支持读速度为×1、×2和×4,写速度为×1和×4。(9)主模式下最高的SPI时钟频率可以达到100MHz。(10)252字节入口FIFO深度,用于提高四-SPI读效率。(11)支持四-SPI器件的存储容量最高为128Mb。(12)支持双四-SPI器件,并列的两个四SPI器件。

3)静态存储器控制器(Static Memory Controller, SMC)

SMC提供了NAND存储器和并行SRAM/NOR存储器的读/写控制功能。(1)对于NAND存储控制器来说,提供了下面的功能:支持8/16位的I/O数据宽度;提供一个片选信号;支持ONFI规范1.0;提供16字读和16字写数据FIFO的能力;提供8字命令FIFO;用户可通过配置界面修改I/O周期的时序;提供ECC辅助功能;支持异步存储器工作模式。(2)对于并行SRAM/NOR控制器来说,提供了下面的功能:支持8位数据宽度,以及最多25位地址信号;提供两个片选信号;提供16个字读和16个字写数据FIFO;提供8个字命令FIFO;对于每个存储器,提供用户可配置的可编程I/O周期时序;支持异步存储器操作模式。

3.I/O外设

Zynq-7000的PS系统提供了用于满足不同要求的I/O接口。

1)通用输入/输出端口GPIO(1)PS提供了54个可用的GPIO信号。通过复用I/O模块MIO,将这些信号连接到Zynq-7000器件的外部引脚,并且可以通过软件程序控制这些信号的三态使能功能。(2)通过扩展的复用I/O模块EMIO,可以将PS内的GPIO信号引入到Zynq-7000内的PL单元,支持最多192个GPIO信号,其中64个为输入,另外128个为输出。(3)可以基于单个或者组,对每个GPIO的功能进行动态地编程,即实现使能、按位或者分组写数据,输出使能和方向控制。(4)根据每个GPIO所配置的中断能力,支持读取中断的状态;支持在上升沿、下降沿、任意边沿、高电平或低电平产生中断信号。

2)两个三模式以太网控制器(1)在RGMI II模式时,使用MIO引脚和外部的PHY。(2)额外的接口使用PL内带有额外软核的PL SelectIO和外部的PHY。(3)在SGMII模式时,使用Zynq-7000 PL内的GTX收发器模块。(4)该控制器提供可以实现分散—聚集功能的DMA控制器。(5)支持IEEE802.3和IEEE1588 V2.0协议。(6)支持唤醒功能。

3)两个USB控制器(1)使用相同硬件的USB2.0高速OTG(On-The-Go)双重角色USB主机控制器或者USB设备控制器操作。(2)只提供MIO引脚。(3)内建DMA控制器。(4)支持USB2.0高速设备。(5)可作为USB2.0高速主机控制器。它所提供的寄存器和数据结构遵循扩展主机控制器接口(Enhanced Host Controller Interface, EHCI)规范。(6)支持USB收发器低引脚数接口(USB Low Pin Interface, ULPI)。ULPI支持8位。(7)要求使用外部的PHY。(8)支持最多12个端点。

4)两个SD/SDIO控制器(1)它可以作为Zynq-7000基本的启动设备。(2)内建DMA控制器。(3)该控制器只支持主模式。(4)支持SD规范2.0。(5)支持全速和低速设备。(6)支持1位和4位数据接口。(7)支持低速时钟范围0 ~400KHz。(8)支持高速接口。全速时钟频率范围0 ~50MHz,最大吞吐量为25MB/s。(9)支持存储器、I/O和组合卡。(10)支持电源控制模式。(11)支持中断。(12)1KB数据FIFO接口。

5)两个SPI控制器(1)提供四个信号线,包括MOSI、MISO、SCLK、SS。(2)支持全双工模式,该模式支持同时接收和发送数据能力。(3)在主机模式下,支持下面功能:手工或自动开始数据传输;手工或自动从设备选择SS模式;支持最多3个从设备选择线;允许使用外部3-8译码选择设备;软件可控制的发送延迟。(4)在从模式下,软件可配置开始检测模式。(5)在多主环境下,如果没有使能,则驱动为三态。如果检测到多个主设备,则识别出一个错误条件。(6)通过MIO模块,该控制器支持最高50MHz的外部SPI时钟。当通过EMIO到PL的SelectIO引脚时,支持最高25MHz时钟频率。(7)可选择所使用的主时钟。(8)支持可编程的主波特率分频器。(9)支持独立的128字节读FIFO和128字节的写FIFO,每个FIFO为8个字节宽度。(10)软件程序可控制的FIFO门槛。(11)支持可编程的时钟相位和极性。(12)作为驱动中断的设备,软件能轮询状态或功能。(13)可编程产生中断。

6)两个CAN控制器(1)遵守ISO11898-1、CAN2.0A和CAN2.0B标准。(2)支持标准(11位标识符)和扩展(29位标识符)帧。(3)支持最高速度为1Mb/s。(4)带有64个消息深度的发送消息FIFO。(5)发送优先级贯穿一个高优先级发送缓冲区。(6)Tx FIFO和Rx FIFO支持水印中断。(7)在普通模式下,当错误或丢失仲裁时,自动重新发送。(8)可保存64个消息的接收消息FIFO。(9)提供最多4个接收滤波器,用于对接收消息进行过滤。(10)支持带有自动唤醒的休眠模式。(11)支持侦听模式。(12)提供闭环模式,用于诊断应用。(13)可屏蔽的错误和状态中断。(14)用于接收消息的16位时间戳。(15)可读的错误计数器。

7)两个UART控制器(1)可编程的波特率发生器。(2)提供最多64字节的接收和发送FIFO。(3)可选择的6、7或8个数据位。(4)可选择的1、1.5或2个停止位。(5)可选择的奇、偶,空格、标记或没有奇偶。(6)可选择的奇、偶、帧和溢出错误检测。(7)支持换行符生成和检测。(8)支持自动呼应、本地环路和远程环路通道模式。(9)支持产生中断。(10)支持通过MIO和EMIO模块提供Rx和Tx信号。(11)通过EMIO接口模块,可以提供CTS、RTS、DSR、DTR、RI和DCD等调制解调器控制信号。

8)两个I2C控制器(1)支持16字节FIFO。(2)支持I2C总线规范V2。(3)可程序控制的普通/快速总线数据率。(4)支持主设备模式。在该模式下,支持写传输、读传输、地址扩展,以及用于慢速处理器服务的HOLD。(5)支持从设备监控器模式。(6)支持从设备模式。在该模式下,支持从设备发送器和从设备接收器、支持地址扩展、支持软件可编程的从设备响应地址。(7)支持HOLD,防止溢出条件。(8)支持TO中断标志,避免停止条件。(9)作为中断驱动设备时,软件能轮询状态或功能。(10)可通过软件控制产生中断。

9)总共54个PS一侧的MIO引脚(1)这54个引脚分成两组。第0组包括16个引脚,引脚范围0 ~ 15;第1组包括38个引脚,引脚范围16 ~53。(2)通过配置,可以选择支持LVTTL 3.3V、LVCMOS 3.3V、LVCMOS 2.5V、LVCMOS 1.8V或HSTL 1.8V标准。注:由于MIO引脚的个数为54个,因此以上这些I/O外设不能同时有效,在后面的设计中将详细说明。1.2.4 Zynq-7000 SoC可编程逻辑PL的构成

PL提供了用户可配置能力的丰富结构。(1)可配置逻辑块(Configurable Logic Block, CLB)资源。在CLB内提供了下面的资源。

① 6输入查找表(Look-UP Table, LUT)。

② LUT内的存储器能力。

③ 寄存器和移位寄存器功能。

④ 支持级联的加法器。(2)36Kb容量的BRAM资源。它的特性主要如下:

① 提供了双端口访问能力。

② 支持最多72位数据宽度。

③ 可配置为双端口18Kb的存储器。

④ 可编程的FIFO逻辑。

⑤ 内建错误校准电路。(3)数字信号处理DSP48E1资源

① 提供25 × 18宽度的二进制补码乘法器/累加器,可以实现高达48位的高分辨率信号处理器功能。

② 提供25位的预加法器,用于降低功耗及优化对称滤波器应用。

③ 提供高级特性,用于可选的可级联流水线,以及可选的ALU和专用总线。(4)时钟管理单元,提供了下面的功能:

① 用于低抖动时钟分布的高速缓冲区和布线。

② 频率合成及相位移动。

③ 低抖动时钟生成和抖动过滤。(5)可配置的I/O资源。提供了下面的功能:

① 支持高性能的SelectIO技术。

② 封装内提供高频去耦合电路,用于扩展的信号完整性。

③ 数字控制的阻抗DCI能三态,用于最低的功耗和高速I/O操作。其中,高范围(High Range, HR)IO支持电压范围为1.2 ~ 3.3V,高性能(High Performance, HP)IO支持电压范围为1.2 ~1.8V(仅对Z-7030和Z-7045器件有效)。(6)低功耗的吉比特收发器(仅Z-7030和Z-7045器件存在):

① 高性能收发器,其速率最高达到12.5Gb/s(GTX)。

② 低功耗模式用于芯片和芯片的连接。

③ 提供高级发送预加重和后加重能力,接收器线性(CTLE)和判决反馈均衡(Deci-sion Feedback Equalization, DFE),包含自适应均衡用于额外的裕量。(7)模拟—数字转换器(XADC):

① 两个12位模拟到数字转换器ADC,采样速率高达1Msps。

② 提供最多17个用户可配置的模拟输入端口。

③ 用户可以选择片上或外部参考源。

④ 提供用于检测温度的片上温度传感器,最大误差为±4℃。

⑤ 提供用于检测芯片各个供电电压的电源供电传感器,最大误差为± 1%。

⑥ JTAG连续的访问ADC测量结果。(8)用于PCI-E设计的集成接口模块(仅Z-7030和Z-7045器件可用):

① 兼容PCI-E基本规范2.1,提供端点和根端口能力。

② 支持Gen1(2.5Gb/s)和Gen2(5.0 Gb/s)速度。

③ 提供高级配置选项、高级错误报告(Advanced Error Report, AER)、端到端的CRC (End-to-End CRC, ECRC)高级错误报告及ECRC特性。1.2.5 Zynq-7000 SoC内的互联结构

Zynq-7000 SoC内的互联结构用于实现Zynq-7000 SoC内PS内各个模块的连接,以及PS和PL的连接。

1.PS内模块的互联

在PS内用于连接各个功能模块主要包含OCM互联单元和中央互联单元。

1)OCM互联(1)提供来自中央互联和PL的访问,它用于对256KB OCM的访问。(2)CPU和ACP接口。通过SCU访问OCM时,有最低的延迟。

2)中央互联(1)中央互联为64位宽度,通过它可以将IO端口和DMA控制器连接到DDR存储器控制器和OCM。此外,可以连接到用于互联PL逻辑的AXI_GP接口。(2)用于连接以太网、USB和SD/SDIO控制器内的本地DMA单元。(3)用于将PS内的主设备与IO端口连接在一起。

2.PS-PL接口

PS到PL的接口提供了可用于PL内定制外设的所有可用信号,通过PS-PL接口可以实现PL内定制的外设(也称为IP核)与PS内的Cortex-A9双核处理器及相关资源的连接。

在PS和PL之间提供了两种类型的接口。

1)功能接口

包含AXI互联,用于大多数I/O外设、中断、DMA流控制、时钟和调试接口的扩展MIO接口(EMIO)。这些信号可用于连接PL内用户设计的IP模块。PL AXI接口基于AXI3的接口规范。典型的包括AXI-GP、AXI-HP和AXI-ACP接口。每个接口由多个AXI通道构成。PL AXI接口如表1.2所示。下面对这些接口进行详细说明。表1.2 PL AXI接口注:对Zynq-7000内各个元件的描述是从PS的角度出发的。例如,PS上一个到PL的通用从接口,表示主设备为PL。一个高性能的从接口表示高性能的主设备存在于PL中。一个通用的主接口表示PS是主设备,从设备位于PL中。(1)AXI_ACP接口,它是PL内的一个64位高速缓存一致性主端口。(2)ACI_HP,它是PL内的4个高性能/带宽主设备端口。其主要特性如下:

① 支持32位/64位数据宽度的主设备接口。

②在32位从接口配置模式下,高效地调整数据宽度及高效地扩展到64位数据宽度,用于非对齐的32位数据传输。

③ 通过AxCACHE[1],动态地实现在32位和64位接口之间宽度的转换。

④ 分开地R/W可编程发布能力,用于读和写命令。

⑤ 在PS和PL之间,提供异步时钟穿越所有AXI接口的能力。

⑥对于读和写操作,提供1KB(128 × 64位)容量的数据FIFO,用于消除长延迟传输。

⑦ 可选择使用来自PL端口的QoS信号。

⑧ 对命令FIFO和数据FIFO的填充计数值可用于PL内定制的外设。

⑨ 支持标准的AXI3.0接口。

⑩ 在14 ~70个命令(根据猝发长度)范围内,从接口可以接受更多的读操作。

⑪ 在8 ~32个命令(根据猝发长度)范围内,从接口可以接受更多的写操作。(3)AXI_GP,提供四个通用端口。

① 它包含两个32位主接口和两个32位从接口。

② 在PS和PL之间,异步时钟域可以穿越所有AXI接口。

③ 支持标准的AXI3.0接口。(4)AXI_ACP,提供了64位从接口。

连接到侦测控制单元SCU,用于CPU和PL之间的高速缓存一致性。

2)配置信号

包含处理器配置访问端口(Processor Configuration Access Port, PCAP)、配置状态、单个事件翻转(Single Event Upset, SEU)和Program/Done/Init(编程/完成/初始化)。在PL配置块内的这些信号连接到固定的信号,用于PS控制。1.2.6 Zynq-7000 SoC的供电引脚

PS和PL供电是相互独立的。然而需要强调的是,在给PL供电以前,必须先给PS供电。供电引脚结构如图1.4所示,表1.3列出了Zynq-7000 SoC供电引脚的正常电压和描述。图1.4 Zynq-7000内的信号、接口和引脚表1.3 Zynq-7000 SoC供电引脚的正常电压和描述1.2.7 Zynq-7000 SoC内MIO到EMIO的连接

MIO是I/O外设连接的基础。在Zynq-7000 SoC内MIO引脚个数是有限的,总共54个。通过配置,可以将I/O信号连接到MIO引脚。此外,通过EMIO接口,也可以将PS内的I/O外设连接到PL中(包含PL器件引脚)。如图1.5所示,允许PS内的I/O外设控制器与PL内的用户定制逻辑连接,这对于访问更多的器件引脚(PL引脚)是非常有用的。图1.5 MIO到EMIO的结构

I/O控制器的I/O多路复用信号是不同的,即一些IO端口信号仅能使用MIO引脚,而不能使用EMIO,也就是说这些IO端口信号不能通过EMIO引到PL中。注:PS内的USB端口信号、四-SPI端口信号和SMC接口信号就不能通过EMIO引入到PL中。

在Zynq-7000 SoC中,绝大多数IO端口引脚可以使用MIO或EMIO,而一些接口信号线仅可以通过EMIO访问。每个I/O外设可用布线能力,如表1.4所示。表1.4 I/O外设MIO-EMIO接口布线外设MIO布线EMIO布线TTC[0时钟输入、Wave_out输出、时钟输入、Wave_out输出、来,1]来自每个计数器的一对信号之每个计数器的三对信号SWDT时钟输入、复位输出时钟输入、复位输出并行NOR/SRAM和NAND SMC不可用Flash四-SPI[0,串行、双和四模式不可用1]SDIO[50MHz25MHz0,1]最多54 I/O通道(GPIO组0和64 GPIO通道,带有输入、输GPIO1)出和三态控制(GPIO组2和3)USB[0主机,设备和OTG不可用,1]以太GMII、RGMII V2.0、RGMII RGMII V2.0网[0,1]V1.3、RMII、MII、SGMIISPI[0,50MHz不可用1]CAN[0ISO11898-1、CAN 2.0A/B不可用,1]UART[TX、RX、DTR、DCD、DSR、简单UART,两线(Tx/Rx)0,1]RL、RTS、CTSI2C[0,SCL、SDA[0,1]SCL、SDA[0,1]1]PJTATCK、TMS、TDI、TDO,用于TCK、TMS、TDI、TDOG三态TDOTrace Port 最多16位数据最多32位数据IU

通过MIO, I/O外设端口映射可以出现在不同的位置,如图1.6所示。使用来自多个端口的映射信号,能实现对每个信号的布线。甚至可以通过EMIO接口,将PS引脚和PL引脚混合,来构建信号。图1.6 I/O系统结构图

除了千兆以太网外,大多数的外设在MIO和EMIO之间保持相同的功能。对于PS内的千兆以太网控制器来说,为了减少所使用引脚的个数,当工作在RGMII模式时,使用4位MIO端口引脚,其速率为250MHz;当工作在GMII模式时,使用8位的EMIO引脚,其速率为125MHz。在通过EMIO端口实现数据交换前,必须通过LVL_SHFTR_EN使能PL电平转换器。

在互联端,USB、以太网和SDIO外设连接到中央互联,用于为6个DMA通道提供服务。通过PS内提供的AHB互联端口,软件程序可以访问从模式下的四-SPI外设和SMC外设。此外,通过PS内提供的APB互联端口,软件程序也可以访问GPIO、SPI、CAN、UART和I2C从控制器。除了SDIO控制器(每个有两个AHB接口)外,通过APB互联端口,软件程序可以访问所有的控制寄存器和状态寄存器。上述访问方法是为了在每个控制器接口所需要的带宽之间进行权衡。注:AHB和APB是ARM AMBA规范的一部分,将在本书第2章详细介绍。

PS内的外设在MIO中可分配的引脚位置如图1.7所示,该图给出了当设计者在MIO的54个引脚上为PS内的外设分配引脚时的快速分配参考。图1.7 Zynq-7000 SoC处理系统内外设可分配的MIO引脚图注:设计者在为PS一侧的外设分配可用的MIO引脚时,必须遵循这些规则;否则会出现MIO分配错误,以及PCB的设计错误。

1.MIO引脚分配考虑因素

通常,给每个引脚分配一个功能。但是下面要讨论一些例外的情况。当使用EMIO作为布线的另一个选择时,PS内外设的最高时钟频率将降低。注:Zynq-7000 SoC数据手册给出了使用MIO的每个接口时钟频率。

1)两个MIO电压组

MIO引脚分割成两个独立配置的I/O缓冲区集合:(1)第0组(Bank0),引脚范围为MIO[15∶0]。(2)第1组(Bank1),引脚范围为MIO[53∶16]。注:通过配置界面,用户可以设置每个引脚的工作电压,可选的配置为1.8V、2.5V或3.3V。

2)启动模式引脚

用于设置启动模式的MIO引脚,可以分配给PS内的I/O外设使用。在可用的MIO引脚中,引脚MIO[8∶2]用于确定:①启动Zynq-7000 SoC的外部设备;②使能/旁路PLL时钟;③MIO组所使用的电压模式。

当释放PS_POR_B复位信号后,Zynq-7000 SoC将对启动模式引脚采样PS_CLK个周期,用于确定Zynq-7000 SoC的启动模式。注:在设计PCB的时候,使用20kΩ上拉或下拉电阻,将这些信号连接到VCC或GND。

3)I/O缓冲区输出使能控制

由MIO_PIN[TRI_ENABLE]寄存器位来控制每个MIO输入/输出缓冲区的输出使能,MIO_MST_TRI寄存器位选择信号的类型(输入或不是)。当满足下面的条件时,使能输出:

MIO_PIN_xx[TRI_ENABLE] =0, MIO_MST_TRIx[PIN_xx_TRI] =0并且(信号为输出或I/O外设希望驱动一个I/O信号。

4)选择从SDIO设备启动Zynq-7000 SoC

当选择从SDIO设备启动Zynq-7000 SoC时,BootROM希望将外部的SDIO设备(如MICRO SD/Mini SD卡)通过SD卡槽连接到Zynq-7000 SoC器件的MIO[40∶45]引脚。注:MIO[40∶45]引脚分配给SDIO 0外设。

5)静态存储器控制器(SMC)接口

在使用Zynq-7000 SoC实现嵌入式系统设计时,在PS一侧的MIO只提供一个SMC接口。这是由于SMC控制器会消耗大量的MIO引脚,并且Zynq-7000 SoC不提供将SMC接口信号通过EMIO引入到PL的功能。

在Zynq-7000 SoC嵌入式系统设计中,当使用MIO为SMC分配引脚实现连接外部一个8位的NAND Flash时,由于占用了Zynq-7000 SoC为四-SPI控制器所可以分配的MIO引脚,因此在该设计中不可以使用PS内的四-SPI控制器,并且测试端口限制在8位。如果实现一个16位的NAND Flash,则消耗额外的引脚,不可以使用以太网0。SRAM/NOR接口消耗了大约70%的MIO引脚。注:(1)在通过MIO连接外部SRAM/NOR时,可选择使用Busy信号和高地址位。(2)当使用SMC接口连接外部静态存储器时,MIO为其分配的信号引脚将跨越两个MIO电压组。

6)四-SPI接口

如果在基于Zynq-7000 SoC的嵌入式系统设计中使用了PS内的四-SPI子系统,则必须使用引脚较少的存储器四-SPI接口(QSPI_0)。另一个SPI接口(QSPI_1)是可选的,它们用于两个存储器的布局(并行或堆叠)。注:在Zynq-7000 SoC的嵌入式设计中,不要单独使用四-SPI接口1。

7)MIO[8∶7]引脚

这些MIO引脚只能用于输出。GPIO通道7和通道8只能配置为输出。注:读者在自己设计Zynq-7000 SoC系统时,务必要注意上面的MIO分配的一些限制条件。

2.MIO信号布线连接

MIO_PIN_[53∶0]配置寄存器用于控制MIO内的信号连接。在Zynq-7000 SoC中使用4级复用,用于控制MIO到MIO的各个输入/输出信号。MIO信号布线连接如图1.8所示。高速数据信号(如用于吉比特以太网的RGMII和用于USB的ULP1)只通过1级多路复用,而低速信号线(如UART和I2C端口)可以通过所有4级多路复用。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书

若在网站上没有找合适的书籍,可联系网站客服获取,各类电子版图书资料皆有。

客服微信:xzh432

登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?