文章目录
回忆过去
现代计算机的结构
运算器的基本组成
控制器的基本组成
计算机的工作过程
CPU的功能和基本结构
CPU的功能
运算器和控制器的功能
运算器的基本结构
控制器的基本结构
CPU的基本结构
- 对用户可见的寄存器:PC、PSW、ACC、R0、R1、R2、R3
指令周期的数据流
指令周期
指令周期流程
指令周期的数据流——取指周期
指令周期的数据流——间址周期
指令周期的数据流——执行周期
指令周期的数据流——中断周期
指令执行方案
数据通路
- 数据通路:数据在功能部件之间传送的路径
CPU内部单总线方式
专用通路结构
- 这就是专用数据通路结构在取指周期所要做的一系列动作
硬布线控制器的设计
- 纯硬件实现控制器功能
回忆过去
- 间址周期中会把指令中的形式地址转换为有效地址,有的指令它的间接寻址可能会涉及到多级的间接寻址,比如需要二级间接寻址的指令就需要两次间址周期
- 微操作更多的是在描述我们要做的一个细分的工作,这个工作要完成一个什么样的功能;而微命令指的是要完成这个细分的工作所需要发出的一些有效的控制信号,所以每发出一条微命令就会完成一个与之对应的微操作
- 在专用数据通路中,我们完全可以让多个寄存器之间的数据并行流动,因此在一个机器周期的若干个节拍内我们其实可以完成某一些互不冲突的微操作,只要让CU同时发出若干个微命令即可
硬布线控制器
- 操作码译码器会根据指令寄存器的n位操作码,经过译码转化为某一条选通线的选通信号,控制单元CU根据具体的哪一个输入信号有效来判断当前执行的指令是哪一条指令
- 节拍信号是一个所谓的节拍发生器来给出的,节拍发生器接收到时钟部件发来的脉冲信号之后,它会选择其中的某一根输出线让其导通,根据不同的导通线CU就可以知道现在是处于第几个节拍
硬布线控制器的设计
分析每个阶段的微操作序列
- 中断周期内的微操作序列就不分析了,原理类似
- 总之本质的目的就是想要找到某一个特定的微操作在哪些时候会被使用到
安排微操作时序的原则
安排微操作时序——取指周期
安排微操作时序——间址周期
安排微操作时序——执行周期
安排微操作时序——中断周期
组合逻辑设计
列出操作时间表
写出微操作命令的最简表达式
画出逻辑图
微程序控制器的基本原理
- 引入软件的思想
回忆硬布线控制器
微程序控制器的设计思路
- 我们用微操作序列来实现指令的具体功能是不是有点类似于我们用一个指令序列来实现某一个程序的功能
- 微操作序列之于指令类似于指令序列相当于程序
- 我们可以把一个时序内可以同时进行的微操作用一个微指令来指明
- 程序是由指令序列组成,微程序由微指令序列组成,每一种指令对应一个微程序
- 指令是对程序执行步骤的描述,微指令是对指令执行步骤的描述
- 指令是对微指令功能的“封装”
- 微命令和微操作是一一对应的,微指令中可能包含多个微命令
- 有可能出现多种微指令,每一种微指令有可能对应一系列相应的微操作,因此每一条微指令需要有一个操作控制的字段,也就是若干个bit,用若干个bit来表示当前这条微指令所对应的微操作是哪几个,另外一条微指令还需要有个顺序控制的字段,用m个bit来指明下一条微指令的地址
微程序控制器的基本结构
- 微地址形成部件用于产生初始的微程序起始地址,机器指令存放在IR当中,不同的机器指令所对应的微程序是不一样的,因此我们需要根据这条机器指令的操作码来确定其所对应的微程序的起始地址到底是多少
- 顺序逻辑是用来控制微指令的执行顺序的,我们的微指令序列不一定是顺序执行的,当有中断发生或者没有中断发生的时候这个微指令序列的执行顺序肯定是需要进行一些调整的
微程序控制器的工作原理
- 有的指令不一定有间址周期,那么这里把取指周期微程序的最后一条微指令的下地址设置为3,也就是间址周期应该怎么处理呢?
- 指令的地址码部分中会有一个标志位用来指明这个地址码是采用直接寻址还是间接寻址,那么这个寻址特征位可以送给顺序逻辑,如果顺序逻辑发现这条指令的地址码并不需要间接寻址,那么虽然刚才这条微指令送过来的下地址信息是3,但是经过顺序逻辑的处理它就可以知道接下来要执行的不是间址周期的这些指令,而应该直接跳到这条指令所对应的执行周期的那些微指令序列
- 所以根据这条指令的操作码,然后再通过微地址形成部件的处理之后,微地址形成部件会告诉顺序逻辑现在执行的这条指令其执行周期所对应的微指令序列的首地址应该是多少,把对应的微指令序列的首地址放到CMAR当中
- 微程序段:n+1个,n个执行周期和1个取址周期
- 微程序:n个,一条指令对应一个微程序
微指令的设计
微指令的格式
微指令的编码方式
- 又称为微指令的控制方式
直接编码(直接控制)方式
字段直接编码方式
- 有的微操作是可以并行地执行的,但也有的微操作之间是互斥的,不可以并行地执行,因此我们把所有有可能出现的微操作进行分类,从属于同一个分类的微操作都是互斥的,相容的微操作放到不同的段里边,这就是分“段”操作
- 一般每个小段还要留出一个状态表示本字段不发出任何微命令
字段间间接编码方式
- 一个字段的微命令需要用另一个字段的微命令解释
- 每一个字段所对应的微命令需要经过多级间接的译码才可以得到最终所对应的控制信号,执行速度慢
微指令的地址形成方式
微程序控制单元的设计
分析每个阶段的微操作序列
写出对应机器指令的微操作命令即节拍安排
确定微指令格式
编写设计微指令码点
- 编写码点:确定每一条微指令的控制码部分哪个地方需要为1,哪个地方需要为0
微程序设计分类
硬布线与微程序的比较
指令流水线的基本概念
指令流水线的定义
- 前边3个t的时间,第一条指令执行结束,从3t这个时刻开始往后的这些时间平均每一个t的时间就会执行完一条指令,所以还剩n-1条指令,就需要(n-1)×t的时间,总共就是(n-1)×t+3t=(n+2)×t的总耗时
流水线的表示方法
指令执行过程图
时空图
流水线的性能指标
吞吐率
加速比
效率
指令流水线的影响因素和分类
机器周期的设置
影响流水线的因素
- EX阶段在我们的设计下最快也只能在第200ns的时候才可以执行,但是我们EX所需要的数据在第180ns的时候就已经准备好了,为了数据在刚好可以在第200ns的时候才送到ALU,我们会设置一些暂存寄存器,把准备好的数据放在暂存寄存器里面,等到EX阶段来临想要数据的时候我们再把数据传送出去
- 锁存器的作用:保存本流水段的执行结果,保证各阶段耗时一致
- Cache分为了指令Cache和数据Cache,便于我们并行操作
- 不同于CISC中操作数会直接来自于主存,RISC中的操作数一定是直接来自于通用寄存器的,不可能直接来自于主存,如果是直接来自于主存的也必须先保存到通用寄存器之后再从中取出数据使用
结构相关(资源冲突)【互斥】
数据相关(数据冲突)【同步】
- 也就是执行下一条指令的时候,如果需要使用到上一条指令中的数据,我们要保证上一条指令中的数据已经执行完并且被写回了才可以给下一条指令使用,不然程序会得到一个错误的结果
- 数据旁路技术又被称为转发机制
- 在上一条指令的操作数的运算结果出来之后我们会特地给其连出一个数据旁路,让这个数据直接送回ALU的其中一个输入端作为下一条指令的一个输入,那这样的话我们就不需要等待上一条指令的写回操作
控制相关(控制冲突)
- 指的是由于转移指令、函数调用、函数返回指令等导致PC的值跳到了另外一条位置,使得中间的某几条指令不需要被执行,造成了程序的断流;除此之外,当发生中断的时候,CPU会转去执行中断处理程序,这种情况下PC的值也会改变
指令流水线的分类
部件功能级、处理机级、处理机间级流水线
- 所有的流水线一个共同的特点是:不同的部件所完成的工作是属于不同阶段的,然后把这些部件完成的工作拼接起来,就可以完成一个完整的工作
- 部件功能级流水线:一个功能部件内部又划分为了多个子功能部件,每一个小的功能部件完成某一个特定的任务
- 处理机级流水线:处理机内部每一个功能部件完成某一个专门的任务
- 处理机间流水线:每一个处理机CPU完成一个专门的任务
单功能流水线和多功能流水线
动态流水线和静态流水线
线性流水线和非线性流水线
流水线的多发技术
超标量技术
超流水技术
超长指令字
五段式指令流水线
五段式指令流水线
运算类指令的执行过程
LOAD指令的执行过程
STORE指令的执行过程
条件转移指令的执行过程
- 经过EX阶段的处理之后我们其实就可以知道条件满不满足,那么接下来我们就可以根据当前条件是否满足来决定要让pc程序计数器的值改变为一个什么样的值
- 所以对于条件转移类的指令来说在访存阶段不会进行访存,而是会修改pc的值,把pc的值修改为我们想要转移到的那个地方
- 也就是说修改pc这个寄存器的值并不是放在写回这个阶段的,因为写回阶段通常修改的都是通用寄存器的值,而pc并不属于通用寄存器,所以对pc这个寄存器的值的修改并不会放到写回阶段,而是会放到访存这个阶段
无条件转移指令的执行过程
- 为什么变长指令码中寄存器寻址比立即数寻址快?
- 如果采用变长指令码格式,由于要表示一定范围的立即数,立即数的指令通常需要较多的二进制位,取指时,可能需要不止一次的读内存来完成取指,因此采用变长指令码格式的时候,寄存器寻址方式的执行速度更快
多处理器系统的基本概念
单指令流单数据流SISD
- 各指令序列只能并发,不能并行
- 单指令流:CPU同一个时间段内只能处理一个指令序列
- 单数据流:每一条指令只能处理1~2个数据
单指令流多数据流SIMD
多指令流单数据流MISD
多指令流多数据流MIMD——共享存储多处理器系统
向量处理器
硬件多线程的基本概念