1、CPU发展历程
在一个电子系统中,处理器占据最重要的位置,被称为中央处理器单元:CPU(Central Processing Unit)。它从IO设备读取数据,处理,然后显示出来。CPU的发展有两个路线:MPU、MCU。
- MPU只是一个处理器,需要搭配内存等非常多的其他外设才可以构成一个系统;
- MCU内部有处理器、内存、Flash及其他模块,仅仅需要搭配少量外设就可以构成一个系统。
(1)MPU这一路线,在上世纪80年代非常流行,那时的微型计算机、游戏机都是使用MPU。后来MPU逐渐式微,可以认为MPU发展到现在只剩下了intel、AMD两家公司,主要用于个人电脑中。芯片越来越复杂,逐渐强大,称之为MPU似乎不恰当,现在都直接称为CPU。
- MPU即微处理器(Microprocessor Unit)
(2)MCU这一路线,就是把CPU、内存、Flash都集中在一个芯片上,它再搭配其他外设备就可以构建一个完整的系统。MCU的发展经历过8位8051单片机、16位AVR单片机、32位STM单片机等等。
- 我们使用的51单片机、STM32单片机,一般都只是用来处理比较简单的事务,应用场景比较单一。
- 我们使用的手机,里面的主芯片更加复杂,它既含有CPU,也含有用于数据处理的DSP、用于图形显示的GPU。使用这类主芯片设计出来的电路板更加复杂,它的性能甚至不弱于个人电脑。
(3)为了跟个人电脑相区分,这些使用含有CPU电子产品,被称为嵌入式系统、嵌入式产品、嵌入式板卡。
2、CPU、MPU和MCU
嵌入式板卡就是一台形状不一样的电脑,跟电脑相比,可以引入几个概念:
(1)CPU(Central Processing Unit):
- 中央处理器,在PC机它是一个独立的芯片。
- 在嵌入系统中,它是芯片里的一个单元,跟其他模块比如USB、UART、音频组成一个芯片。
(2)MPU(Mircro Processor Unit):
- 微处理器单元,其作用等同于在PC上使用的CPU,它也只仅仅是一个处理器,需要配合内存、Flash等外设才可以使用。
- 现在,除了个人电脑上的CPU,基本上找不到MPU了。并且我们一般不把电脑上的CPU当作MPU,毕竟它也是挺大的,并不"微小"。
- 但是,在现实工作中,有时会遇到把A pplication Processors称为MPU。
(3)Application Processors:
- Application Processors 即应用处理器,用于手机、平板当中;
- 用来处理显示、输入,运行用户的程序等。
- 它跟MCU类似,也是集成了处理器和各类模块;但是它的性能已经极大提升,可以外接几GB的内存、几GB的Flash。
- Application Processors 的概念可以扩展到其他场景,不再局限于手机、平板。
- 跟MCU相比,Application Processors的不同点:
-
集成了更多的模块:比如用于数据处理的DSP、用于图形显示的GPU,甚至有多个处理器。
-
运行的操作系统不同:MCU上一般不运行操作系统,或是运行RTOS;Application Processors基本上都会运行比较复杂的操作系统(比如Linux),在操作系统上运行多个APP。
-
(4)SoC
- SoC(System on Chip),即片上系统。SoC的本意是在一个芯片上就可以搭建完整的系统。
- 但是这个概念在日常使用中比较宽泛:MCU芯片也可以称为SoC,Application Processors也可以称为SoC,即使它们还必须外接内存/Flash等外设才可以运行。
- 在以前的文档中涉及SoC时,意指比较复杂的系统。这时候MCU不属于SoC,因为MCU比较简单;但是时代在发展,MCU也越来越复杂了,所以把MCU也当作SoC也是可以的。
3、哈佛架构和冯诺伊曼架构
CPU架构可以分为哈弗架构与冯诺伊曼架构。
(1)哈佛架构
-
指令与数据分开存放,CPU可以同时读入指令、读写数据。
-
现在的ARM属于哈佛结构。
(2)冯诺伊曼架构
-
指令、数据混合存放,CPU依次读取指令、读写数据,不可同时操作指令和数据。
-
PC机、服务器属于冯诺伊曼架构。

4、指令集: CISC和RISC
(1)CISC,即复杂指令集计算机。
- 指令数量多:包含数百条复杂指令,涵盖多种操作(如内存访问、算术运算、字符串处理等)。
- 单条指令功能强:一条指令可能完成多个操作(如"从内存加载数据并计算")。
- 变长指令:指令长度不固定,可能占用多个字节。
- 应用:x86架构(Intel/AMD处理器)。
(2)RISC,即精简指令集计算机。
- 指令数量少:通常只有几十条简单指令,每条指令功能单一。
- 单条指令功能简单:每条指令仅完成一个基本操作(如"加法"或"内存加载")。
- 定长指令:指令长度固定(如32位或64位),便于解码。
- 应用:ARM、RISC-V、MIPS架构。
(3)举一个例子,下图是实现这样的乘法运算:a = a * b。它需要4个步骤:读出a的值、读出b的值、相乘、写结果到a。
- 使用CISC提供的乘法指令,只需要一条指令即可完成这4步操作。当然,这一个指令需要多个CPU周期才可以完成。
- 而RISC不提供"一站式"的乘法指令,需调用四条单CPU周期指令完成两数相乘:内存a加载到寄存器,内存b加载到寄存器,两个寄存器中数相乘,寄存器结果存入内存a。
- 按照此思路,早期的设计出的RISC指令集,指令数是比CISC少些。后来,很多RISC的指令集中指令数反超了CISC。因此,应该根据指令的复杂度而非数量来区分两种指令集。
- 当然,CISC也是要通过操作内存、寄存器、运算器来完成复杂指令的。它在实现时,是将复杂指令转换成了一个微程序,微程序在制造CPU时就已存储于微服务存储器。一个微程序包含若干条微指令(也称微码),执行复杂指令时,实际上是在执行一个微程序。这也带来两种指令集的一个差别,微程序的执行是不可被打断的,而RISC指令之间可以被打断,所以理论上RISC可更快响应中断。
