CPU功能和基本结构
1、CPU功能
- 组成
- 运算器
- 功能:对数据加工
- 控制器
- 功能:负责控制并协调计算机各部件执行 程序的指令序列
- 运算器
- 功能
- 指令控制
- 操作控制
- 时间控制
- 数据加工
- 中断处理
2、CPU基本结构
- 数据通路的基本结构
- 专用通路
- 硬件:多路选择器和三态门
- 内部总线
- BUS
- 专用通路
- 运算器【蓝色表示用户可见,红色用户不可见】
- 算术逻辑单元【ALU】:逻辑运算
- 暂存寄存器【】:展示存储从主存读出来的数据
- 累加寄存器【ACC】:加法运算
- 通用寄存器【X】:
- 程序状态字寄存器(标志寄存器)【PSW】
- 存溢出,进位等
- 移位器:用于移位运算
- 计数器:用于对乘除操作步数记数
- 控制器【CU】如下图
- 程序计数器【PC】:指出下一条指令存放地址
- 指令寄存器【IR】:保存当前正在执行的指令
- 指令译码器【】:对指令的操作码部分译码,向CU发出特定指令
- 存储器地址寄存器【MAR】
- 存储器数据寄存器【MDR】
- 时序系统:产生各种时序信号
- 微操作信号发生器:根据IR、PSW、时序信号内容,产生整个计算机所需的各种控制信号
指令执行过程
1、指令周期
- 1个指令周期 = n个CPU周期(机器周期)= n个CPU时钟周期(时钟周期,T周期)
- 结构:指令周期 = 取指周期(译码过程较短,包含在取指过程中) + 执行周期
- 不同指令,指令周期不同
- 标志触发器
- FE【取指】,IND【间址】,EX【执行】,INT【中断】、
- 置1表示有效
2、指令周期的数据流
-
- 取指周期
- 描述:PC通过MAR从主存中取出指令,放到IR
- 步骤
- PC->MAR->地址总线(AddrT)->主存
- CU->R->控制总线->主存
- M(MDR)->数据总线->IR
- CU->PC+1:直接发出控制信号(不需要走外部总线,应该是走内部总线)
- 间址周期【间址寻址是发生】
- 描述:MAR根据形势地址A,在主存中找到EA,再找到操作数
- 步骤:
- Ad(IR)->MAR->地址总线->主存:从IR中取出当前指令的地址码部分
- CU->R:CU通过控制总线对主存发出读操作
- M(MDR):主存把数据,通过数据总线发给MDR
- 执行周期
- 描述:例:取操作数,根据IR中操作码的类型,CU控制ALU执行
- 步骤:
- (MDR) -> MAR->主存
- CU->R
- M(MDR)->暂存器
- 操作码(IR)->译码器->CU
- CU->ALU
- 中断周期
- 描述:将当前程序断点存入堆栈【计算机中堆栈的地址是从高到低,所以存数据前,指针 - 1,】中
- 步骤:
- CU->SP = SP-1
- CU->W
- (PC)->MDR->主存->SP
- CU->PC:CU控制PC去执行中断指令【后两句不在中断周期】
- 执行完中断指令,从堆栈取出中断前PC的值,继续执行
- 取指周期
3、指令执行方案
- 单指令周期:串行
- 多指令周期:串行
- 流水线方案:并行
- 根据指令不同周期使用的计算机部件不同,高效的
- 多条指令并行执行,但都处于不同指令周期
数据通路的功能和基本结构
内部总线:CPU内部的总线
系统总线(外部总线):CPU外部的数据总线
各个阶段微操作序列和控制信号
- 数据通路的功能:
- 定义:数据在功能部件之间的流通的路径叫 数据通路
- 功能:负责寄存器与寄存器,寄存器与主存,寄存器与ALU之间的数据交换
- 数据通路基本结构
- CPU内部单总线,如下图
- CPU内部多总线
- 提高效率,但成本高
- 专用数据通路:每个功能部件之间连一条专用线
- 成本更高
- 微操作的类型
- 寄存器与寄存器
- 寄存器与主存
- 寄存器与ALU
- 需要暂存寄存器(下图中的Y,Z)
- 寄存器与寄存器
控制器的功能和工作原理【对指令中操作码部分的处理】
- 控制器:CPU中用来控制、协调计算机各部件执行指令
2、硬布线控制器
- 定义:设计电路布线来控制微命令执行
- 硬布线控制单元外部结构图
- 获取指令操作码,IR里,操作码部分
- 目前的机器周期(CPU周期)
- 固定指令:取指周期、间址、中断。
- 非固定:执行周期
- 节拍信号
- 在硬布线中分为T0,T1,T2
- 机器状态条件
- 例如:需要间址是一个状态码,不需要是另一个
- 硬布线控制单元内部设计
- 分析各阶段的微操作序列
- 取指周期
- PC->MAR
- 1->R:CU->R
- M(MAR)->MDR
- PC = (PC)+1
- 间址周期
- Ad(IR)->MAR
- 1->R
- M(MAR)->MDR->Ad(IR)
- 中断周期
- 执行周期
- 非访存
- CLA,清零
- COM,取反
- SHR,算术右移
- CSL,循环左移
- STP,停机指令
- 访存
- ADD,加法
- STA,存数
- LDA,取数
- 转移
- JMP,无条件转移
- BAN,条件转移
- 非访存
- 取指周期
- 选择CPU控制方式
- 同步
- 异步
- 联合【上面两种结合】
- 安排微操作时序-取指周期
- 如下图
- 【注】:
- 访存指令执行速度比较慢,需要一个周期
- 非访存指令速度快,可以安排一个周期执行,例如T2中两个微操作(微命令)
- 分析各阶段的微操作序列
-
- 电路设计
- 列出操作时间表
- 写出微操作最简逻辑表达式
- 画出电路图
- 电路设计
- 优点:操作快,效率高
- 缺点:逻辑较复杂,扩充指令需要重新设计电路
3、微程序控制器【结构相当于缩小版的 主存+CPU】
- 定义:设计微程序【类似C语言】来控制微命令执行
- 微指令结构:操作指令+下地址【下一个微指令的地址】
- CU内部结构
- 微地址形成部件
- 顺序逻辑
- CMAR
- 地址译码
- CM【控制存储器】
- CMDR:存放微指令
- 工作原理
- 取指、间址、执行、中断。其中间址和中断可有可无
- 处理取指、间址、中断周期的指令序列是固定的,执行周期各不相同
- 程序VS微程序、指令VS微指令、主存储器VS控制存储器
- 工作步骤
- 取出指令的操作码部分,放入微地址形成部件,产生初始微地址和后继微地址
- 经过顺序逻辑【根据指令中寻址特征码,判断是否需要间址操作】,到CMAR,为去CM中读取微指令做准备
- 经过微地址译码,到CM中读取微指令,存放到CMDR
- 微指令中的控制字段去执行微命令,下地址字段继续去顺序逻辑单元循环
- 概念
- 机器指令 = 微程序 = n个微指令
- 微指令 【的控制字段中,每一位就是一个】= n个微命令
- 1个微命令对应1个微操作
- 微指令格式,如下图
-
- 水平型:一个微指令并行执行多个微命令
- 结构:操作控制【微命令字段】 + 顺序控制
- 优点:微程序短,执行速度快
- 缺点:微指令长,编写微程序较麻烦
- 编码方式
- 直接编码:微命令字段,每一位代表一个微命令,选用置1
- 字段直接编码:将微命令字段分为若干个字段,把互斥命令放一个字段,把相容微命令放不同字段
- 结构:操作控制【微命令字段】 + 顺序控制
- 水平型:一个微指令并行执行多个微命令
-
-
-
- 字段间接编码:【相当于间接寻址,需要两层】
-
- 垂直型:一个微指令只能执行一个微命令
- 结构:微操作码 + 目的地址 + 原地址
- 优点:微指令短,编写简单
- 缺点:微程序长,执行复杂
- 结构:微操作码 + 目的地址 + 原地址
- 混合型,上面两种结和
-
- 微指令的地址形成方式
- 断定法:直接由微指令的下地址指出
- 根据指令操作码形成
- 计数器法:(CMAR)+1 -> CMAR
- 根据各种标志位
- 测试网络
- 硬件产生微程序入口地址
4、硬布线和微程序控制器的比较
指令流水线
- 指令流水线概念
- 定义:充分利用计算机硬件部件,根据各个指令周期在不同的部件中,设计指令并行执行,可以通过增加少量硬件,使性能大幅提升
- 指令执行对比
- 顺序执行
- 按顺序,一条一条执行指令,
- 会造成硬件使用不充分,大部分时间处于空闲状态,浪费
- 假设n条指令,一个指令周期包括3个阶段,【这里是理想状态下】一个机器周期对应一个时钟周期Δt,则顺序执行需要时间:3nΔt
- 流水线执行
- 指令并行执行
- 充分利用计算机部件,大大提升效率
- 在上述假设条件下,流水线执行时间为:3Δt +(n-1)Δt = (2+n)Δt
- 顺序执行
- 指令流水线的表示方式
- 如下图
- 指令执行过程图
- 时空图
- 如下图
- 指令流水线的性能指标
- 吞吐率:单位时间内流水线执行的任务数量
- TP = n/T0
- 加速比:顺序执行的时间 / 流水线执行的时间
- S = kn/k+n-1,一个指令周期包括k个阶段,n个指令需要执行
- 效率:硬件设备处于忙碌的时间占总时间的比例
- E = 时空图中,有效时间面积 / 全部面积
- 吞吐率:单位时间内流水线执行的任务数量
- 机器周期设置
- IF取指、ID译码、EX执行、M访存、WB写回
- 需要暂存器,控制机器周期定长
- 影响流水线的因素
- 资源冲突【互斥】
- 定义:多条指令争抢同一硬件资源
- 解决:
- 后一指令暂停一个周期
- 分置资源:例如下图中,通用寄存器使用冲突:第1条指令准备写回数据,第4条准备读出
- 将该部分硬件,一分为二,读寄存器和写寄存器,就能解决冲突
- 资源冲突【互斥】
-
- 数据冲突【同步】
- 定义:两条指令需要的操作数存在前置和后继关系
- 解决:
- 暂停
- 硬件置空
- 软件置空nop
- 数据旁路技术:观察下图中,第2条指令需要通用寄存器中的数据,但其实这个数据在ALU执行结束,就已经准备好了,这里引出一条专用数据通路,作为下一条指令ALU的一个输入,即可满足要求
- 编译优化:前置指令执行时,将后继指令延迟几个周期执行,空余周期用不需要前置数据的指令填充,如下图【编译优化:把后继指令中不需要前置指令的放到前面,充分利用资源】
- 暂停
- 数据冲突【同步】
-
- 控制冲突
- 遇到改变PC值的指令时,容易造成指令周期断流,例如跳转指令JMP指令等
- 解决:
- 转移指令分置预测【算卦】
- 提前预测转移成功与失败后的指令,早做准备
- 加快形成条件码【类似第二章中、并行加法器的实现,组内并行,组间串行】
- 提高算卦成功的准确率
- 控制冲突
- 流水线的分类
- 超标量流水线的基本概念
五段式例题
-
- RISC精简指令,运算类不需要访存,只有load,store(写回)需要访存
- IF、根据PC从【指令cache】中取指到IF段锁存器
- ID、指令译码,并从通用寄存器中取出操作数到ID段锁存器
- EX、运算,将结果存到EX段锁存器
- M,空段
- WB、将EX段锁存器的操作数写回指定通寄存器
- RISC精简指令,运算类不需要访存,只有load,store(写回)需要访存
-
- LOAD,Store需要访存,且使用【基址寻址】
- load
- IF
- ID
- EX、根据偏移量和基地址计算得到有效地址EA
- M、根据有效地址从数据Cache中取操作数到M段锁存器
- WB、将取出的数写回通用寄存器
- load
- LOAD,Store需要访存,且使用【基址寻址】
-
-
- store
- 把RS的值放到【数据cache】中指定的地址
- IF
- ID
- EX,计算要存放到数据cache中哪个地址
- M,将取出的
- WB空段
- 把RS的值放到【数据cache】中指定的地址
- store
-
-
- 条件转移,大多使用【相对寻址】
-
- 无条件转移
- 对PC的下一个位置进行相对偏移
- 无条件转移不需要ALU运算判断,会在指令执行阶段就把PC+“1”+#立即数(偏移量)的值写回通用寄存器
- 无条件转移
-
- 例题
-
- I3的ID为什么等待?
- ID段需要取出前两个指令结束后的操作数,所以等待
- IF为什么等待
- I3中IF段等待,将暂存器占用,I4就无法取指,所以等待
- I3的ID为什么等待?