本章主线

数字电路最终要处理信息。计算机系统把外部信息采集进来,经 CPU 和存储器处理,再通过输出端口交给显示器、执行器或其他系统。本章从系统框图一路深入到处理器的取指/执行、中断和 DMA,再延伸到操作系统、编程、微控制器与片上系统(SoC)。

学习导航

14-1 计算机系统

计算机的三项基本任务

任何计算机都围绕三件事工作:

  1. 获取信息:来源可以是操作者、传感器、存储器、通信网络或另一台计算机。
  2. 处理信息:按照程序对数据进行解释、比较、运算、转换、格式化等操作。程序就是一组有顺序的指令。
  3. 提供信息:把结果交给人、执行器、存储设备、网络或其他计算机。

CPU 是系统的“脑”,通过输入/输出(I/O)接口与外界通信,通过存储器保存和读取信息,通过地址、数据、控制三类总线连接各模块。

图 14-1 通用计算机基本框图:输入信息,经 CPU 处理后输出,存储器保存程序和数据

图 14-1 通用计算机基本框图:输入信息,经 CPU 处理后输出,存储器保存程序和数据。

CPU 的组成

CPU(中央处理单元)执行程序、处理数据、协调其他模块。它通常由四个单元组成:

  • 算术逻辑单元(ALU):执行加减、比较、与/或/异或、移位等。
  • 指令译码器:把取到的二进制操作码解释成具体动作。
  • 时序与控制单元:产生时钟同步的控制信号,安排各步骤先后。
  • 寄存器组:在 CPU 内部高速暂存操作数、地址和状态。

微处理器(microprocessor)是在一块 IC 中实现 CPU 的器件;一个封装内有两个或更多处理器核心时,称为多核处理器。

存储器与存储设备

存储器多为通过系统总线连接的半导体器件,速度快、容量相对小、每 bit 成本较高,适合保存经常访问或修改的动态信息。存储设备通常使用物理介质并经外围接口连接,容量大、速度较慢、成本低,适合程序文件和数据文件等静态信息。

  • 主存(main memory):保存正在运行的程序、变量、栈以及操作系统所需数据,常使用容量大且可读写的 DRAM。
  • 高速缓存(cache):把主存中频繁访问的数据复制到更快的 SRAM,以降低平均访问时间。
  • BIOS 存储器:保存上电自检(POST)、硬件驱动初始化和加载操作系统所需的低级代码,必须是非易失存储器。早期使用 ROM,后来使用带电池的 CMOS,如今常用 EEPROM 或 Flash,便于升级固件。
  • 内容寻址存储器(CAM):普通存储器是“给地址找数据”,CAM 是“给数据找地址”,常用于高速缓存和分页表。
  • FIFO 存储器:先进先出,只能按写入顺序读出,适合保存必须保持顺序的数据队列。

I/O 端口与外设

I/O 端口是计算机与键盘、鼠标、显示器、扫描仪、打印机、调制解调器、网络适配器及其他计算机交换数据的接口。端口可以是串行或并行、只输入、只输出或双向,且遵循 RS-232、USB、SCSI、FireWire、Ethernet 等标准。标准通常规定连接器、引脚、电平、时序、速率和通信协议。

处理器访问 I/O 有两种方式:

  • 存储器映射 I/O:把端口当作特殊存储器地址,用普通读写指令访问。
  • 直接 I/O:使用专门的处理器引脚和 I/O 指令。

UART、I²C、SPI、CAN、Ethernet 等常见协议往往由微控制器内部硬件和固件直接支持,减少外部电路与驱动代码。

系统总线

系统总线由三部分组成:

总线作用方向与特点
地址总线指定要访问的存储单元或设备通常单向,由 CPU 发出;n 位可寻址 个位置
数据总线在模块间搬运数据双向;位数决定一次传输的数据宽度
控制总线协调读写、复位、中断等动作多条信号各自承担功能,可单向或双向、同步或异步

例如,32 位地址总线可访问 个地址;现代处理器的数据总线常为 64 位。

图 14-2 典型计算机系统及常见外设框图,灰色区域表示计算机本体

图 14-2 典型计算机系统及常见外设框图,灰色区域表示计算机本体。

软件、操作系统与应用程序

