# 中央处理器:数据通路和控制器

# 单周期数据通路设计

# CPU 功能及其与计算机性能的关系

# CPU 基本功能

(1)控制指令执行顺序
(2)控制指令执行操作
(3)控制操作时序
(4)对数据进行运算
(5)对访存或 I/O 访问进行控制
(6)异常和中断处理

# CPU 执行过程

  • 取指令
  • PC+1 送 PC
  • 指令译码
  • 进行主存地址运算
  • 取操作数
  • 进行算术 / 逻辑运算
  • 存结果
  • 判断和检测 “异常” 事件
  • 若有异常,则自动切换到异常处理程序
  • 检测是否有 “中断” 请求,有则转中断处理

计算机性能 (程序执行快慢) 由三个关键因素决定:

  • 指令数目、CPI、时钟周期
  • 指令数目由编译器和指令集决定
  • 时钟周期和 CPI 由 CPU 的实现来决定

# 时钟周期、CPU 周期、指令周期区别

# 组成指令功能的四种基本操作

  • 读取某一主存单元的内容,并将其装入某个寄存器
  • 把一个数据从某个寄存器存入给定的主存单元中
  • 把一个数据从某个寄存器送到另一个寄存器或者 ALU
  • 进行某种算术运算或逻辑运算,将结果送入某个寄存器

# 数据通路 (DataPath)

指令执行过程中,数据所经过的路径,包括路径中的部件。它是指令的执行部件。

# 数据通路的基本结构

  • 数据通路由两类部件组成
    • 组合逻辑元件(也称操作元件)
    • 存储元件(也称状态元件)时钟信号控制
  • 元件间的连接方式
    • 总线连接方式
    • 分散连接方式
  • 数据通路如何构成?
    • 由 “操作元件” 和 “存储元件” 通过总线方式或分散方式连接而成
  • 数据通路的功能是什么?
    • 进行数据存储、处理、传送
    • 单周期控制器设计
# 操作元件
  • 加法器
  • 多路选择器
  • 算术逻辑部件
  • 译码器
# 存储元件

寄存器

image-20240114142948408

有一个写使能(Write Enable-WE)信号
0: 时钟边沿到来时,输出不变
1: 时钟边沿到来时,输出开始变为输入
若每个时钟边沿都写入,则不需 WE 信号

寄存器组

image-20240114143113185

两个读口(组合逻辑操作):

  • busA 和 busB 分别由 RA 和 RB 给出地址。

  • 地址 RA 或 RB 有效后,经一个 “取数时间 (AccessTime)”,BusA 和 BusB 有效。
    一个写口(时序逻辑操作):

  • 写使能为 1 的情况下,时钟边沿到来时,busW 传来的值开始被写入 RW 指定的寄存器中。

存储器

image-20240114143236303

  • Data Out:32 位读出数据
  • Data In: 32 位写入数据
  • Address:读写公用一个 32 位地址
  • 读操作(组合逻辑操作):地址 Address 有效后,经一个 “取数时间 AccessTime”,Data Out 上数据有效。
  • 写操作(时序逻辑操作) :写使能为 1 的情况下,时钟 Clk 边沿到来时,Data In 传来的值开始被写入 Address 指定的存储单元中。

# 取指令部件

所有指令操作:

  • 取指令
  • 更新 PC

# R 型指令 (以 add 和 sub 为代表)

image-20240114144344010

Ra, Rb, Rw 分别对应指令的 rs, rt, rd

指令 “add rd, rs, rt” 的控制信号应为?
ALUctr=add,RegWr=1

# I 型指令

# ori 等逻辑运算指令

立即数零扩展,并与 rs 内容做 “或” 运算

image-20240114145725088

Ori 指令的控制信号:RegDst=1;RegWr=1;ALUSrc=1;ALUctr=or

# lw 访存指令

image-20240114145834096

RegDst=1, RegWr=1, ALUctr=add, ExtOp=1, ALUSrc=1, MemWr=0, MemtoReg=1

# sw 存数指令

image-20240114150306004

RegDst=x, RegWr=0, ALUctr=add, ExtOp=1, ALUSrc=1, MemWr=1, MemtoReg=x,不涉及 RegDst,MemtoReg 信号

# branch 指令

image-20240114150644330

RegDst=x, RegWr=0, ALUctr=sub, ExtOp=x, ALUSrc=0, MemWr=0, MemtoReg=x, Branch=1

