对MCUs申请主导地位的挑战已经开始。现场可编程逻辑器件(fpga)与芯片上的固定功能处理子系统,即芯片(SoC) fpga系统,最近成为高端处理应用的潜在竞争者。这就提出了一个问题:随着应用程序性能要求的不断提高,SoC fpga将会成为更广泛应用程序的挑战者,或者MCUs会进化到更好地与SoC fpga竞争吗?如果你正在考虑一个新的设计,什么方法是最好的今天-一个单片机或SoC FPGA?
本文将快速回顾与MCUs相比,SoC fpga的一些关键优势和劣势。它还将探索MCUs最近的一些创新,使它们更加灵活,更好地应对SoC fpga提供的一些关键优势。有了这些信息,你就能更好地在你的下一个设计中选择MCU和SoC FPGA。
SoC fpga结合了新的灵活性和一个熟悉的处理系统。
SoC fpga结合了两个世界的优点。首先,SoC fpga提供了一个熟悉的处理系统——CPU——来执行熟悉的顺序处理算法。事实上,许多SoC fpga已经聚合在普遍的ARM处理器架构上,以形成其“固定功能”处理子系统的基础。这充分利用了ARM兼容工具、知识产权核心(IP核心)和支持技术的广泛生态系统,使开发成为一个非常熟悉的过程。
SoC fpga还提供了一种可编程的可编程选择,可用于顺序处理。可编程的fabric可以实现任何硬件功能,您需要增强在处理子系统中发现的顺序处理能力。可编程的结构本质上是并行的,因为多个硬件块可以同时操作,或者并行地复制逻辑,或者用流水线方式将一个算法分成几个阶段,这样处理就会重叠。与顺序方法相比,这些方法中的任何一种都能产生巨大的吞吐量收益。
SoC fpga在使用并行或流水线(或组合)技术在硬件中实现的部分算法需要高性能时尤其有用。让我们看一个示例设备,以便更好地了解如何在实际系统中工作。
Xilinx Zynq-7000 SoC FPGA框图如图1所示。图的顶部显示了包含在芯片上的所有固定功能块。这些模块实现了一个完整的双核ARM处理器应用程序处理单元,以及一系列支持互连总线、外围设备、内存和芯片外接口。可编程逻辑部分显示在图表的最底部,并通过各种系统级接口访问。该组织对SoC FPGA的可编程逻辑方面进行了新的调整,因为固定功能元素即使没有可编程逻辑也能工作。这意味着处理器系统可以“启动”,然后配置可编程逻辑。之前,非soc定向方法需要先配置可编程逻辑,然后处理器才能启动。通过反转这个序列,可编程逻辑成为处理器的一个资源,并使它能够更容易地与硬件开发并行地开发代码。
Xilinx q SoC FPGA的框图。
图1:Xilinx Zynq SoC FPGA框图。
实际上,代码开发人员可以将SoC中的可编程逻辑看作是用于加速代码段的硬件资源,而这些部分在处理器上实现时速度太慢。一个设计团队成员可能会将他们的活动集中在创建由程序员所要求的硬件加速上,或者程序员可以自己实现硬件。无论哪种方式,该算法都将成为开发的重点,并提供多种实现选项。
当有多个面向性能的算法同时进行时,SoC方法似乎效果最好。在SoC fpga上取得了巨大成功的一个应用领域是复杂的图像处理。这些算法通常可以流水线化和/或并行化,使它们成为FPGA加速的候选。如果处理器还需要处理高带宽的流量(可能是高速串行接口和大量的芯片外缓冲存储器),额外的硬件支持来卸载处理器的低级别任务也可能会带来巨大的收益。
对SoC fpga的多核响应
对于像图像处理这样的应用程序,还有其他实现并行和流水线实现的方法。MCU供应商采取的一种方法是实现多个处理引擎(多核)芯片,以允许设计者分解复杂的算法。当每个处理器的架构都是相同的时,就可以很容易地采用复杂的算法,并将其分解为每个在不同的、但功能相同的处理器上执行的片段。
作为一个例子,德州仪器提供了TMS320C66x多核固定和浮点数字信号处理器(DSP),有八个DSP协处理器和多核处理器以及网络导航器来简化数据传输使用硬件队列(图2)。DSP芯提供非常高的处理能力等一系列复杂的算法的音频、视频、分析、工业自动化和媒体处理。
德州仪器多芯DSP的框图。
图2:德州仪器多芯DSP方框图。
一个多核架构的代码开发与使用SoC FPGA时有点类似,除了硬件加速是由DSP核心而不是可编程的结构来完成的。当一个核心不能足够快地实现这个算法时,只需再加上一个核心就可以了。一直这样做,直到你的内核已经耗尽或者实现了你的性能目标。优化和优化可能需要获得最后一点的性能/性能效率,但是一些更高级的工具可以通过提供帮助优化过程的性能和功能配置文件来提供帮助。
双核单片机
多核心方法不需要仅用于最高的性能应用程序。通常,SoC fpga可以在性能较差的应用程序中找到,在这些应用程序中,需要对power和processing power进行优化。由于可编程结构可用于实现算法的部分,因此实现所需的总功耗可能远低于高端DSP或多核心解决方案。
MCUs的制造商也发现了这一趋势,并将双核处理器应用于单一设备。在某些情况下,使用高性能处理器和低性能处理器。这使得高性能的处理器能够实现更复杂的部分算法和性能较差的处理器来处理较不复杂的管理任务。性能较低的处理器在大多数情况下都是活跃的,使用的功率比高性能的内核小。(请注意,多核系统可以使用类似的方法,只需要使用尽可能多的内核,动态地达到目标性能级别。这是一个更复杂的实现,但是如果算法需要在短时间内显著变化的各种性能水平,那么最终会非常高效。
NXP半导体LPC4350是利用高性能和低性能处理器的双核MCU的一个例子。如图3所示,下面有一个ARM Cortex-M4和一个Cortex-M0。M4用于高性能任务,而M0可以用于公共管理功能。实际上,如果不需要,M4子部分甚至可以被关闭,并在处理请求需要时启动。这种方法适用于只需要周期性但需要快速响应的数据的算法。当图像发生变化时,安全摄像头的图像处理可能会很重,但是当图像是静态的时就不需要了。
NXP双核单片机的框图。
图3:NXP双核MCU框图。
即使是低端也是可编程的。
不要认为只有中档和中档的MCUs才会增加新花样以增加灵活性。即使是低端的MCUs也加入了可编程的功能,这可能不是对SoC fpga的回应,而是一种将少量的外部逻辑“芯片上”的方式,这种方式可编程逻辑器件已经做了几十年。Microchip PIC10F320添加了可编程逻辑,位于可配置逻辑单元(CLC)块中。图4显示了PIC10F320与CLC更详细的视图的框图。CLC可以实现基于设备输入、内部时钟、内部外设和寄存器位的各种简单逻辑函数。CLC甚至在低功耗模式下运行,使它成为唤醒事件的一个方便的来源,以在MCU不需要处理时节省最大的电量。
可编程逻辑的微芯片单片机框图。
图4:带有可编程逻辑框图的微芯片单片机。
CLC在PIC10F320上特别有用,因为它只有几个大头针。充分利用这些引脚和消除一些外部的逻辑,可以在空间需求上产生很大的差异。可编程逻辑的一大优点是,即使在朋友和cpld的早期也是如此。现在低端的MCUs把可编程逻辑放在芯片上,也许我们会看到MCUs旁边的低端PLDs更少。这难道不是一个新的转折吗?
综上所述,MCUs和SoC fpga解决了类似的应用问题,并开始争夺应用的主导地位。目前的挑战主要是在应用程序空间的高端,但是最近的创新可能会扩大MCUs和可编程设备之间的重叠。