硬件是可触摸的电路和器件;软件是指导硬件工作的程序。系统软件主要是操作系统(OS),负责管理硬件和软件,并为应用程序提供一致的接口;应用软件则完成文字处理、会计、仿真、图形设计等具体任务。一个系统同时运行多个程序称为多任务

“调试”一词的来源

Grace Hopper 在排查 Harvard Mark I 故障时,发现继电器中夹着一只飞蛾,并把它贴在日志中。这件事使“debugging(调试)”成为排查计算机软硬件问题的常用说法。

小结自测

  1. 计算机系统的三项基本任务是什么?
  2. CPU 的四个基本单元分别是什么?
  3. CAM 与普通存储器的访问方式有何不同?
  4. 地址总线、数据总线和控制总线分别承担什么任务?

14-2 实用计算机系统设计

实际系统需要解决共享信号线、负载过大、设备选择和速度不匹配四个问题。

共享信号线:总线争用

两个输出端同时连接一根信号线,并试图输出不同电平,就会发生总线争用,大电流可能损坏器件。避免方法主要有:

  • 三态输出:除 HIGH、LOW 外增加高阻态(高阻态相当于断开输出)。共享总线时,任何时刻只能使能一个驱动器,其余驱动器必须处于高阻态。
  • 开集电极/开漏输出:通过外部上拉和“谁拉低谁生效”的方式实现有线逻辑。

图 14-3 实用计算机系统框图

图 14-3 实用计算机系统框图。

图 14-4 三态输出的逻辑器件:禁能时输出高阻态

图 14-4 三态输出的逻辑器件:禁能时输出高阻态。

信号负载与缓冲

一个输出能够可靠驱动的输入数量有限,这个上限称为扇出(fan-out)。连接的输入过多会使输出电压或时序超出规格,这种影响叫信号负载。缓冲器把驱动器与多个负载隔离,既可提高驱动能力,也可提供三态、反相、双向或施密特触发功能。代价是每经过一级缓冲会增加传播延迟。

图 14-5 用缓冲器避免输出端超过 8 个负载的扇出限制

图 14-5 用缓冲器避免输出端超过 8 个负载的扇出限制。

设备选择:地址译码

存储器、I/O 端口等器件都有片选(CS/CE)输入。CPU 把地址放到地址总线上,地址译码器或 PLD 读取地址的高位,产生唯一的片选信号,使目标器件响应读写。例如 16 位地址总线可用最高 4 位译码出不同设备的选择线。

图 14-6 地址译码用于设备选择

图 14-6 地址译码用于设备选择。

系统时序与等待状态

CPU、译码器和缓冲器会产生延迟,不同存储器的建立/保持时间也不同。总线按时钟工作时,若外设还没有准备好,必须插入等待状态:每个等待状态相当于额外占用一个 CPU 时钟周期,使读写总线周期暂时“冻结”。

  • 同步总线:使用同步时钟安排时序,速度较快。
  • 异步总线:等待外设发出“就绪”信号,可插入一个或多个等待状态。
  • 半同步总线:默认完成总线周期,但若没有完成信号就插入等待状态。

若外设没有就绪信号,可用等待状态发生器实现。它通常是定时器或移位寄存器,由 CPU 时钟驱动,并由设备片选启动。

图 14-7 使用 8 位并行输入/串行输出移位寄存器产生等待状态

图 14-7 使用 8 位并行输入/串行输出移位寄存器产生等待状态。

worked example 14-1:计算等待状态数

图 14-8 等待状态发生器

图 14-8 等待状态发生器。

题目:设备被选中时,图中的发生器产生多少个等待状态?

解题:移位寄存器初始装入 。逐个时钟移位:第 1 个时钟为 0 个等待;第 2 个时钟为 1 个等待;第 3 个时钟为 2 个等待;第 4 个时钟为 3 个等待。设备片选变低后的第 4 个时钟,SEROUT 的最高位变低,使 Ready 变低并结束总线周期,因此产生 3 个等待状态

相关问题:若要产生 5 个等待状态,应把移位寄存器的哪条数据输入线接 LOW?答案是 D 线

设计检查

共享总线先检查是否只有一个驱动器使能;多负载先核对扇出;外设较慢时再通过等待状态满足建立/保持时间。

14-3 处理器的基本操作