PC 是一个 32 位地址:
顺序执行时: PC [31:0] = PC [31:0] + 4
转移执行时: PC [31:0]= PC [31:0] + 4 + SignExt [Imm16] * 4

MIPS 按字节编址,每条指令为 32 位,占 4 个字节,故 PC 的值总是 4 的倍数,即后两位为 00,因此,PC 只需要 30 位即可。

顺序执行时: PC [31:2] = PC [31:2] + 1
转移执行时: PC [31:2] = PC [31:2] + 1 + SignExt [Imm16]
取指令时:指令地址 = PC [31:2] 串接 “00”

# J 型指令

image-20240114152225508

RegDst=ExtOp=ALUSrc=MemtoReg=ALUctr=x, RegWr=0, MemWr=0, Branch=0, Jump=1

# 单周期数据通路的实现

image-20240114152518520

# 单周期控制器设计

取址
取指部件由旧控制信号控制,会不会有问题?
不会,因为 PC 输入端的值不会写入直到下个 Clk 到来
只要保证下个 Clk 来之前能产生正确的 PC 即可!
译码
更新 PC

image-20240114153751408

# 指令与控制信号关系表

image-20240114154039364

# 时钟周期

lw 指令的执行时间最长,它所花时间作为时钟周期

单周期处理器的 CPI 为 1,然而,实际上,单周期处理器并不是最优选择,因为一些指令可能只需要很短的时间完成,而其他指令可能需要较长的时间。为了更好地利用硬件资源,提高性能,现代处理器通常采用流水线(Pipeline)架构,允许多条指令同时在不同的阶段执行,从而降低整体执行时间。

# 微程序控制器设计与异常处理

# 硬连线路设计和微程序设计

硬连线路设计的特点:

  • 优点:速度快,适合于简单或规整的指令系统,例如,MIPS 指令集。
  • 缺点:它是一个多输入 / 多输出的巨大逻辑网络。对于复杂指令系统来说,结构庞杂,实现困难;修改、维护不易;灵活性差。甚至无法用有限状态机描述!

微程序控制器的基本思想:

  • 仿照程序设计的方法,编制每个指令对应的微程序
  • 每个微程序由若干条微指令构成,各微指令包含若干条微命令(一条微指令相当于一个状态,一个微命令就是状态中的控制信号)
  • 所有指令对应的微程序放在只读存储器中,执行某条指令时,取出对应微程序中的各条微指令,对微指令译码产生对应的微命令,这个微命令就是控制信号。
  • 这个只读存储器称为控制存储器(Control Storage),简称控存 CS 。

微程序设计的特点:具有规整性、可维性和灵活性,但速度慢。

# 异常和中断处理

程序执行过程中,CPU 会遇到一些特殊情况,使正在执行的程序被 “中断”
此时,CPU 中止原来正在执行的程序,转到处理异常情况或特殊事件的程序去执行,执行后再返回到原被中止的程序继续执行

内部 “异常”:在 CPU 内部发生的意外事件或特殊事件

  • 按发生原因分为硬故障中断和程序性中断两类

    • 硬故障中断:如电源掉电、硬件线路故障等
    • 程序性中断:执行某条指令时发生的 “例外 (Exception)”,如溢出、缺页、越界、越权、非法指令、除数为 0、堆栈溢出、访问超时、断点、单步、系统调用等
  • 按处理方式分为故障 (fault)、自陷 (Trap) 和终止 (Abort) 三类

    • 故障:执行指令引起的异常事件,如溢出、缺页、堆栈溢出、访问超时等
    • 自陷:预先安排的事件,如单步跟踪、系统调用 (执行访管指令) 等(自愿中断)
    • 终止:硬故障事件,机器将 “终止”,调出中断服务程序来重启操作系统

外部 “中断”:在 CPU 外部发生的特殊事件,通过 “中断请求” 信号向 CPU 请求处理

  • 如实时钟、控制台、打印机缺纸、外设准备好、采样计时到、DMA 传输结束等

# 中断和异常的区别

  1. 产生源不相同,异常是由 CPU 产生的,而中断是由硬件设备产生的
  2. 中断是异步的,这意味着中断可能随时到来;而异常是 CPU 产生的,所以,它是时钟同步的。
  3. 当处理中断时,处于中断上下文中;处理异常时,处于进程上下文中。