引言:《Exploring Zynq MPSoC With PYNQ and Machine Learning Applications》是当年Zynq Book(ZYNQ-7000)的升级版本,在新版本中,不仅仅介绍了MPSOC的体系结构和应用场景,更是结合当前应用最广的PYNQ框架和机器学习应用进行分析。作为一本不可多得的免费电子英文书籍,本书既是使用Zynq
MPSoC的开发人员的实用指南,同样也是希望熟悉器件及其相关设计方法的技术人员的有效参考资料。
前 言
Zynq MPSoC(多处理器片上系统)是Xilinx公司推出的第二代SoC系列产品,集成了复杂的处理系统,包括ARM Cortex-A53应用程序处理器和ARM Cortex-R5实时处理器,以及FPGA可编程逻辑。
来自苏格兰斯特拉斯克莱德大学(University of Strathclyde)的Louise Crockett团队基于这一平台的软件和硬件结构,撰写了Exploring Zynq MPSoC: With PYNQ and Machine Learning Applications,综合且全面地介绍了软件堆栈、多处理器处理系统以及可编程硬件阵列等问题。本书既是使用Zynq MPSoC的开发人员的实用指南,同样也是希望熟悉器件及其相关设计方法的技术人员的有效参考。程序员可以学会如何使用简单的软件界面和框架来快速实现他们的机器学习算法,系统设计师可以利用它来获取系统的最高性能。
《基于PYNQ和机器学习探索Zynq MPSoC》将带领读者了解软件堆栈、多处理器处理系统和强大的可编程硬件阵列方面的重要内容。MPSoC处理器系统最多配备四个ARM Cortex-A53处理器内核和两个ARM Cortex-R5实时处理器内核。其FPGA结构由强大的DSP Slices阵列和大量分布式RAM扩展而成。这种新架构使处理器系统从当今新兴人工智能应用所需的复杂算术和数据移动中解放出来。这本书特别关注软件堆栈和编程工具的阐述,有专门的一章专门介绍PYNQ编程环境。
PYNQ是Xilinx的一个开源项目,可以轻松地在Zynq平台上设计嵌入式系统。使用Python语言和库,设计者可以利用可编程逻辑和ARM微处理器的优势来构建更强大、更令人兴奋的嵌入式系统。本书的E部分讨论了Zynq MPSoC平台上许多应用程序的实现。这包括对用于有效实现神经网络的FINN-R开源框架的详细讨论。
第一章 简 介
接下来将全面介绍Zynq MPSoC器件,它是Xilinx的一种片上集成系统(SoC)器件,它继承了其前身Zynq-7000的众多特性。
术语MPSoC反映了其是一种多处理器片上系统,它包括许多不同的处理单元,每个处理单元都针对特定目的进行了优化。例如,应用处理器、实时处理器和图形处理器,以及现场可编程门阵列(FPGA)可编程逻辑。该器件的组成将在后面的章节中详细介绍,但就目前而言,我们可以简单地认为Zynq MPSoC为工作提供了各种最佳资源!
图2:Zynq UltraScale+ EV内部框图
除了Zynq MPSoC体系结构之外,设计方法和软件工具也非常重要。适当的设计方法可以充分利用Zynq MPSoC的组件来解决实际设计问题。与以前的器件相比,随着处理组件的扩展,设计师能够利用Zynq MPSoC同时在系统性能、可靠性、成本、功耗、安全性、上市时间等方面实现预期结果以及适用的任何其他约束。因此,本书重要的一个方面是概述系统开发,包括部署在处理核上的设计工具和操作系统。
我们在Xilinx SDx工具中包含了一个特定功能,它使系统能够完全使用软件代码进行描述,然后在各种可用的处理元素之间进行分区(在用户指导下)。SDx中的SD代表软件定义,如将在后面的章节中进一步讨论的,基于软件的设计正成为可编程设备越来越强大的设计方法。Zynq MPSoC器件的应用多种多样,根据Zynq-7000的先前经验和Zynq MPC提供的扩展组件,Zynq MPSoC在高级驾驶员辅助系统(ADAS)、计算机视觉、大数据分析、软件无线电(SDR)以及高价值监控和自动化(工业物联网,IoT)等领域广泛应用。
1.为什么我应该感兴趣?
传统上,半导体器件市场包括多个领域,包括逻辑(固定和可编程)、存储器、微处理器、光学、模拟、分立元件、微控制器、传感器系统和专用数字信号处理器。2017年,全球半导体市场总价值为4122亿美元,为有史以来的最高水平,与前一年相比增长了20%以上。半导体器件可以实现从儿童玩具到笔记本电脑、核电站控制系统、国际空间站的一切功能。简而言之,我们离不开他们!
近年来,系统集成已成为一个备受关注的领域。简单来说,为什么要制作系统所需的各种组件,然后将它们连接在一起?设计将所需资源组合到单个芯片中的器件会更好吗?由此我们提出了片上系统(SoC)的思想。
参考上面确定的半导体类别,请注意,Zynq和Zynq MPSoC等SoC包括可编程逻辑、微处理器和存储器,这些是嵌入式系统中通常需要的主要组件。事实上,这些器件还包括一些模拟电路,以及支持数字信号处理(DSP)应用的算术引擎,类似于DSP处理器提供的功能。如图下图所示,Zynq MPSoC是由一个处理系统(PS)与FPGA可编程逻辑(PL)耦合组成的器件。这两个部分通过许多高级可扩展接口(AXI)接口互联。这种高级结构与Zynq-7000芯片非常相似。
图3:Zynq MPSoC架构的简化图
与Zynq相比,主要的区别在于,Zynq MPSoC扩展了PS中处理器的种类和数量以及FPGA PL部分的大小,以及增加PS和PL之间AXI连接的数量和带宽,使集成更进一步。当然还有许多其他增强功能(稍后将详细介绍)。
图4:Zynq系列家族核心资源对比
对SoC的需求在一定程度上是由在快速发展的应用领域需要实现快速上市的动机驱动的。其他因素包括将组件集成到系统中所需的工程工作量减少、物理尺寸最小化以及功耗降低。另一方面,由于软件设计工具和方法的发展,这些相对复杂的SoC设备必须能够设计系统,而且其易用性也在不断提高。Xilinx及其合作伙伴支持各种设计输入方法和语言,并继续引入新功能以实现快速开发及快速评估不同实施方案。
如果你是一名工程师,目前正在使用FPGA等可编程逻辑设备,或基于处理器的嵌入式系统,那么SoC的增长很可能很快就会与你相关。值得将SoC设计添加到你的技能中,或者至少阅读本书的其余部分,了解更多关于它的信息!如果你是一名学生,那么同样地,获得SoC技能对你未来的职业生涯非常有用。最后,如果你是一个爱好者,那么用SoC创建酷炫系统的可能性几乎是无限的!即使承认了通常的学术和商业压力,这无疑也吸引了学生和专业人士。
2.Xilinx SoCs的演变简述
Xilinx传统上是一家可编程逻辑公司,专门从事FPGA技术和复杂可编程逻辑器件(CPLDs,可以被认为是FPGA的一个不那么复杂的版本)设计。自2011年推出Zynq-7000以来,在向SoC迈进的过程中,Xilinx Soc还集成了其他构建块,因此Xilinx现在生产的器件不仅由可编程逻辑组成,而且是与处理器、存储器、接口等相结合的可编程逻辑。
自从三十多年前Xilinx发明了FPGA,尤其是在最近的时代,人们对创建基于FPGA的灵活嵌入式系统产生了兴趣,可以使用FPGA的通用可编程逻辑(而不是使用专用处理器芯片)创建可用的“软”处理器。以这种方式实现嵌入式系统仍然有效,并且具有相当大的灵活性,但在处理器的性能方面受到限制。在某些情况下,应用程序会要求将一个单独的处理器芯片集成到系统中,并与FPGA进行适当的接口连接。
这导致了Zynq-7000芯片在2010年代初开发时,便将FPGA的可编程逻辑与专用“硬”处理器内置于专用硅中,并提供了两部分之间的快速交互。此时的处理器是双核Arm Cortex-A9(“A”表示应用处理器),与智能手机中的处理器类型相同。与之前采用的“软”处理器方法相比,该器件提供了增强处理器能力的优势,这意味着一个完整的系统可以在单个芯片上实现。
3.设计方法
一个至关重要的问题是我们如何利用这些复杂的SoC芯片创建系统?实际上,有多种方法可供选择,反映了SoC系统的组成、电子设计自动化(EDA)工具的复杂演变以及支持的各种应用。赛灵思和第三方软件合作伙伴不断突破极限,使SoC系统的设计尽可能快速、简单和可靠。
我们将在第4章中对设计方法和流程进行详细讨论,但同时,值得简单概述的是,SoC系统将包括(i)硬件设计和(ii)软件设计(由于其分层组成,软件设计通常被称为“堆栈”)。硬件设计被映射到SoC器件上可用的物理资源,而软件在系统内部署的一个或多个处理器上运行。
图5:使用Zynq MPSoC的简化设计流程(左:传统的“硬件/软件”设计流程;右:使用SDx的“软件定义”设计工具)
考虑到这些基本差异,通常分别使用专用工具设计硬件和软件系统。这种“硬件和软件”方法如图5的左侧所示(细节暂时抽象)。在这个设计流程中,硬件和软件开发在很大程度上可以独立进行,然后是集成阶段,而不是一个阶段依赖于另一个阶段的完成。工程师使用他们选择的工具生成硬件系统的元素,使用Xilinx Vivado开发环境进行系统集成并在目标器件上实现。软件开发人员可以使用Xilinx软件开发工具包(SDK),也可以选择自己喜欢的开发环境。一种可能的变体是在第三方工具中开发,该工具“隐藏”地利用Xilinx工具,但即便如此,同样的高级方法仍然适用。
最近,有一个相当大的转变,即以软件为导向,硬件/软件协同设计。简单地说,这些工具允许使用软件代码或基于模块的设计方法,在高抽象级别上描述整个系统的功能。然后,在设计者的指导下,考虑到可用资源的能力,在SoC的硬件和软件元素之间划分功能,工具可以快速生成不同的排列,而且软件和硬件中实现的元素之间的所有接口都是自动处理的。这种“共同设计”方法如图5右侧所示,反映了本章前面提到的Xilinx SDx工具的流程。
我们将在第4章中更详细地讨论设计方法,包括填写图5中概述的设计流程的细节。SDx将是本书D部分深入回顾的主题。
4.如何使用本书
本书旨在介绍Zynq MPSoC设备以及相关的设计方法、工具和应用程序。希望读者发现它可读性和可访问性很强。然而,这本书不可能成为所有问题的答案——请记住,该器件由Xilinx出版的1000多页技术文献支持,这是寻找细节的地方!
尽可能地,我们试图在不假设太多先验知识的情况下解决技术问题,尽管不可避免地,由于Zynq MPSoC是一个先进的集成系统,因此背景材料会对许多主题有益。在适当的地方突出显示有用的支持材料。
4.1书籍的组织
本书分为五个部分,概述如下。每一部分都由不同主题的多个章节组成,这些章节共同代表了本书的一个主题。
•A部分:了解Zynq MPSoC——本书的这一部分介绍了该器件,概述了其架构,并回顾了设计方法和候选应用领域。A部分的抽象水平略高于本书的其余部分,可能特别适合技术经理和其他希望在Zynq MPSoC的基础上建立大纲而不必深入研究细节的人!
•B部分:Zynq MPSoC体系结构详细介绍——B部分扩展了A部分的体系结构概述,其中有一系列专门的章节涵盖了设备体系结构的不同方面。其中包括分别关于应用程序和实时处理系统以及安全、安全和电源管理设施的章节。
•C部分:Zynq MPSoC系统开发——在C部分中,重点是在Zynq MPC上开发系统设计的方法和工具。这里我们介绍硬件系统开发,以及软件堆栈和常见配置的概念。接下来的章节重点介绍多处理器开发和系统引导。
•D部分:Xilinx SDx开发环境下的系统设计——本书的第四部分深入探讨了基于Xilinx SDx开发环境的软件定义设计流程。
•E部分:展望——本书的最后一个简短部分着眼于更广泛的视角,包括SoC“生态系统”,它代表了Zynq MPSoC系统设计中可以利用的IP、设计工具、硬件开发板和其他可用资源的范围。我们还考虑了一些基于先前发表的针对Zynq-7000 SoC的工作的学术案例研究。
4.2进一步的信息来源
在每一章的结尾,你会发现一份可能对进一步阅读有用的参考文献列表,并提供了网络链接以方便阅读(当然,请注意,这些内容可能会更改!)。这些信息来源多种多样,包括Xilinx在线发布的许多参考手册、教程和其他技术文献,这些都是特别有价值和权威的信息来源。它们提供了支持设计项目所需的深层技术细节。您可以通过以下URL访问Xilinx支持门户,从中可以获得文档和其他有用的资源:
还要注意的是,特别重要的网络链接偶尔会在本章的主要流程中突出显示(如上所述),而不是通过章节末尾的参考。
同样值得强调的是,这本书沿用了我们之前的标题《Zynq book》,该书涉及之前发布的Xilinx SoC设备Zynq-7000 SoC。您可能会发现参考《Zynk book》了解一般背景、介绍性示例和某些主题的扩展信息很有用;例如,Vivado HLS(高级合成)设计工具在Zynq书中进行了广泛讨论,而我们在本书中不重复该材料。相反,本书以Xilinx最新的设计工具SDx为特色,该工具使用基于软件的设计入门方法实现硬件/软件协同设计。顺便说一句,SDx利用了Vivado HLS的功能。
4.3对初学者的建议
如果你认为自己是SoC设计的初学者,那么值得一读《Zynq书》(在最后一节中提到),其中包括一些关于SoC原理和其他相关背景的介绍材料(从“什么是SoC?”开始)。特别是考虑到《Zynq书》是免费下载的,我们尽量不要在这里重复同样的材料。
尽管Zynq MPSoC系统可以使用各种操作系统开发,但预计大多数设计都将以Linux为特色,因此使用Linux开发嵌入式系统是一个需要注意的重要主题。提供对嵌入式Linux的全面处理超出了本书的范围,但幸运的是,已经有一些非常好的书可用,例如[1]。
如果你想加强你在计算机体系结构和一般操作原理方面的背景知识,那么[2]也是一本有用的书。
5.后续
接下来,我们进入A部分——了解Zynq MPSoC。本大章节会进一步介绍MPSoC,包括设备架构的概述,以及创建MPSoC系统所需的设计过程和工具,最后讨论应用领域。
6 参考资料
[1] Christopher Hallinan, Embedded Linux Primer: A Practical Real-World Approach, 2nd edition, Prentice Hall, 2011.
[2] David A. Patterson and John L. Hennessy, Computer Organization and Design: The Hardware Software Interface, ARM Edition,Morgan Kaufman, April 2016.