0%

计算机组成原理——第6章

第6章 中央处理器

6.1 概述

CPU的基本组成:运算器、控制器
CPU的主要功能:程序控制、操作控制、时序控制、异常控制、数据加工等

主要寄存器:

  • PC:程序计数器,即EIP(x86/x86-64)/PC(ARM/MIPS)
  • IR:指令寄存器,保存当前正在执行的指令
  • AR:地址寄存器,用于保存CPU访问主存的单元地址
  • DR:数据寄存器,用于保存从主存读入或将写入主存的数据
  • AC:累加寄存器
  • PSW:程序状态字,保存由某些指令建立的条件标志

6.2 指令周期

指令执行时,首先以PC为地址访问主存取指令,同时更新PC的值作为后续指令的地址。若为分支指令且满足分支条件,则重新修改PC值作为分支目标地址,否则经历取操作数、执行指令、存操作数的基本过程。

  • 时钟周期=节拍脉冲=震荡周期,可以完成一次微操作
  • 机器周期=CPU周期,从主存读出一条指令的最短时间,可以完成一次复杂操作
  • 指令周期,从主存取一条指令并执行指令的时间,由若干机器周期构成,机器周期包含若干时钟周期。

时间控制的方式:

  • 定长指令周期:早期三级时序系统,机器周期数固定,节拍数固定,按照机器周期同步,mips单周期。
  • 变长指令周期:现代时序系统,机器周期数可变,节拍数可变,按照时钟周期同步,mips多周期。

将一条指令从取出到执行完成所需要的时间称为指令周期,指令周期可分为:

  • 取指周期:以PC的内容为地址从主存中取出指令,并计算后续指令的地址。对于变长指令需要经过指令译码得到指令的实际字节长度之后才能计算并修改PC的值。
  • 译码/取操作数周期:对指令寄存器中的指令字进行指令译码,识别指令类型。根据指令地址码生成操作数有效地址,然后访问相应寄存器或主存单元。若为间接寻址则还需要加入间址周期(访存周期)得到操作数的地址。该周期内不能并行读取操作数,因此可能会经历多次取操作数周期。
  • 执行周期:向运算器等部件发送操作控制命令,对已经取出的操作数进行加工处理,并将处理状态送入PSW中。不同指令的执行周期不同。
  • 写回周期:将运算结果写回到目的寄存器或存储器中,将运算结果写回存储器较慢。

6.3 数据通路及指令操作流程

数据通路——执行部件之间传输信息的路径。

  • 通路的建立由控制信号控制,受到时钟驱动。
  • 不同指令,同一指令在执行的不同阶段的数据通路不同。
  • 数据通路可以分为共享通路和专用通路。

6.3.1 数据通路模型与定时

时钟信号上升沿时刻到寄存器输出稳定时刻之间有一段时延,称为寄存器延迟(clk_to_q)。数据处理单元处理寄存器内容有一定时延,将所有输出信号稳定的延迟,也即所需稳定时间最长的输出信号的稳定时间,称为关键路径延迟(max)。将计算结果保存到寄存器之后还需要稳定一段时间才能够接受下一个上升沿,称为寄存器建立时间(setup)。时钟上升沿到来之前的数据输入需要保持一定时间的稳定,称为寄存器保持时间(hold)。故数据通路的最小时钟周期必须大于Tclk_to_q+Tmax+Tsetup,其中Tmax占主导。

保持时间违例:两个寄存器在一个上升沿同时更新新值,其中一个寄存器经过寄存器延迟和最短路径延迟(Tmin)到达另一个寄存器输入端,为了不让该信号修改寄存器的值,应该满足寄存器保持时间Thold<寄存器延迟Tclk_to_q+组合逻辑最短路径延迟Tmin

6.3.2 单总线结构的数据通路

