15_控制器

Charlie

1. 指令周期

处理单个指令的过程

  • 取指周期:从内存中提取一条指令
  • 执行周期:执行所提取的指令

1.1. 指令周期

89_VoIPSCreencastCoverWnd.png

1.1.1. 状态图

8a_VoIPSCreencastCoverWnd.png

1.2. 带中断的指令周期

8b_VoIPSCreencastCoverWnd.png

1.2.1. 状态图

8c_VoIPSCreencastCoverWnd.png

1.3. 间址周期

  • 间址周期:把间接地址的读取看成是一个额外的指令子周期
    • 指令的执行可能涉及一个或多个存储器中的操作数,它们每个都要求一次存储器访问
    • 使用间接寻址,还需要额外的存储器访问
    • 相当于取了两次操作数
      8d_VoIPSCreencastCoverWnd.png

1.3.1. 状态图

8e_VoIPSCreencastCoverWnd.png

1.4. CPU

1.4.1. CPU任务

  1. 取指令:CPU必须从存储器(寄存器、cache、主存)读取指令
  2. 解释指令:必须对指令进行译码,以确定所要求的动作
  3. 取数据:指令的执行可能要求从存储器或输入/输出(I/O)模块中读取数据
  4. 处理数据:指令的执行可能要求对数据完成某些算术或逻辑运算
  5. 写数据:执行的结果可能要求写数据到存储器或I/O模块

1.4.2. CPU需求

  • 寄存器:小容量内部存储器
    • CPU需要在指令周期中临时保存指令和数据
    • CPU需要记录当前所执行指令的位置,以便知道从何处得到下一条指令

假定CPU有

  • 1个存储地址寄存器(MAR)
  • 1个存储缓冲寄存器(MBR)/ 存储数据寄存器(MDR)
  • 1个程序计数器(PC)
  • 1个指令寄存器(IR)

1.5. 数据流

2. 处理器结构

90_VoIPSCreencastCoverWnd.png

3. 寄存器

3.1. 用户可见寄存器

  • user-visible register
    • 允许编程人员通过机器语言或汇编语言访问,通过优化寄存器的使用而减少对主存的访问

3.1.1. 类型

  1. 通用寄存器(general-purpose register)
    • 可被程序员指派各种用途
  2. 数据寄存器(data register)
    • 仅可用于保持数据而不能用于操作数地址的计算
  3. 地址寄存器(address register)
    • 可以是自身有某些通用性,或是专用于某种具体的寻址方式
    • 例如:段指针、变址寄存器、栈指针
  4. 条件码寄存器(condition codes register) / 标志(flag)寄存器
    • CPU硬件设置这些条件位作为操作的结果
    • 至少是部分用户可见的

3.1.2. 设计出发点

  1. 使用完全通用的寄存器还是规定各寄存器的用途?
  2. 寄存器数量
    • 太少的寄存器会导致更多的存储器访问
    • 太多的寄存器又不能显著地减少存储器访问
  3. 寄存器长度
    • 应能保存大多数数据类型的值
    • 某些机器允许两个相邻的寄存器作为一个寄存器来保持两倍长度 的值

3.1.3. 保存和恢复

  • 子程序调用
    • 会导致自动保存所有用户可见的寄存器,并在返回时自动取回
    • 这些保存和恢复是作为调用和返回指令执行功能的一部分,由CPU完成
    • 允许各个子程序独立地使用用户可见寄存器
  • 子程序调用之外保存用户可见寄存器的相关内容是程序员的责任,需要在程序中为此编写专门的指令

3.2. 控制和状态寄存器

