一、ARM
1.ARM概念
ARM有两个含义,第一个它是ARM公司,一家设计处理器架构的公司。注意这里是设计处理器,它并不生产处理器芯片,ARM公司将设计的处理器架构授权卖给其他半导体厂商,比如高通、华为、苹果,而由这些公司生产出处理芯片,我们也习惯称之为ARM芯片。因此,ARM也是指采用ARM公司架构进行设计的芯片。如下图所示。
ARM采用RISC精简指令集,而我们用的办公计算机采用的是复杂指令集。我们写的代码最终要转成指令,提供给CPU进行运算。一个程序里面大约只有20%的指令被经常用到,这20%的指令大约占整个程序的80%,ARM专心实现常用指令,对于不常用指令就通过常用指令去组合而实现。
使用ARM指定集的cpu,它的性能是要差一点,但是功耗会低一些,成本也会低很多,这就形成了嵌入式产品的一个优势。ARM设计了很多的芯片架构,早期的时候架构的命名比较混乱,现在这些处理器基本不常见了。
2.ARM架构分类
从ARM V7开始就采用cortex来命名。从下图我们可以看到,cortex系列分为三类,分别是cortex A,cortex R,cortex M。
cortex A系列是应用程序系列。A系列拥有内存管理单元,也就是MMU,可以实现虚拟内存,让每个用户进程都拥有自己独立的定制空间,这是现在多用户、多进程操作系统所必须的,像运行Linux操作系统,硬件上就必须要有MMU。Cortex A系列,适合用于高端的消费电子领域,像智能手机、平板电脑、智能电视、路由器等。
Cortex R系列是实时控制系列,该系列用于高性能、高实时的一些场景,比如硬盘固态的驱动控制器,消费电子领域的蓝光播放器,汽车安全气囊等,这个我们一般接触的比较少。
Cortex M系列是微控制器,该系列用于低功耗、低成分比较敏感的产品,像我们的家电、互联网产品等等。
3.基于ARM的STM32系列处理器
cortex系列分为三类,针对不同的使用场景,每个系列还会细分,比如说cortex M系列就包含M3,M0,M4等等。我们看一下上图,横坐标是架构,纵坐标是芯片的类型。芯片类型有无线系列,超低功耗系列,主流系列,还有高性能系列以及MPU。可以看到我们的STM32F1系列属于主流的MCU,它的架构是cortex M3,纵坐标显示是高性能MCU。纵坐标有个MPU,它的架构对应cortex A7。
二、MPU和MCU关系
我们先看一下MCU的结构。MCU是把CPU,内存,flash都集成在一个芯片上,也就是我们俗称的单片机,它就是一个完整的微型计算机,只需要供电以及极少的外围电路就可以工作。常见的MCU有8051系列单片机,AVR系列的单片机,还有意法半导体公司的STM32系列单片机。MPU类似于通用计算机的CPU,主要负责处理和计算,需要外加内存flash、电源等电路。
MCU和MPU有本质区别是因为它们定位的应用场景不同,像MCU它注重功能较为单一,价格敏感的应用场景,不需要强大的运算和处理能力,更多的是对设备的管理和控制,因此,不需要大容量的内存flash来运行大程序。MPU注重相对强大的运算处理能力,执行复杂多样的大型程序,因此需要外挂大容量的内存和存储。但随着技术的发展、市场需求的变化,MCU和MPU的界限逐渐模糊。像高端的32位的MCU,它的主频越来越高,已经反超低端的MPU的主频了。
三、DSP和FPGA
DSP通常有两个含义,第一个它指数字信号处理学科技术,也就是使用数字计算的方式对信号进行加工处理的理论和技术。另一个含义是指数字信号处理器,它是一种专门用于数字信号处理领域的微处理器芯片。即DSP既是一门学科技术,也是一类芯片。DSP芯片拥有强大的数据处理能力,在数字信号处理领域,比如说调制、解码、数据的加密解密,图形处理、数字滤波、音频处理等计算密集型的场景有着广泛的应用。
FPGA(现场可编程门阵列)可以通过编程来改变它的内部硬件结构,实现所需功能,厂家有赛灵思等。前面所说的MCU、DSP,它们的硬件资源都是固定的,我们做开发时只能配置软件去实现对应的功能。但FPGA可以通过硬件描述语言去修改硬件,把它变成CPU,或者专用的芯片,来实现某个控制或者算法。再比如,有些通信领域需要处理高速的通讯协议,而这个通讯协议可能会随时修改,因此它不适合做成专门的芯片,这时FPGA灵活性让它就成为首选。
四、总结
如今复杂的嵌入式系统往往是复合的架构,像有些产品,它是MPU+FPGA的一个组合,或者说MCU+MPU的组合。
在控制显示通信场景,我们一般选择MCU或MPU;
在通信或者说数据处理算法方面,我们选择DSP;
像一些需要大量的数据处理以及特定的实现,主要选择FPGA。
MCU的开发需要C语言基础,熟悉各种外设接口,熟悉RTOS系统开发;
MPU的开发通常需要学习linux基础、操作系统、网络编程等知识;
DSP的开发通常需要具备数据信号处理算法的理论知识;
FPGA的开发通常需要了解高速接口或音视频处理的算法等等。
[参考:百问网(www.100ask.net)]