数据通路的分类:

  • 共享通路(总线型):主要部件都连接在公共总线上,各个部件之间通过总线进行数据传输。其结构简单,实现容易,但并发性较差,需要分时使用总线,效率较低。
  • 专用通路:并发度高,性能好,但设计复杂,成本高。可以看做多总线结构。

CPU的运算器、控制器、寄存器堆等核心部件均由一条内部的公共总线连接起来,构成单总线结构的数据通路。这条内部公共总线称为CPU的内总线。将连接CPU、内存及输入输出设备等部件构成计算机系统的总线称为系统总线或外总线。

考虑执行指令add r0, r1,首先需要从寄存器堆中取出两个寄存器的值并输入到ALU的两个输入端,ALU的两个输入端连接有两个锁存器,可以分别保存两个寄存器的值,取出两个寄存器的值需要使用两个时钟周期,两次取值操作分别占用总线一个周期。之后ALU计算得到结果,通过总线输入到寄存器堆中,共需要3个周期和2个锁存器。

如果能够添加一条总线直接连接ALU的一个输入和寄存器堆,则只需要两个时钟周期即可执行上述指令。第一步将一个寄存器的值保存到ALU一端的锁存器,第二步第二条总线将第二个寄存器的值输入到ALU另一端,ALU进行计算并通过第一条总线输出到寄存器堆中。共需2个时钟周期和1个锁存器。

指令执行示例

LOAD R0, 6#
功能:将主存地址为6的内容写入R0寄存器

  • 取指令数据通路:
    • T1:PC保存到AR和X中,准备访问AR处地址的指令内容
    • T2:X+1保存到Z中,程序计数器+1,准备将Z写到PC,Z即为下一条指令地址
    • T3:Z保存到PC,从主存取出指令内容保存到DR
    • T4:将DR保存到IR,至此取指完成,指令内容已经被保存到IR。
  • 译码周期:略
  • 执行周期,完成指令要求的任务,即首先取内存地址为6的数据,再保存到寄存器R0
    • T1:将IR中的地址操作数部分(值为6)保存到AR,X保存PC的值
    • T2:主存读取
    • T3:主存将读取的数据保存到DR
    • T4:将DR的内容保存到寄存器R0

MOVE R1, 10

  • 执行周期:
    • T1:将指令中的地址操作数部分(值为10)保存到R1

ADD R0, R1

  • 执行周期
    • T1:将寄存器R0保存到X
    • T2:R1的值输出到总线,ALU接收X和总线的数据,计算结果并保存到Z
    • T3:将Z的值写入到R0

STORE R0, (R2)

  • 执行周期,将R0的值保存到地址为R2的内存空间
    • T1:将R2的值保存到AR
    • T2:将R0的值保存到DR
    • T3:将DR的值写入到内存地址为AR的空间

JMP 1000

  • 执行周期
    • T1:将IR中的地址操作数(1000)保存到PC

6.5 硬布线控制器

硬布线控制器可以看成产生固定时序控制信号的逻辑电路。
输入信号:指令译码,时钟信号,反馈信号
输出信号:功能部件控制信号序列
设计目标:最少元件,最快速度
理论基础:布尔代数
组成器件:门电路、触发器

  • 定长指令周期:使用2个机器周期,8个时钟周期,由于一些指令并不需要所有8个时钟周期,因此速度较慢(会浪费时间),但设计简单
  • 变长指令周期:时钟周期数量可变,速度快,但设计较复杂

硬布线控制器模型:包含指令寄存器和指令译码器,时序发生器、硬布线控制器组合逻辑单元等几个部分,其中硬布线控制器组合逻辑单元用于产生指令执行所需要的所有控制信号序列,是控制器的核心。
输入来自:

  • 指令译码器的输出
  • 执行部件以及IO总线的反馈信号
  • 时序发生器的状态周期电位信号和节拍电位信号

输出信号:微操作控制信号序列,可以看做所有输入信号的逻辑函数,每个控制信号都是由不同的指令译码信号、状态周期信号、节拍定位信号、状态反馈信号构成的逻辑与操作的和。(积之和范式)