3.2.1. 类型

  1. 程序计数器(Program counter,PC)
    • 存有待取指令的地址
    • 通常在每次取指令之后,PC的内容即被CPU更改,转移或跳步指令也会修改PC的内容,因此总指向将被执行的下一条指令
  2. 指令寄存器(Instruction register,IR)
    • 存有最近取来的指令,在其中分析操作码和操作数
  3. 存储器地址寄存器(Memory address register,MAR)
    • 直接与地址总线相连,存有存储器位置的地址
  4. 存储器缓冲寄存器(Memory buffer register,MBR)
    • 直接与数据总线相连,存有将被写入存储器的数据字或从存储器读出的字,用户可见寄存器再与MBR交换数据
    • ALU可对MBR和用户可见寄存器直接存取
  5. 程序状态字(Program status word,PSW)
    • 一个或一组包含状态信息的寄存器,包含条件码加上其他状态信息
    • 包含的字段或标志
      • 符号(Sign):容纳算术运算结果的符号位
      • 零(Zero):当结果是0时被置位
      • 进位(Carry):若操作导致最高位有向上的进位(加法)或借位(减法)时被置位,用于多字算数运算
      • 等于(Equal):若逻辑比较的结果相等,则置位
      • 溢出(Overflow):用于表示算术溢出
      • 中断允许/禁止:用于允许或禁止中断
      • 监管(Supervisor):指出CPU是执行在监管模式中还是在用户模式中
  6. 一个指向含有附加状态信息的存储器块的指针寄存器
  7. 在使用向量式中断的机器中,可能提供有一个中断向量寄存器
  8. 若栈用于实现某些功能,需要有一个系统栈指针
  9. 对于虚拟存储器系统,会有一个页表指针寄存器

3.2.2. 设计出发点

  1. 设计出发点
    • 某些类型的控制信息是专门为操作系统使用的
    • 若CPU设计者对将要使用的操作系统有基本的了解,则寄存器 的组织可能在一定程度上为该操作系统定制
  2. 控制信息在寄存器和存储器之间的分配
    • 一种普遍的做法是将存储器最前面(最低地址)的几百或几千个字用于控制目的
    • 在成本和速度之间进行权衡

4. 微操作

  • 定义:执行程序时,计算机操作是由一系列指令周期组成,每个周期执 行一条机器指令。每个指令周期又可以看作是由几个更小的子周期组成。每个子周期由一系列涉及CPU寄存器操作的更小步骤组成,这些步骤称为微操作
    91_VoIPSCreencastCoverWnd.png

4.1. 微操作分组的原则

  • 事件的流动顺序必须是恰当的
    • 例:MAR <- (PC) 必须先于MBR <- 内存,因为内存读操作要使用 MAR中的地址
  • 必须避免冲突
    • 例:MBR <- 内存 和IR <- MBR 这两个微操作不应出现在同一时间 单位里
  • 满足上述条件下,所用的时间单位尽可能少

4.2. 取指周期

  • 出现在每个指令周期的开始,将指令从存储器中取出
  • 过程:
    92_VoIPSCreencastCoverWnd.png

4.3. 间址周期

  • 如果指令采用间接寻址,则在指令执行前有一个间址周期
  • 完成间址周期后,IR的状态与不使用间接寻址方式的状态是 相同的,已经为执行周期准备就绪
  • 过程:93_VoIPSCreencastCoverWnd.png

4.4. 执行周期

  • 对于不同的操作码,会出现不同的微操作序列
  • 例子
    • 加法指令94_VoIPSCreencastCoverWnd.png

    • “转移并保存地址”指令95_VoIPSCreencastCoverWnd.png

4.5. 中断周期

  • 在完成执行周期时,要确定是否有允许的中断产生
  • 如果有,则出现一个中断周期
  • 过程:96_VoIPSCreencastCoverWnd.png

4.6. 指令周期代码

  • Instruction Cycle Code,ICC

  • 取指、间址、中断周期各有一个微操作序列,执行周期则对于每 个操作码有一个微操作序列

  • 指令周期代码:假设一个2位的ICC寄存器,明确CPU处于指令 周期哪个阶段

    • 00:取指
    • 01:间值
    • 10:执行
    • 11:中断
      msedge_846_503.png

