今天给大侠带来FPGA Xilinx Zynq 系列第十一篇,本篇内容目录简介如下:
4. 芯片比较(“ 为什么我需要Zynq”)
4.3 比较二:Zynq 对 标准处理器
4.3.1 处理器操作
4.3.2 执行分析
4.3.3 总结说明
4.4 比较三:Zynq 对分立的 FPGA-处理器组合
4.5 拓展 Zynq 架构和设计流
4.6 本章回顾
4.7 参考文献
本系列分享来源于《The Zynq Book》,Louise H. Crockett, Ross A. Elliot,Martin A. Enderwitz, Robert W. Stewart. L. H. Crockett, R. A. Elliot, M. A. Enderwitz and R. W. Stewart, The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 All Programmable SoC, First Edition, Strathclyde Academic Media, 2016。
那些正在考虑标准处理器下一步应用的大侠,也许可以考虑评估一下用 Zynq 会 怎样。在这种情况下,问题会稍有不同:“ 给我的处理器捆绑上可编程逻辑能得到什么好处?” 很大程度上,答案与应用的具体领域有关,同时也和处理器要从事的运算类型 有关。选择了一个处理器之后,比如通用处理器 (General Purpose Processor, GPP)或数字信号处理器 (Digital Signal Processor,DSP),就意味着需要支持 基础软件或操作系统及应用程序。软件在实现计算密集型操作时所构成瓶颈问题,能从 Zynq 中附加 PL 所形成的硬件加速中受益。PL 的好处是它可以为特定的任务进行全面的定制和优化,而处理器则更为通用些。可编程逻辑天生就为并行地实现算法提供了理想的资源。比如在信号和图像处理中,要同时对大量的样本或像素点进行进行数学运算。尽管在某些处理器中有些特定的资源来迎合这种类型的应用(比如 ARM Cortex-A9 里的 NEON 引擎),它们的性能并不能完全与 FPGA类型的可编程逻辑中实现的优化了的、针对具体任务的硬件处理块的性能相提并论。有很多处理器可用,如 4.2.1 所提到的,它们的性能可以用标准的基准测试来 评估和比较。特别方便的是,“ 嵌入式微处理器基准测试联盟 (Embedded Microprocessor Benchmark Consortium,EEMBC)” 网站提供了提交上来的 CoreMark 分 数的数据库 [6]。通过这个数据库,可以确认 Zynq 比其他 ARM Cortex-A9 架构的实 现要优秀。
4.3 比较二:Zynq 对 标准处理器
4.3.1 处理器操作
以特定的时钟频率工作的处理器核。所需的软件,当然在确定的时钟频率上是需要一定的时间来执行的,它的实现成本是以 (执行的)时钟周期为单位衡量的。所需的处理越复杂,执行的时间也会越长。所实现的算法的效率也是重要的,要保证没有冗余的运算。作为例子,假设我们有一个工作频率为 1GHz 的单核处理器。如果某个特定的程 序需要 1825 个执行周期,并且假设这个处理器是专用于这个特定的程序的,那么就要花 1.825μs 来完成。如果做了后续修改,又增加了 500 个周期的计算,那么这个程序所需的时间就要延长到 2.325μs。图 4.4 展示了这两个简单的例子。通过增加运算来增加程序的功能当然会增加执行的时间,对于对时间要求不严格的应用这也许是可以接受的 (基于一定的理由)
图 4.4: 一个软件代码的两种变化的处理时间的可视化表达
非实时操作
如果考虑一个通用处理器的表现,它有有限个时间槽 (时钟周期),它们已经 (或还没有)被计划要在其上执行的特定操作所占用。有些操作可能用单个周期就可以了,而有些要几个周期。更明确地说,处理器周期的占用可以表示为程序函数或任务。处理器要支持的可能是很多不同的规律性重复的任务,也可能是临时发生的、要根据优先级安排进处理器的任务。图 4.5 描绘了这种操作模式。要注意到处理器是一个串行的资源,在任何一个时间槽内,它只能满足一个任务,这反映了处理器操作的串行本质。当然,现在处理器正在不断地 “ 多核化 ”,就是说一个处理器具有比如说两个或四个处理器核,每个可以串行地处理任务。现在,我们先仅以单核来描述我们的例子,以免概念混淆。
随着处理器变得 “ 繁忙 ”,时间槽的占用程度会升高,于是以执行软件代码计数的性能就会变慢。这和在主干道上开车类似:当交通拥堵的时候,旅行所用的时间就可能会变长。而且,完成某个任务的时效,是随着处理器资源在不同的任务之间共享的状况而变化的。在某些应用中,这种缺乏确定性和无法保证时序的缺点是不可忍受的,那么就需要实时处理。
图 4.5: 处理器操作:执行周期
实时操作
追求实时操作的话,就应该考虑到存在着可用执行周期的 “ 预算 ”,在这个预算中,所需的软件应用或算法是必须被执行的。比如,一个实时视频处理应用需要的处理器资源是能让它跟上以所需的帧速率和分辨率源源不断到来的数据的节奏,否则的话,当新数据到来的时候,处理器还在忙着做之前的帧。图 4.6 描绘了这样的场景,注意图上实际上是有处理时限的,在那之前,和每个单独的帧有关的所有的处理都必须完成。
图 4.6: 实时操作
实时系统可以被分类为软实时或硬实时。如果是软实时,当错失处理时限的时 候,系统的性能就好像是降级了,一般是临时性的;而如果是硬实时,那么系统就可能完全失效了。
在前面的视频处理应用的例子中,跳过时限而错失一帧的后果可能就是导致画 面质量的小损失,而只要后续的处理时限能满足,系统还是能很快恢复的。另一方面,如果时限是和工业安全系统有关的话,那么就得考虑用硬实时系统,因为在最坏的情况下,错失处理时限会导致系统的灾难性失败。
?
4.3.2 执行分析
在考虑处理器的活动的时候,经常要考虑它在必须要支持的各种任务下的活 动。比如,如果处理器花了执行周期的 80% 在某个特定任务上,就应该研究确定其中能否识别出任何并行操作来。如果可以的话,就把这个功能划分到硬件去以便能获得整体速度的大幅提升。
比如,考虑我们有一个对数据做 FIR 滤波的软件代码,是以软件的方式在处理 器上运行的。也许我们会观察到处理器花了很大部分的执行周期来做这个过滤算法去产生结果。由于 FIR 滤波是高度并行的 (就是说多个操作可以同时进行),所以拿来做硬件加速是很理想的。ARM Cortex-A9 处理器里的 NEON 单元具有 SIMD 能力, 是适合的加速资源,虽然在第 2 章解释过它存在着处理器 “ 道 ” 的数量的限制,这样就会限制它的性能。还好,FPGA 逻辑部分支持要实现的滤波器的高速、全并行版本。把计算从处理器 “ 卸载 ” 到硬件,就可能大大地降低整体的执行时间,如图 4.7 所示。这还释放了处理器,这样它就可以用被加速了的函数腾空出来的处理器周期从事其他的操作。
图 4.7: FIR 滤波被硬件加速之前 (上)和之后 (下)的处理器活动
把功能从软件划分到硬件去,还有一个问题需要了解,就是这样会带来系统的 这两个部分之间隐含的通信额外开销。在软件和硬件之间传递数据和指令所花费的时间造成了要叠加到处理器加速中去的额外的延迟。如果这个额外开销太大,硬件加速的好处就被抵消了。而下一节就会解释,用 Zyna 和用分立的处理器与 FPGA 比较,受益于芯片的 PS 和 PL 部件之间的紧密耦合,通信的额外开销是低的。
?
4.3.3 总结说明
在这一节中,我们回顾了处理器的总的工作原理,并考虑了在某些应用中对实 时处理的要求。我们还说明了如果某种计算密集的程序是可以在处理器上实现的,那么它可能会表现出对资源产生极大的负担,很可能导致处理器整体性能受损。
我们提出这个问题的一个解决方案,是把像这样的程序卸载到协处理器上,而 且当被卸载的计算本质上是并行的时候,这样做是特别有效的,因此很适合像 ARM里的 NEON 处理器这样的加速引擎架构。不过,PL 是终极加速器因为它支持任意级别的并行,因此能灵活地支持很多种算法,甚至能同时实现多个协处理器。
图 4.8 显示了一个简单的、概念性的图来比较一个孤立的处理器和 Zynq 芯片。即使只是加上了适量的可编程逻辑 (等价于较小的 Zynq 芯片)就能获得巨大的硬件加速,因此可以成为单独处理器的令人心动的代替品,它能释放出处理器的资源来支持系统性能的其他方面。
图 4.8: 单独处理器和小型 Zynq 芯片的比较
4.4 比较三:Zynq 对分立的 FPGA-处理器组合
最后一个要和 Zynq 比较的架构是处理器 -FPGA 组合,也就是说,这两个部分是物理上独立的元件。出现这种类型的系统,通常是因为系统需要同时支持计算密集型数据流类型处理 (非常适合在 FPGA 上做)和高级的软件算法或应用 (非常适合在专门的处理器上做)。也许是因为系统的软件部分超越了 MicroBlaze 实现的能力,从而导致 FPGA 和处理器都被认为是必须的了。
Zynq 则给出了另外的做法,用单片芯片替代了两者的组合,图 4.9 描绘了这两种可能性。
图 4.9: 分立元件与基于 Zynq 的处理器系统和可编程逻辑的组合的比较
Zynq 的解决方案在很多方面都具有优势。首先,根据 4.1 节所列出的最重要的 参数,应该能看到,选择单片芯片可能降低 BOM。由于减少了元件的数量,板级系统的硬件架构就被简化了,从而有助于降低成本,还能提高可靠性。
使用 Zynq 芯片还能降低系统的物理尺寸,而且由于 (一)芯片操作和 (二) 芯片间通信,使得产生的功耗也能大大降低。分立元件系统的外部连接比 Zynq 内部的 PS 和 PL 之间的相对更近的内部连接要消耗更多的功率。这使得 Zynq 解决方案的整体能耗更低。另外 Zynq 芯片的物理尺寸、28nm 的芯片工艺和紧密的存储器集成也有助于降低功耗。
从设计的角度看,Zynq 还能实现生产效率的提升,从而加速开发过程。这要归 功于 Zynq 的集成化的设计流和软件开发工具套件,这些是基于系统级设计哲学的,用上了设计重用和基于 C 的算法的快速、高级综合。而另一方面,分立元件的系统可能得有两个非常独立的设计流、工具集和流程。还起到重要作用的一点是,Zynq的设计流支持 PL 和 PS 之间的标准 AXI 接口,这样就不再需要花费很多来设计和实现合适的接口了。丰富可用的第三方 AXI 兼容 IP 更是一种优势。
最后,处理器和 FPGA 之间在外部连接上的通信开销不需要了。之前提过,这可 能造成两芯片模式下的带宽限制和延迟增加。Zynq 芯片里的内部连接本身就比外部连接安全,实际上,额外的安全措施还集成进来来实现安全引导过程,以及对付非法篡改 [16][18]。
关于 Zynq 和两芯片分立模式比较的优势的进一步讨论在 [16]。
4.5 拓展 Zynq 架构和设计流
Vivado 设计流的一个特别强大的部分,是它的高级综合工具 ——Vivado HLS— — 能从基于 C 的软件描述中产生硬件 (注定在 PL 中实现的)。第 14 和 15 章将详细讨论 HLS,不过为了这里的讨论,需要简单总结一下为什 么要用它。HLD 设计方法可以在较高的抽象层次上描述功能,而不是在传统的 RTL级别 (就是 HDL 和相关的设计开始方法)上,从而可以快速创建设计。在使用 HLS的过程中,设计师可以运用与要产生的硬件特性相关的特定的分类 (directive)和约束 (constraint),来影响 C 代码如何综合进硬件。
在 Zynq 系统开发中,使用 HLS 是特别有吸引力的,因为它的架构是由 PS 和 PL 组成的。这就意味着只要简单地对 C 代码做很少的改动并重新定向,系统的功能部件就可以很方便地从面向在 RAM 中执行的软件移植到在 PL 中实现的硬件中去。
改变系统部件的实现方式,表达了不同的软 / 硬件划分,从而能达到性能或实 现上的收益。比如在图 4.10 中,功能部件 F4 被从软件移到了硬件实现中 (可能是使用了 HLS),而 F1 部件则从硬件实现中移到了软件代码中,而调整后的系统架构可能具有,比如说,提升的数据吞吐率。
图 4.10: 基于 Zynq 的软 / 硬件划分的两个例子
在开发复杂系统的时候,假如软/硬件划分可以非常方便地通过HLS方法的支持 来实现,会是非常有益的。根据需要,设计团队可以在提出最终系统架构之前,研究不同的划分方式,而这样做所需的时间开销 (比之前的方法)是有所降低的。
4.6 本章回顾
本章一开始概述了从系统开发者的角度认为是影响目标芯片(或芯片组)选择 的因素,并列举了很多这样的因素,包括:芯片的架构、配置和性能,商业考量,支持的设计流和开发工具,物理属性和灵活性。带着这些因素,通过与其他系统实现方式作比较而明确使用 Zynq 的原因,就是与用独立的 FPGA 或独立的处理器,以及用分立元件的 FPGA -处理器组合方式都做了比较。
大多数嵌入式应用都必须要有处理器资源,所以本章也总结了在 FPGA 里的处理 器的情况,包括了软处理器和硬处理器。用 Zynq 的 ARM 处理器和当前的及过去的几种基于 FPGA 的嵌入式处理器进行比较,可以看到 ARM 胜出所有其他的可能选项。
本章概述了处理器的基本操作,并指出,如果能够找出软件中的并行,那么就 有很大的机会和动力来把这些功能重新布局到硬件中去,因为这样做可以实现极大的加速。这样的软 / 硬件划分可以由分立的处理器和分立的 FPGA 组合来实现,但是也讨论了,这样的架构具有它自身的困难,就是两个物理芯片之间所需的接口上存在很多问题。
根据所有这些因素,我们对于 Zynq 在一块集成的芯片上同时实现了高性能处理 和 FPGA 类型的可编程逻辑具有很大的兴趣。这呈现了两个世界的最好的东西,给了设计师很大的灵活性以便根据需要在硬件和软件部件之间划分系统。帮助这样做的一个设备是 Vivado HLS,这是一个能把 C 或 C 算法转换成适合于在 Zynq 的 PL 里 实现的硬件描述的工具。这就意味着,比如,软件的计算密集型部分可以快速地重新部署来做硬件加速。HLS 会是本书后面的章节 (第 14 章)的 “ 亮点 ”,然后会对 Vivado HLS 开发工具做特别的阐述 (第 15 章)。
接下来,我们会根据这一章所做的观察,来考虑一些特别适合于 Zynq 的应用。应用的领域包括无线通信和软件定义无线电、智能网络、汽车和工业应用、图像处理、机器人和很多其他应用。
4.7 参考文献
说明:所有的 URL 最后在 2014 年 6 月被访问过。
[1] ARM, “CoreMark Benchmarking for ARM Cortex Processors”, Application Note 350, Issue A, 2013. 位于 : http://infocenter.arm.com/help/topic/com.arm.doc.dai0350a/DAI0350A_coremark_benchmarking.pdf
[2] ARM, “Cortex-M1 Processor” 网页 .位于 : http://www.arm.com/products/processors/cortex-m/cortex-m1.php
[3] Aeroflex Gaisler, “LEON4 32-bit Processor Core”, product information sheet, January 2010. 位于 : http://www.gaisler.com/doc/LEON4_32-bit_processor_core.pdf
[4] K. Chapman, “PicoBlaze for 7 Series FPGAs”, KCPSM6 Release 8, March 2014. 位于 ( 作为下载的一部分 ) : http://www.xilinx.com/ipcenter/processor_central/picoblaze/member/
[5] EEMBC 网站 , “CoreMark FAQ” 网页 .位于 : http://www.eembc.org/coremark/faq.php
[6] EEMBC 网站 , “CoreMark Scores” 网页 .位于 : http://www.eembc.org/coremark/index.php
[7] Xilinx, Inc., “LogiCore IP MicroBlaze Micro Controller System”, Product Specification, DS865, v1.1, April 2012. 位于 :http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/ds865_microblaze_mcs.pdf
[8] Xilinx, Inc., “MicroBlaze Soft Processor Core” 网页 . 位于 : http://www.xilinx.com/tools/microblaze.htm
[9] Xilinx, Inc., “PicoBlaze 8-bit Embedded Microcontroller User Guide”, UG129, June 2011. 位于 : http://www.xilinx.com/support/documentation/ip_documentation/ug129.pdf
[10]Xilinx, Inc., “PicoBlaze Soft Processor” 网页 . 位于 : http://www.xilinx.com/products/intellectual-property/picoblaze.htm
[11]Xilinx, Inc., “Virtex-II Pro and Virtex-II Pro X Platform FPGAs: Complete Data Sheet”, DS083 (v5.0), June 2011. 位于 : http://www.xilinx.com/support/documentation/data_sheets/ds083.pdf
[12]Xilinx, Inc., “Virtex-4 Family Overview”, Product Specification, DS112, v3.1, August 2010. 位于 : http://www.xilinx.com/support/documentation/data_sheets/ds112.pdf
[13]Xilinx, Inc., “Virtex-5 Family Overview”, Product Specification, DS100, v5.0, February 2009. 位于 : http://www.xilinx.com/support/documentation/data_sheets/ds100.pdf
[14]Xilinx, Inc., “Virtex-5 FPGAs: The Ultimate System Integration Platform”, Virtex-5 Family Brochure, 2008.位于 : http://www.xilinx.com/publications/prod_mktg/Virtex_family_brochure.pdf
[15]Xilinx, Inc., “Xilinx Extends Platform FPGA Performance with Award Winning MicroBlaze Soft Processor”, Xilinx Press Release #0695, 9th October 2006. 位于 : http://www.xilinx.com/prs_rls/2006/embedded/0695microblaze5.htm
[16]Xilinx, Inc., “Zynq-7000 All Programmable SoC”, Xilinx Backgrounder, 2013. 位于 : http://www.xilinx.com/publications/prod_mktg/zynq-7000-generation-ahead-backgrounder.pdf
[17]Xilinx, Inc., “Zynq-7000 All Programmable SoC Overview”, Preliminary Product Specification, DS190, v1.5, September 2013. 位于 : http://www.xilinx.com/support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf
[18]Xilinx, Inc., “Zynq-7000 Technical Reference Manual”, UG585, version 1.7, February 2014. 位于 : http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf
[19]R. York, “Benchmarking in context: Dhrystone”, ARM White Paper, March 2002.
第十一篇到此结束,下一篇将带来第十二篇,开启第五章,应用和机会(“ 拿它做什么?”)等相关内容。欢迎各位大侠一起交流学习,共同进步。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!