考纲内容
- CPU的功能和基本结构
- 指令执行过程
- 数据通路的功能和基本结构
- 控制器的功能和工作原理
- 硬布线控制器
- 微程序控制器
- 微程序、微指令和微命令、微指令格式
- 微命令的编码方式
- 微地址的形成方式
- 指令流水线
- 指令流水线的概念
- 指令流水线的基本实现
- 超标量和动态流水线的基本概念
1. CPU的功能和基本结构
1. CPU的功能
- CPU由运算器和控制器组成
- 控制器:负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和执行指令
- 运算器:对数据进行加工
- CPU具体功能
- 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制
- 操作控制:CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作
- 时间控制:为每条指令按时间顺序提供应有的控制信号
- 数据加工:对数据进行算术和逻辑运算
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理
2. CPU的基本结构
1. 运算器
- 任务:接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理
- 组成
- 算术逻辑单元(ALU):进行算术/逻辑运算
- 暂存寄存器:暂存从主存读来的数据(不能放在通用寄存器中,否则会破坏其原有内容),对应用程序员透明
- 累加寄存器(ACC):暂存ALU运算的结果信息,可以作为加法运算的 一个输入端
- 通用寄存器组:存放操作数(源操作数、目的操作数及中间结果)和各种地址信息等。如AX、BX、SP(堆栈指针,指示栈顶的地址)等,其位数等于机器字长
- 程序状态字寄存器(PSW):保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息。如溢出标志(CF)、符号标志(SF)、零标志(ZF)、进位标志(CF)等
- 移位器:对操作数或运算结果进行移位运算
- 计数器:控制乘除运算的操作步数
2. 控制器
- 任务:执行指令,每条指令的执行是由控制器发出的一组微操作实现的
- 组成
- 程序计数器(PC):指出下一条指令在主存中的存放地址,有自增功能,其位数取决于存储器的容量(指令条数)
- 指令寄存器(IR):保存当前正在执行的指令,其位数等于指令字长
- 指令译码器(ID):对操作码字段进行译码,向控制器提供特定的操作信号
- 存储器地址寄存器(MAR):存放要访问的主存单元的地址,其位数取决于存储器容量
- 存储器数据寄存器(MDR):存放向主存写入的信息或从主存读出的信息,其位数等于存储字长
- 时序系统:产生各种时序信号,由统一时钟(CLOCK)分频得到
- 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生当前计算机各部件要用到的控制信号。分为组合逻辑型和存储逻辑型两种
3. 寄存器的透明度
- 用户可见
- 移位器
- 通用寄存器组
- 程序状态字寄存器(PSW)
- 程序计数器(PC)
- 用户不可见
- 存储器地址寄存器(MAR)
- 存储器数据寄存器(MDR)
- 指令寄存器(IR)
- 暂存寄存器
2. 指令执行过程
1. 指令周期
- 定义:CPU从主存中取出并执行一条指令的时间
- 组成
- 取指周期:取指令,一次访存
- 取出的是指令,以此区分指令和数据
- 间址周期:取有效地址,一次访存
- 执行周期:取操作数,一次访存
- 取出的是操作数,以此区分指令和数据
- 中断周期:保存程序断点,一次访存
- 进栈操作是将SP-1(计算机的堆栈中向低地址增加)
- 有中断请求,才会进入中断周期
- 取指周期:取指令,一次访存
- 实现
- 在CPU内设置4个标志触发器,“1”表示有效
- FE——取指周期
- IND——间址周期
- EX——执行周期
- INT——中断周期
- 特点
- 机器周期:完成一个基本操作所需的时间
- 时钟周期(节拍脉冲、T周期):完成一个最基本的动作所需的时间
- 1个指令周期 = n个机器周期,1个机器周期 = n个时钟周期
- 每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等
2. 指令周期的数据流
- 数据流:根据指令要求依次访问的数据序列
1. 取指周期
- 任务:根据PC中的内容从主存中取出指令代码(控制器自动进行)并存放在IR中
- 数据流向
2. 间址周期
- 任务:取操作数有效地址。以一次间址为例,将指令中的地址码送到MAR并送至地址总线,此后CU向存储器发读命令,以获取有效地址并存至MDR
- 数据流向
3. 执行周期
- 任务:根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果
- 数据流向:不同指令的执行周期操作不同,没有统一的数据流向
4. 中断周期
- 任务:处理中断请求
- 数据流向
- 进栈操作:先修改栈顶指针,后存入数据
3. 数据通路的功能和基本结构
1. 数据通路的功能
- 数据通路:数据在功能部件之间传送的路径
- 数据通路部件:路径上的部件
- 功能(执行)部件:数据通路中专门进行数据运算的部件
- 功能:实现CPU内部的运算器与寄存器之间的数据交换
2. 基本结构
1. 三种类型
- CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共通路上
- 特点
- 简单,但存在较多的冲突现象,性能较低(一个时钟周期只能传送一个数据)
- ALU要配合暂存寄存器使用
- 特点
- CPU内部三总线方式:将所有寄存器的输入端都连接到多条公共通路上
- 特点:多个总线上传送不同的数据,提高效率
- 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享总线
- 特点:性能较高,但硬件量大(多路选择与三态门实现)
- 特点:性能较高,但硬件量大(多路选择与三态门实现)
- 注意
- 内部总线:同一部件内的总线
- 系统总线:同一台计算机系统的各部件间的总线
4. 控制器的功能和工作原理
1. 控制器的结构和功能
- 连接关系
- 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据
- 输入设备和输出设备通过接口电路与总线相连接
- 内存储器、输入设备和输出设备从地址总线接收地址信息,从控制总线得到控制信号,通过数据总线与其他部件传送数据
- 控制器部件从数据总线接收指令信息,从运算器部件接收指令转移地址,送出指令地址到地址总线,还要向系统中的部件提供它们运行所需要的控制信号
- 控制器的主要功能
- 从主存中取出一条指令,并指出下一条指令在主存中的位置
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作
- 指挥并控制CPU、主存、输入和输出设备之间的数据流动方向
2. 硬布线控制器
- 基本原理:根据指令的要求、当前的时序及外部和内部的状态,按时间的顺序发送一系列微操作控制信号
- 实现:由复杂的组合逻辑门电路和一些触发器构成
- 特点
- 指令越多,设计和实现就越复杂,一般用于RISC
- 扩充一条新的指令,控制器的设计就要大改,扩充指令困难
- 执行速度很快,微操作信号由组合逻辑电路即时产生
1. 硬布线控制单元图
- 指令的操作码是决定控制单元发出不同操作命令(控制信号)的关键
- CU输入:操作码译码电路ID、节拍发生器、状态标志、系统(控制)总线
- CU输出:CPU内部或外部控制总线
2. 时序系统及微操作
- 取指周期
(PC) → \rightarrow → MAR
1 → \rightarrow →R
M(MAR) → \rightarrow →MDR
MDR → \rightarrow →IR
OP(IR) → \rightarrow →ID
(PC)+1 → \rightarrow →PC - 间址周期
Ad(IR) → \rightarrow →MAR
1 → \rightarrow →R
M(MAR) → \rightarrow →MDR - 执行周期
- CLA——清ACC
0 → \rightarrow →ACC - COM——取反
A C C ‾ → A C C \overline{ACC}\rightarrow ACC ACC→ACC - LDA X——取数指令
Ad(IR) → \rightarrow →MAR
1 → \rightarrow →R
M(MAR) → \rightarrow →MDR
MDR → \rightarrow →ACC - JMP X——无条件转移
Ad(IR) → \rightarrow →PC - BAN X——条件转移,ACC为负时转移
A 0 ⋅ A d ( I R ) + A 0 ‾ ⋅ ( P C ) → P C A_0·Ad(IR)+\overline{A_0}·(PC)\rightarrow PC A0⋅Ad(IR)+A0⋅(PC)→PC
- CLA——清ACC
3. 硬布线控制单元设计步骤
- 设计原则
- 微操作的先后顺序不得随意更改
- 被控对象不同的微操作,尽量安排在一个节拍内完成
- 占用时间较短的微操作,尽量安排在一个节拍内完成,并允许有先后顺序
1. 分析每个阶段的微操作序列(取指、间址、执行、中断四个阶段)
2. 选择CPU的控制方式
- 控制单元控制一条指令执行的过程,实质上是依次执行一个确定的微操作序列的过程
- 每条指令和每个微操作所需的执行时间不同
- 分类
- 同步控制方式:采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令
- 异步控制方式:各部件按自身固有的速度工作,通过应答方式进行联络
- 联合控制方式:大部分采用同步控制,小部分采用异步控制
3. 安排微操作时序
- 取指周期
- 间址周期
- 执行周期
- 中断周期
4. 电路设计
- 列出操作时间表
- 写出微操作命令的最简表达式
- 画出逻辑图
3. 微程序控制器
- 实现:采用存储逻辑实现,把微操作信号代码化,使每条机器指令转化为一段微程序并存入一个专门的存储器(控制存储器)中,微操作控制信号由微指令产生
1. 微程序控制的基本概念
- 设计思想:将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令
- 微操作:计算机中最基本的、不可再分解的操作
- 微命令:微程序控制的计算机中,控制部件向执行部件发出的各种控制命令(构成控制序列的最小单位)
- 相容性微命令:可以同时产生、共同完成某一些微操作的微命令
- 互斥性微命令:在机器中不允许同时出现的微命令
- 微指令:若干微命令的集合
- 操作控制字段(微操作码字段):产生某一步操作所需的各种操作控制信号
- 顺序控制字段(微地址码字段):控制产生下一条要执行的微指令地址
- 微周期:从控制存储器中读取一条微指令并执行相应的微操作所需的时间
- 控制存储器(CM):用于存放微程序,在CPU内部,用ROM实现
- 主存储器:存放程序和数据,在CPU外部,用RAM实现
- 微程序:微指令的有序集合,一条指令的功能由一段微程序实现(1条指令 = 多个微程序)
- 程序:指令的有序集合,用于完成特定的功能
- 特点
- 微命令和微操作一一对应
- 微命令是微操作的控制信号,微操作是微命令的执行过程
- 注意
- 地址寄存器(MAR):存放主存的读/写地址
- 微地址寄存器(CMAR或 μ \mu μPC):存放控制存储器的读/写微指令的地址
- 指令寄存器(IR):存放从主存中读出的指令
- 微指令寄存器(CMDR或 μ \mu μIR):存放从控制存储器中读出的微指令
2. 微程序控制器的组成和工作过程
1. 基本组成
- 控制存储器(CM):核心部件,存放各指令对应的微程序
- 微指令寄存器(CMDR):存放从CM中取出的微指令,位数 = 微指令字长
- 微地址形成部件:产生初始微地址和后继微地址,保证微指令的连续执行
- 微地址寄存器(CMAR):接收微地址形成部件送来的微地址
2. 工作过程
- 执行取微指令公共操作
- 机器开始运行时,自动将取指微程序的入口地址送入CMAR,并从CM中读出相应的微指令送入CMDR
- 取指微程序的入口地址一般为CM的0号单元,当取指微程序执行完后,从主存中取出的机器指令就已存入指令寄存器中
- 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入CMAR
- 从CM中逐条取出对应的微指令并执行
- 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,再完成取下一条机器指令的公共操作
3. 微程序和机器指令
- 一条机器指令对应一个微程序
- 任何一条机器指令的取指令操作都是相同的
- 控制存储器中的微程序个数应为机器指令数再加上对应取指、间址和中断周期等公用的微程序数
- 若指令系统中具有n种机器指令,则控制存储器中的微程序数至少是n+1(1为公共的取指微程序)
- 可以不提供间址周期和中断周期
3. 微指令的编码方式
- 编码目标:保证速度的情况下,尽量缩短微指令字长
- 直接编码(直接控制)方式
- 定义:操作控制字段中,每一位代表一个微操作命令(“1”表示控制信号有效)
- 优点:简单、直观,执行速度快,操作并行性好
- 缺点:微指令字长过长,n个微命令要求微指令的操作字段有n位,造成空存容量极大
- 定义:操作控制字段中,每一位代表一个微操作命令(“1”表示控制信号有效)
- 字段直接编码方式
- 定义:将微指令的控制字段分为若干段,每段经译码后发出控制信号
- 优点:可以缩短微指令字长
- 缺点:要通过译码电路后再发出微命令,速度较慢
- 微命令字段分段原则
- 互斥性微命令分在同一段内,相容性微命令分在不同段内
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令,通常全0表示不操作
- 定义:将微指令的控制字段分为若干段,每段经译码后发出控制信号
- 字段间接编码方式
- 定义:一个字段的某些微命令需由另一个字段中的某些微命令来解释
- 优点:可进一步缩短微指令字长
- 缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段
- 定义:一个字段的某些微命令需由另一个字段中的某些微命令来解释
4. 微指令的地址形成方式
- 直接由微指令的下地址字段指出(断定方式):设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址
- 根据机器指令的操作码形成:微指令的地址由操作码经微地址形成部件形成
- 增量计数法:(CMAR) + 1 → \rightarrow → CMAR(适用于后继微指令地址连续的情况)
- 通过测试网络形成
- 分支转移
- 转移方式:指明判别条件
- 转移地址:指明转移成功后的去向
- 由硬件直接产生微程序入口地址:第一条微指令地址由专门硬件产生(由专门的硬件记录取指周期微程序的首地址);中断周期由硬件产生中断周期微程序首地址(用专门的硬件记录)
5. 微指令的格式
1. 水平型微指令(短、肥)
- 定义:指令字中的一位对应一个控制信号,有输出时为1,否则为0(一条指令定义并执行几种并行的基本操作)
- 优点:微程序短,执行速度快
- 缺点:微指令长,编写微程序较麻烦
2. 垂直型微指令(长、瘦)
- 定义:在微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能(一条指令只能定义并执行一种基本操作)
- 优点:微指令短,简单,规整,便于编写微程序
- 缺点:微程序长,执行速度慢,工作效率低
3. 混合型微指令
- 定义:在垂直型的基础上增加一些不太复杂的并行操作
- 优点:微指令较短,便于编写;微程序不长,执行速度加快
6. 微程序控制单元的设计步骤
- 写出对应机器指令的微操作命令及节拍安排
- 确定微指令格式
- 根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数
- 根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数
- 最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长
- 编写微指令码点
- 根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点
7. 动态微程序设计和毫微程序设计
- 动态微程序设计:能根据用户的要求改变微程序,采用可擦除可编程只读存储器(EPROM)实现
- 毫微程序设计:硬件不由微程序直接控制,而是通过存放在第二级控制存储器(毫微存储器)中的毫微程序来解释的
5. 指令流水线
1. 指令流水线的基本概念
1. 定义
- 一条指令的执行过程可以分为多个阶段(不同阶段用到的硬件不同)
- 取指:根据PC内容访问主存储器,取出一条指令送到IR中
- 分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从EA中取出操作数
- 执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中
- 三种执行方式
- 顺序执行方式:指令按顺序执行,前一条指令执行完后,才启动下一条指令(传统冯·诺依曼采用此方式)
- 执行n条指令所用时间:T = 3nt(取指、分析、执行三个阶段的时间都为t)
- 优点:控制简单,硬件代价小
- 缺点:执行指令的速度较慢,各功能部件的利用率很低
- 一次重叠执行方式:同时进行第k条指令的执行阶段和第k+1条指令的取指阶段
- 执行n条指令的时间:T = (1 + 2n)·t
- 优点:程序的执行时间缩短了1/3,功能部件利用率提高
- 缺点:硬件开销较大,控制过程更复杂
- 二次重叠执行方式:同时进行取第k+1条指令和分析第k条指令,同时进行分析第k+1条指令和执行第k条指令
- 执行n条指令的时间:T = (2 + n)·t
- 优点:程序的执行时间缩短了2/3 (正常情况下,处理机同时有3条指令在执行
- 若没条指令需要通过4个或5个执行步骤完成,则可以采取3次或4次重叠执行方式
- 顺序执行方式:指令按顺序执行,前一条指令执行完后,才启动下一条指令(传统冯·诺依曼采用此方式)
2. 表示方法——时空图
- 时空图:主要用于分析流水线的性能
- 横坐标:时间(输入流水线中的各个任务在流水线中所经过的时间)
- 纵坐标:空间(流水线的每个流水段(对应各个执行部件))
3. 特点
- 把一个任务分解为几个有联系的子任务,每个子任务由一个专门的功能部件来执行
- 每个功能段后都要有一个缓冲寄存器(保存本流水段的执行结果,供给下一流水段使用)
- 各功能段的时间应尽量相等
- 只有连续不断地提供同一种任务时才能发挥流水线的效率
- 流水线需要装入时间和排空时间
- 装入时间:第一个任务进入流水线到输出流水线的时间
- 排空时间:最后一个任务进入流水线到输出流水线的时间
- 并不是流水段越多,指令执行越快
- 流水段缓冲之间的额外开销增大:每个流水段有一些额外开销用于缓冲间传送数据、进行各种准备和发送等功能
- 流水线间控制逻辑变多、变复杂:用于流水线优化和存储器(或寄存器)冲突处理的控制逻辑将随流水段的增加而大增
2. 流水线的分类
1. 部件功能级、处理机级和处理机间级流水线
- 部件功能级流水:将复杂的算术逻辑运算组成流水线工作方式。如:可将浮点加法操作分成求阶差、对阶、尾数相加及结果规格化等4个子过程
- 处理机级流水:把一条指令解释过程分成多个子过程。如:取指、译码、执行、访存和写回5个字过程
- 处理机间流水:一种宏流水,其中每个处理机完成某一专门任务,各个处理机得到的结果需存放在与下一个处理机共享的存储器中
2. 单功能流水线和多功能流水线
- 单功能流水:只能实现一种固定的专门功能的流水线
- 多功能流水:通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
3. 动态流水线和静态流水线
- 静态流水线:在同一时间内,流水线的各段只能按同一种功能的连接方式工作
- 动态流水线:在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算
4. 线性流水线和非线性流水线
- 线性流水线:从输入到输出,每个功能段只允许经过一次,不存在反馈回路
- 非线性流水线:存在反馈回路,从输入到输出,某些功能段将数次通过流水线(适合进行线性递归的运算)
3. 影响流水线的因素
- 机器周期的设置
1. 数据冲突(数据冒险)——同步
-
定义:在一个程序中,下一条指令会用到这一条指令计算出的结果
-
解决办法
-
把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行
-
硬件阻塞(stall)
-
软件插入“NOP”(空操作)
-
-
设置相关专用通路(数据旁路技术),即直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程
-
通过编译器对数据相关的指令编译优化,调整指令顺序来解决数据相关
-
-
相关概念——读写顺序颠倒
- 读后读(RAR)相关:两条连续的指令读取相同的寄存器时会产生RAR相关,不会影响流水线
- 写后读(RAW)相关:某条指令要读取上一条指令所写入的寄存器时,会产生RAW相关,称为数据相关或真相关,影响流水线
- 读后写(WAR)相关和写后写(WAW)相关:某条指令的上条指令要读/写该指令的输出寄存器时,会产生WAR相关和WAW相关
- 按序流动的流水线只可能出现RAW相关;非按序流动的流水线中,可能发生RAW、WAR和WAW相关
2. 控制冲突(控制冒险)
-
定义:一条指令要确定下一条指令的位置,例如在执行转移、调用或返回等指令时会改变PC值,而造成断流
-
解决办法
- 对转移指令进行分支预测,尽早生成转移目标地址
- 静态预测:预测条件不满足,即继续执行分支指令的后续指令
- 动态预测:根据程序执行的历史情况,进行动态预测调整,有较高的预测准确率
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
- 对转移指令进行分支预测,尽早生成转移目标地址
Cache缺失的处理过程也会引起流水线阻塞
3. 结构相关(资源冲突)——互斥
- 定义:多条指令在同一时刻争用同一资源而形成的冲突
- 解决办法
- 前一指令访存时,使后一条相关指令(以及其后续指令)暂停一个时钟周期
- 单独设置数据存储器和指令存储器。使两项操作各自在不同的存储器中进行
- 前一指令访存时,使后一条相关指令(以及其后续指令)暂停一个时钟周期
4. 流水线的性能指标
1. 吞吐率
- 定义:单位时间内流水线所完成的任务数量,或输出结果的数量
- 公式:n为任务数,
T
k
T_k
Tk是处理完n个任务所用时间
T
P
=
n
T
k
TP=\frac{n}{T_k}
TP=Tkn
2. 加速比
- 定义:完成同样一批任务,不使用流水线所用的时间和使用流水线所用的时间之比
- 公式:
T
0
T_0
T0表示不使用流水线时的执行时间,
T
k
T_k
Tk表示使用流水线时的执行时间
S
=
T
0
T
k
S=\frac{T_0}{T_k}
S=TkT0
3. 效率
- 定义:流水线的设备利用率。时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积,与n个任务所用的时间及k个流水段所围成的时空区总面积之比。流水线的效率包含了时间和空间两个因素
5. 超标量流水线的基本概念
1. 超标量流水线技术——空分复用
- 定义:每个时钟周期可并发多条独立指令(以并行操作方式将两条或多条指令编译并执行),需配置多个功能部件
- 特点:不能调整指令的执行顺序,只能通过编译优化技术
2. 超流水线技术——时分复用
- 定义:在一个时钟周期内再分段,在一个时钟周期内一个功能部件使用多次
- 特点:不能调整指令的执行顺序,靠编译程序解决优化问题
3. 超长指令字
- 定义:由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字
6. 五段式指令流水线
1. 运算类指令
2. LOAD指令
3. STORE指令
4. 条件转移指令
5. 无条件转移指令