微处理器的体系结构决定其指令集和执行方式。典型处理器仍由 ALU、指令译码器、寄存器组、时序与控制单元组成。

图 14-9 微处理器(CPU)的基本组成

图 14-9 微处理器(CPU)的基本组成。

图 14-10 简化的处理器模型

图 14-10 简化的处理器模型。

取指/执行周期

CPU 重复执行两个阶段:

  1. 取指(fetch):从内存读出指令,送入指令译码器。
  2. 执行(execute):根据译码结果完成运算、读写或控制操作。

一条指令执行结束后,CPU 回到取指阶段,取下一条指令。

图 14-11 处理器的取指/执行周期

图 14-11 处理器的取指/执行周期。

流水线

流水线把一条指令拆成多个阶段,让不同指令同时处于不同阶段。当流水线填满后,各阶段几乎没有空闲,从而提高吞吐率。它缩短的是完成一批指令的总时间,并不一定缩短单条指令的固有延迟。

图 14-12(a) 非流水线执行:一条指令完成全部阶段后才开始下一条

图 14-12(a) 非流水线执行:一条指令完成全部阶段后才开始下一条。

图 14-12(b) 流水线执行:多条指令同时处于不同阶段

图 14-12(b) 流水线执行:多条指令同时处于不同阶段。

CPU 内部部件

ALU 与累加器:操作数来自累加器和数据寄存器,运算结果通常回写累加器。例如两个 8 位数相加,结果替换累加器中的原操作数。

图 14-13(a) ALU 将累加器与数据寄存器中的两个操作数相加

图 14-13(a) ALU 将累加器与数据寄存器中的两个操作数相加。

图 14-13(b) 加法结果 1000 写回累加器

图 14-13(b) 加法结果 1000 写回累加器。

指令译码器和控制单元:操作码(op-code)是表示指令的二进制编码。译码器识别操作码,控制单元据此产生所需的控制信号和时序。

寄存器组:通用寄存器保存程序所需的任意数据;专用寄存器包括:

  • 标志寄存器:记录零、负、进位、溢出等状态。
  • 程序计数器(PC):保存下一条指令地址。
  • 地址寄存器:暂存并驱动地址总线的地址。
  • 栈指针(SP):指向程序栈,用于子程序和中断。
  • 变址寄存器:参与变址寻址。

读与写操作

地址总线从 CPU 指向内存,数据总线双向传输。

读操作:PC 中的地址装入地址寄存器并放上地址总线;PC 加 1;控制单元发出 Read;内存译码地址并把内容放上数据总线;数据寄存器接收数据。读是非破坏性的,原内存内容仍保留。

图 14-14 处理器与内存的地址、数据和控制连接

图 14-14 处理器与内存的地址、数据和控制连接。

图 14-15 读操作:CPU 给出地址和读信号,内存把数据返回数据总线

图 14-15 读操作:CPU 给出地址和读信号,内存把数据返回数据总线。

写操作:待写数据先放入数据寄存器,再放上数据总线;CPU 给出目标地址和 Write 信号;内存把数据写入选定位置,覆盖原内容。

图 14-16 写操作:数据和写信号到达后,目标内存单元被新数据替换

图 14-16 写操作:数据和写信号到达后,目标内存单元被新数据替换。

CPU 的三项角色

  1. 控制系统硬件和数据流。
  2. 为操作系统提供保护、特权级等硬件支持。
  3. 执行应用程序。CISC 强调丰富复杂的指令,RISC 则采用较小、更高效的指令集,把部分工作交给编译器。

14-4 处理器的寻址方式

寻址方式规定指令如何得到操作数地址。常见五种如下。

固有寻址(隐含寻址)

指令不带操作数,操作数由操作码暗示。例如 CLRA 隐含“全 0”并清零累加器,WAI 不需要操作数,直接让 CPU 等待。

图 14-17 WAI 指令的取指/执行过程

图 14-17 WAI 指令的取指/执行过程。

立即寻址

两字节指令的第一字节是操作码,第二字节就是操作数。例如 LDA #$10 直接把紧随操作码的数值 10 装入累加器。

图 14-18 立即寻址:操作数紧跟在操作码后

图 14-18 立即寻址:操作数紧跟在操作码后。

直接寻址