固定指令周期硬布线控制器设计过程

  • 设计三级时序产生器:所有指令固定机器周期数,节拍数
  • 列出所有机器指令的指令周期流程图,明确每个节拍的控制信号
  • 找出产生同一个微操作控制信号的条件
  • 写出各个微操作控制信号的布尔表达式
  • 化简各个表达式
  • 利用组合逻辑电路实现

可变周期硬布线控制器设计步骤

  • 列出所有机器指令的指令周期流程图,明确每一个节拍的控制信号
  • 绘制指令执行状态转换图
  • 根据状态转换图构建状态集真值表,实现有限状态机组合逻辑
  • 实现控制器组合逻辑电路

6.6 微程序控制器

6.6.1 微程序控制器的基本概念

硬布线为同步逻辑,设计复杂,速度快,贵,且难以修改。一条指令有多个时钟周期,一个时钟周期对应一个状态,一个状态对应一组并发信号。
微程序为存储逻辑,设计简单,速度慢,偏移,容易修改。将并发信号实现保存为微指令,一条指令对应于多条微指令,状态等同于存储器地址。

微地址寄存器μAR为控制存储器提供微指令地址,初始化为0,控制存储器0号单元应该为取指令微程序的第一条微指令。

6.6.2 微程序控制器组成原理

利用软件方法设计硬件的技术,将完成指令所需的控制信号按照格式编写为微指令,并存放到控制存储器(控存ROM),一条机器指令对应于一段微程序,微程序中有多条微指令。
将存储技术与程序设计相结合,可以回避复杂的同步时序逻辑设计。

单总线CPU的微指令构造:

  • 操作控制字段:用于存储操作控制信号,每一位对应一个控制信号,也称微命令,可以同时给出多个操作信号。
  • 顺序控制字段:用于控制微程序的执行顺序,判别逻辑为0,下一条微指令地址从下址字段获取,否则按照约定规则生成。一个微程序的最后一条微指令的判别字段非零,代表地址跳转。

6.6.3 微程序控制器设计

微指令包含操作控制字段和顺序控制字段,一条微指令对应于一个时钟周期,微指令操作控制字段的信号在该时钟周期之内有效。指令需要多少时钟周期就包含多少微指令。操作控制字段的每一位都代表一个控制结构的开启与否。在一个时钟周期内,需要开启的控制字段在操作控制字段中的对应位会被设置为1。

上面的顺序控制字段中P1表示下址字段是否有效,在取指周期的最后一个时钟周期,下址字段就无效,因为下一条微命令的地址不确定。其他的微程序的最后一个微命令的下址字段基本都为0。

微指令设计原则:

  • 有利于缩短微指令字长度
  • 有利于减少控存容量
  • 有利于提高微程序执行速度
  • 有利于对微程序进行修改
  • 有利于提高微程序设计的灵活性

微指令的直接表示法简单直观,便于输出控制,但微指令长度太长,控存容量大。优化方法:

  • 修改直接表示为编码表示,压缩互斥性的微指令,如4个互斥性的微指令可以不用4个二进制位表示,而是用2个二进制位替换。
  • 去掉下址字段,采用μPC=μPC+1的方式生成微指令地址。
    • 微指令地址的形成方法有两种,一种是通过下址字段,另一种就是计数器法。前者微指令长,但控存容量大,后者微指令短,但需要加法器。
  • 修改水平型微指令为垂直型微指令,牺牲了并行性。
    • 水平型微指令:在一个微指令周期内能够同时给出多个微命令的微指令。并行操作能力强,效率高,灵活性强,字较长,微程序短,控存容量大,性能好。
    • 垂直型微指令:采用完全编码方法,将全部微命令编码化。字长短,微程序长,控存容量小,性能差,与指令相似,易于掌握,已经基本被淘汰。