微控制器(MCU)正在变得越来越复杂,越来越强大,因而越来越有用,但是这些进步都是有代价的。
开发带高级电源管理功能的多核MCU硬件并不太难,由于存储器的限制,开发出适合多核MCU的软件则难得多。CPU系统可以用SRAM片上存储器,或者外部的DRAM,不过对MCU系统而言,所有的存储器都在片上。所以CPU系统可以跑大型的Linux或Windows操作系统,MCU则只能跑相对简单的实时操作系统。
其实他们之间的关系可以更直观地转换为ARM与Intel的关系
“以视频市场为例,你可以开发基于MCU的应用,也可以开发基于CPU的应用,甚至可以开发两种系统都能跑的应用,”Cadence IP事业部CTO Chris Rowen说,“使用MCU的视频分辨率更低,不论是CPU方案还是MCU方案,多样化的视频接口都会让设计变得更复杂。用CPU系统开发要求相对没那么严,例如你可以把整个缓冲区(buffer)写满,在MCU就不太可能这么干。用MCU开发,数据的交换更需要技巧,所以产生故障(bug)的可能性也增加了。”
更难的是利用MCU来分担CPU的负担,例如作为协处理器去加速某种计算,或者作为低功耗应用时的备用处理器。
“考验MCU的程序员的问题是如何满足处理速度的要求,” Rowen说,“自动车库门开启或者关闭花费几百毫秒都可以接受,但要满足高速数据流的处理需求,则需要采用并行处理。所以当把MCU设计成另一个次级计算引擎(sub-engine)时,你需要处理器有能力进行数据计算,这就要求编程风格非常严谨。在高速数据处理场景下使用MCU,非常非常难。”
虽然有诸多困扰,MCU的应用场景依然在不断拓展,使用方法也屡屡突破常规,如今在复杂的系统及芯片(SoC)中内建MCU已经很常见。在SoC这种复杂应用场景中,MCU的功能一般都只做特定的任务,例如唤醒CPU,但无论从设计、验证还是一致性的角度来看,在SoC中让多个MCU协同工作都非常难。
“在同一颗SoC中集成Cortex-A(CPU)与Cortex-M(MCU)的趋势呈现加速状态,”Mentor Graphics嵌入式产品高级产品线经理Andrew Caples说,“以高级驾驶辅助系统(ADAS)这个嵌入式应用最精华的代表为例,可以用多个处理单元--微控制器(MCU)、微处理器(MPU)、数字信号处理器(DSP)--来实现ADAS,SoC意味着更低的故障率、更低的成本以及更低的散热需求,但增加了软件设计的复杂性。开发人员要在SoC集成的MCU、MPU与DSP上开发多个实时操作系统,并在这一颗芯片上开发和调试。这就需要开发人员的方案能够适应不同的平台(MCU、MPU、DSP),这给半导体公司增加了很多压力,为了帮助客户真正利用起SoC中的所有器件,它们需要提供给开发者足够的库文件和解决方案参考。”
Caples表示,只要多核SoC的应用有操作系统,就一定会遇到一堆同步问题,因为不同核之间靠等待来协同工作。“我们正在为这个领域的应用开发工具,”他说,“对于硬件工程师来说,过去这些年摩尔定律一直很有效,硬件的性能在提升,成本在下降。但是软件开发却是另外一回事,随着系统复杂度越来越高,软件开发的成本不断攀升,而且现在看不到任何可以改善的迹象。”
|