第一字节是操作码,第二字节是操作数所在的地址,而不是操作数本身。CPU 先取操作码,再取地址,最后访问该地址取得操作数。

图 14-19 直接寻址:指令中的第二字节指向真正的操作数

图 14-19 直接寻址:指令中的第二字节指向真正的操作数。

变址寻址

指令给出偏移量,CPU 将偏移量与变址寄存器内容相加,形成操作数地址。它很适合遍历数组:变址寄存器保存数组基址或当前位置,偏移量选择数组元素。

图 14-20 变址寻址:偏移量与变址寄存器相加得到地址

图 14-20 变址寻址:偏移量与变址寄存器相加得到地址。

相对寻址

分支指令使用相对寻址。指令中的相对地址(可正可负)与 PC 相加,得到跳转目标。向前跳转形成循环或条件分支,向后跳转可以重复执行程序段。

图 14-21 相对寻址:相对位移与程序计数器相加形成分支地址

图 14-21 相对寻址:相对位移与程序计数器相加形成分支地址。

记忆口诀

固有是“操作码自带意思”;立即是“数值就在指令后”;直接是“指令给地址”;变址是“偏移量加变址寄存器”;相对是“位移量加 PC”。

14-5 处理器的特殊操作

轮询、 中断与异常

轮询是 CPU 反复检查每个外设是否需要服务。它简单但浪费 CPU 时间,适合事件规律、时间可预测的设备。

图 14-22 CPU 通过多路器依次轮询外设

图 14-22 CPU 通过多路器依次轮询外设。

中断由硬件事件触发,例如键盘按键、定时器到期;异常由软件或处理器执行过程触发,例如除零、软件陷阱或非法指令。CPU 通常先完成当前指令,再执行中断服务程序(ISR)或异常处理程序。

ISR 与普通子程序有三点不同:

  1. 中断到达时间不可预测,CPU 自动把返回地址和状态压栈,ISR 还需保存自己使用的其他寄存器。
  2. ISR 地址由可编程中断控制器提供,或从内存中的中断向量表查得。
  3. ISR 用 RTI 返回,恢复状态和返回地址;普通子程序用 RET,通常只恢复返回地址。

典型事件包括冷启动复位、软件复位、除零、系统定时器中断和非法操作码。

图 14-23 可编程中断控制器监视外设并向 CPU 提供中断向量

图 14-23 可编程中断控制器监视外设并向 CPU 提供中断向量。

总线请求与 DMA

能够驱动地址总线和控制信号的器件称为总线主设备。复杂系统允许 DMA 控制器、网络控制器或其他 CPU 暂时成为总线主设备。

总线请求与中断不同:

  • 总线请求不必等待当前指令完成,适合迫切的数据搬运或 DRAM 刷新。
  • CPU 让出地址、数据、控制总线,改由请求设备完成传输。
  • CPU 不能重新获得总线,直到请求设备释放总线或系统复位。

基本时序是:

  1. 请求主设备拉动 BR(Bus Request)。
  2. CPU 使总线三态化并拉动 BG(Bus Grant)。
  3. 请求设备控制地址、数据和控制线完成传输。
  4. 请求设备释放总线并拉动 BGACK,表示操作结束。

**DMA(直接存储器访问)**控制器专门在存储器与外设之间搬运大量数据。CPU 先向 DMA 寄存器写入源地址、目标地址、字节数和控制位,DMA 再申请总线并直接传输,避免 CPU 为每个字节反复取指、读、写,因此速度更高。

图 14-24(a) 由 CPU 完成的数据传输,需要多次取指和总线周期

图 14-24(a) 由 CPU 完成的数据传输,需要多次取指和总线周期。

图 14-24(b) 由 DMA 控制器完成的数据传输,CPU 不参与每次搬运

图 14-24(b) 由 DMA 控制器完成的数据传输,CPU 不参与每次搬运。

图 14-25 带 DMA 控制器和可编程中断控制器的典型计算机

图 14-25 带 DMA 控制器和可编程中断控制器的典型计算机。

小结自测

  1. 中断与异常分别由什么事件触发?
  2. ISR 为什么使用 RTI 而不是 RET?
  3. 总线请求为什么比普通中断更紧急?
  4. DMA 如何减少 CPU 的工作量?

14-6 操作系统与硬件