4.7. CPU内部总线

  • ALU和寄存器都连接到CPU内部总线上
  • 为了数据在该内部总线和各寄存器之间传递, 内部总线和寄存器之间有门和控制信号
  • 控制线控制着数据和系统总线(外部)的交 换以及ALU的操作

msedge_319_719.png

5. 控制器

5.1. 基本任务

  • 定序(sequencing):根据正被执行的程序,控制器使CPU以正确 的顺序通过一系列微操作
  • 执行(execution):控制器使每个微操作得以完成

5.2. 输入

  • 指令寄存器:当前指令的寻址方式和操作码
  • 标志:确定CPU的状态和前一个ALU操作的结果
  • 时钟:控制器要在每个时钟脉冲完成一个或一组同时的微操作
  • 来自控制总线的控制信号:向控制器提供控制信号
    msedge_755_375.png

5.3. 输出

所有的控制信号最终作为二进制输入量 直接输入到各个逻辑门

  • CPU内的控制信号
    • 用于寄存器之间传送数据
    • 用于启动特定的ALU功能
  • 到控制总线的控制信号
    • 到存储器的控制信号
    • 到I/O模块的控制信号

msedge_740_329.png

5.4. 例子

msedge_1187_902.png

msedge_1188_896.png

5.5. 控制器最小特性

  • 它只需要知道将被执行的指令和算术、逻辑运算结果的性质(如 正负、溢出等),而不需要知道正被处理的数据或得到的实际结 果具体是什么
  • 它只是以少量的送到CPU内的和送到系统总线上的控制信号来实 现控制

6. 控制器实现

  • 硬布线实现(hardwired implementation)
    • 控制器是一个组合电路,把输入逻辑信号转换为一组输出逻辑信号, 即控制信号
  • 微程序实现(microprogrammed implementation)
    • 控制逻辑是微程序指定的,控制器是一个相对简单的逻辑电路,通 过执行每条微指令来产生控制信号

6.1. 硬布线实现

6.1.1. 控制器输入

  • 标志和控制总线信号

    • 每位都有特定的意义
  • 指令寄存器

    • 通过译码,使每一操作码有一个唯一的逻辑输入
    • 译码器有 n 个输入和个输出
      • 控制器要考虑变长的操作码,译码器会更复杂些
  • 时钟

    • 在一个指令周期内,控制器要在不同时间单位发送不同的控制信号
    • 使用一个定时器作为控制器的输入,并且控制器在指令周期结束时必须通知定时器以使其重新开始计数
      msedge_591_358.png

6.1.2. 控制器逻辑

  • 为每个输出的控制信号设计一个关于控制器输入的布尔表达式

msedge_1092_491.png

6.2. 微程序实现

6.2.1. 基本概念和思路

  • 微程序(固件)介于硬件与软件之间
    • 设计固件比设计硬件容易,但写固件程序比软件程序困难
    • 微指令序列
  • 微指令:每行描述一个时间内出现的一组微操作
  • 基本思路
    • 对于每个微操作,控制器的任务是产生一组控制信号,即控制器发出的每根控制线或开或关(每根控制线由一个二进制数字表示)
    • 构造一个控制字,每位代表一根控制线,这样每个微操作能用控制 字中的不同的0和1的样式来表示
    • 将这些控制字串在一起,可以表示控制器需要完成的微操作序列

msedge_1057_703.png

6.3. 任务

msedge_1137_527.png

6.4. 定序

msedge_1148_847.png

6.5. 构成

msedge_1179_692.png

6.6. 工作流程

msedge_1182_712.png

msedge_1173_711.png

6.7. 优点与缺点

  • 优点
    • 简化了控制器的设计任务
    • 实现成本低,减少出错机会
  • 缺点
    • 比采用相同半导体工艺的硬布线控制器慢一些
  • 标题: 15_控制器
  • 作者: Charlie
  • 创建于 : 2023-02-06 21:26:00
  • 更新于 : 2024-07-05 12:55:04
  • 链接: https://chillcharlie357.github.io/posts/404b6c10/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论