操作系统在应用进程和硬件之间提供环境,三项基本职责是:

  1. 调度和分配资源:CPU 时间、内存和外设访问。
  2. 保护进程与资源:防止进程相互破坏代码、数据或越权访问硬件。
  3. 提供系统服务:进程间通信、硬件驱动等。

多任务与多处理

  • 多任务(multitasking):一个处理器通过时间片切换运行多个进程。抢占式多任务由 OS 到时强制切换;非抢占式多任务要求进程主动让出 CPU。
  • 多处理(multiprocessing):使用多个处理器,每个处理器可运行一个进程或继续多任务。

图 14-26 单核处理器以多个时间片实现多任务

图 14-26 单核处理器以多个时间片实现多任务。

图 14-27 多核处理器上的多任务多处理

图 14-27 多核处理器上的多任务多处理。

用户态、监督态与 MMU

为保护系统,CPU 设有用户态/监督态。操作系统和中断处理运行于监督态,可访问受保护资源;普通应用运行于用户态,不能直接访问关键硬件或其他进程的内存。

内存管理单元(MMU)可完成内存保护、地址转换、虚拟内存、缓存控制和等待状态生成。最简单的保护方式是把允许的起止地址写入 MMU,若地址总线上的地址越界,MMU 就产生硬件中断,交由 OS 处理。

进程间通信通常通过软件中断(陷阱)请求 OS 服务:进程把数据地址、长度等参数放入寄存器,执行陷阱进入监督态;OS 复制或传递数据,设置成功/失败状态,再返回原进程。

14-7 编程

机器语言由 0 和 1 组成;汇编语言用助记符与机器指令一一对应;高级语言更接近人类语言,易读、易维护且具有可移植性。

图 14-28 编程语言相对于计算机硬件的层次

图 14-28 编程语言相对于计算机硬件的层次。

汇编器把汇编源程序转换为机器码;编译器把高级语言的整个源程序转换为特定 CPU 的机器码;解释器则逐行翻译执行。高级语言本身较为通用,但编译器与目标 CPU 相关。

图 14-29 使用汇编器把汇编程序转换为机器程序

图 14-29 使用汇编器把汇编程序转换为机器程序。

图 14-30 使用编译器把高级语言转换为机器码

图 14-30 使用编译器把高级语言转换为机器码。

图 14-31 同一高级语言程序可由不同 CPU 的编译器生成对应机器码

图 14-31 同一高级语言程序可由不同 CPU 的编译器生成对应机器码。

worked example 14-2:累加一列数据

设内存中有一列数,以 0 作为结束标志。算法是:清零总和寄存器;指向第一个数;若为 0 则结束,否则累加;指向下一个数并重复。

mov eax,0                 ; eax 保存总和
mov ebx, OFFSET NumArray  ; ebx 指向数组
next: cmp dword ptr [ebx],0
jz done                   ; 遇到 0 结束
add eax,[ebx]             ; 累加当前数
add ebx, 4                ; 指向下一个 32 位数
jmp next
done: mov [ebx],eax      ; 保存总和
call WriteInteger
exitProg

图 14-32 加法程序的流程图

图 14-32 加法程序的流程图。

分号后的内容是注释,不会被 CPU 执行;OFFSET 取得数组地址,dword ptr 指明访问 32 位数据。

worked example 14-3:找最大无符号数

要求:在以 0 结束的数据中找最大无符号数,并把最大值写入最后位置。

图 14-33 找最大值的流程图,BIG 表示当前最大值

图 14-33 找最大值的流程图,BIG 表示当前最大值。

mov eax,0                 ; BIG 初值
mov ebx,OFFSET NumArray   ; 指向数据
next: cmp dword ptr [ebx],eax
jbe check                 ; 当前值不大于 BIG
mov eax,[ebx]             ; 更新 BIG
check: add ebx,4
cmp dword ptr [ebx],0
jnz next
mov [ebx],eax             ; 保存最大值
call WriteInteger
exitProg

若要找最小值,可将初始 BIG 改为最大可能无符号数(如 FFFF...),并把比较条件改为“当前值小于当前最小值时更新”。

常见指令类别

  • 数据传送MOVINOUTPUSHPOPXCHG
  • 算术ADDSUBINCDECCMPMULDIV
  • 位操作NOTANDORXORTEST、移位和旋转。
  • 循环与跳转JMPJAJBEJNZLOOP
  • 字符串MOVSBMOVSW 等,可复制、比较或扫描连续字节/字。
  • 子程序与中断CALL 调用,RET 返回;中断则由 ISR 和 RTI 服务。
  • 处理器控制:直接设置或清除标志位,例如 STC 设置进位标志。

高级语言编程通常经历:明确问题 → 设计算法 → 用语言表达并编辑 → 编译/汇编、运行和测试。

int total = 0;
int *number = NumArray;
while (*number != 0x00) {
    total = total + *number;
    number++;
}
cout << total;

图 14-34 汇编程序与高级语言程序的等价关系示意

图 14-34 汇编程序与高级语言程序的等价关系示意。

14-8 微控制器与嵌入式系统

通用微处理器要连接 ADC、DAC、UART、定时器和接口适配器后才能方便地处理真实世界信号。**微控制器(MCU)**则把处理器核心、存储器和常用外设集成在一块芯片,专门执行相对固定的任务,构成嵌入式系统。

微控制器的基本结构

典型 MCU 包含:处理器核心、非易失程序存储器、RAM、定时器、ADC/DAC、通信控制器、I/O 端口、内部总线和外部接口。高级 MCU 还可能包含 PLL、DMA、可编程逻辑、JTAG 调试接口和低功耗模式。

图 14-35 典型微控制器的简化框图

图 14-35 典型微控制器的简化框图。

常见外设

  • GPIO:读取开关和传感器,驱动 LED,产生片选或使能信号。
  • 通信控制器:实现 UART、Ethernet、USB、I²C、SPI、CAN、HDLC 等协议。
  • 定时器:产生通信时钟、周期节拍、实时时钟,测量事件间隔。
  • ADC/DAC:ADC 把传感器模拟电压/电流转成数字量;DAC 把数字值转成模拟控制量。
  • 正交编码器:用格雷码序列判断运动方向和位置,计数变化率反映速度。一个运动维度通常需要一个编码器。
  • PWM:改变占空比控制电机速度、灯光亮度和功率。
  • 外部存储器控制器:连接额外 SRAM、SDRAM、Flash 等,并可提供片选、端口宽度和等待状态配置。

许多 MCU 引脚是复用的:同一引脚可以是 UART、USB、Ethernet、外部总线或 GPIO,但同一时刻只能选一种功能。复用能减少引脚数和成本,却可能造成外设资源冲突,需要通过其他引脚或外部电路解决。

外设配置寄存器

  • 控制寄存器:选择工作模式、协议、速率、数据包大小、错误检测和中断/轮询方式。
  • 状态寄存器:报告忙闲、完成和错误状态;某些状态位读数据后自动清除,另一些需要软件清除。
  • 数据寄存器:保存送入外设、由外设处理或正在处理的数据。

GPIO 常只有方向控制寄存器和数据寄存器;通信控制器可能还需要收发缓冲区描述符、长度、中断状态和屏蔽寄存器。使用图形化配置工具可以自动生成初始化代码,但仍须阅读手册并复核寄存器值。

嵌入式系统实例

手持设备:计算器的 ROM 保存固件,RAM 保存栈和数据,GPIO 连接键盘,LCD 驱动连接显示器,USB 控制器负责通信,定时器负责自动关机、时钟和闹钟。

图 14-36 基于微控制器的可编程计算器框图

图 14-36 基于微控制器的可编程计算器框图。

消费电器:微波炉、咖啡机、洗衣机、冰箱、家电和扫地机器人都可由 MCU 完成预设程序和用户控制。

汽车系统:发动机、燃油、制动、安全气囊、门锁、空调、仪表和导航均需 MCU;汽车环境还要求器件耐受温度、湿度、振动和电噪声。

机器人与自动化:编码器提供位置反馈,PWM 驱动电机,GPIO 读取限位传感器。上电时先回到原点并清零计数器,再按程序运动,同时根据反馈调整速度和加速度。

图 14-37 单轴机器人系统框图:编码器反馈位置,PWM 控制电机,GPIO 检测限位

图 14-37 单轴机器人系统框图:编码器反馈位置,PWM 控制电机,GPIO 检测限位。

MCU 与微处理器不要混淆

微处理器通常主要是 CPU,需要外接存储器和外设;微控制器把 CPU、存储器、外设和接口集成在单芯片,面向实时、专用的嵌入式任务。

14-9 片上系统(SoC)

SoC 是把计算机或电子系统的大量功能集成在一块半导体芯片上的系统级 IC。它相较 MCU 功能更丰富,适合智能手机、平板、数码相机等高性能、低功耗设备;优点是体积小、功耗低、系统成本和芯片数量减少。

图 14-38(a) 典型 SoC 球栅阵列封装

图 14-38(a) 典型 SoC 球栅阵列封装。

图 14-38(b) SoC 封装底部的球栅触点

图 14-38(b) SoC 封装底部的球栅触点。

典型 SoC 可包含:

  • 一个或多个 CPU 核心
  • DSP 数字信号处理器
  • GPU 图形处理器
  • ROM、RAM、EEPROM、Flash 和缓存
  • ADC、DAC 等模拟功能
  • USB、FireWire、I²C、USART、SPI、CAN、Bluetooth、Wi-Fi、Ethernet、音频和 RF 接口
  • 振荡器、PLL 等时钟源
  • 电压调节和电源管理
  • 总线桥、各种外设、可编程逻辑和专用逻辑

SoC 常采用 ARM 的 RISC 架构,以较少的指令和较低能耗获得高性能。GPU 处理图形和视频;DSP 处理数字信号;北桥连接 CPU、内存和内部 PCI 总线,南桥管理 I/O 连接(具体实现会因芯片而异)。微控制器也可看作功能较受限的 SoC。

图 14-39 典型 SoC 的通用框图

图 14-39 典型 SoC 的通用框图。

综合练习

图 14-40 微控制器框图识别练习

图 14-40 微控制器框图识别练习。

全章总结

  • 计算机完成获取、处理和输出信息三项任务。
  • CPU 由 ALU、指令译码器、时序/控制单元和寄存器组构成。
  • 地址总线指定位置,数据总线搬运信息,控制总线协调动作。
  • 三态输出、开集电极/开漏输出可避免总线争用;缓冲器解决扇出和负载问题。
  • 地址译码器产生片选信号;等待状态解决 CPU 与外设的速度不匹配。
  • CPU 按取指/执行周期运行,流水线让多条指令重叠处理。
  • 固有、立即、直接、变址、相对是五种常见寻址方式。
  • 中断/异常由 CPU 服务,DMA 则允许其他总线主设备直接搬运数据。
  • 操作系统负责资源分配、保护和系统服务;多任务依赖时间片,多处理依赖多个处理器。
  • 汇编器翻译汇编语言,编译器翻译高级语言;程序由算法和指令构成。
  • MCU 集成 CPU、存储器和外设,适合嵌入式实时控制;SoC 在单芯片上集成更完整的计算系统。

术语速查

术语含义
ALU算术逻辑单元
BIOS上电初始化硬件并加载操作系统的低级固件
CPU中央处理单元
DMA直接存储器访问
ISR中断服务程序
MMU内存管理单元
MCU微控制器
SoC片上系统
操作码表示处理器指令的编码或助记符
操作数被指令处理的对象
总线主设备能够控制系统总线的设备
等待状态延迟一个处理器时钟周期的总线状态

综合自测题

  1. 10 位地址总线可以访问多少个地址?为什么?
  2. 为什么共享总线时不能同时使能两个普通输出?
  3. 一条指令从内存读回到执行完成,涉及哪些主要部件?
  4. 若 PC 为 、相对位移为 ,向前分支目标地址是多少?
  5. 解释 DMA 与 CPU 逐字节搬运的效率差异。
  6. 比较轮询、硬件中断和软件异常。
  7. 说明多任务和多处理的区别。
  8. 汇编器和编译器分别处理哪类源程序?
  9. 说出至少五种 MCU 外设及其用途。
  10. SoC 相比 MCU 还有哪些典型功能模块?

复习建议

先画出“CPU—总线—存储器/I/O”的系统框图,再用一次读操作和一次写操作标出地址、数据、控制信号的方向;最后用“取指→译码→执行→中断/DMA”串起处理器工作过程。这样能把器件级数字电路和系统级计算机结构联系起来。

自测一下