计算机组成原路-中央处理器 2021/8/18 23:00
CPU的功能和基本结构
CPU的功能
CPU的总体功能为:
- 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。(微指令)
- 时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工。对数据进行算术和逻辑运算。
- 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
运算器和控制器功能:
CPU的基本结构
运算器的基本结构
- 算术逻辑单元:主要功能是进行算术/逻辑运算。
- 通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
寄存器和ALU的连接方式有专用数据通路方式和CPU内部单总线方式。
专用数据通路方式:性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
CPU内部单总线方式:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。
1)专用数据通路
专用数据通路不是直接用导线相连,直接用导线相连相当于多个寄存器同时并且一直向ALU传输数据。
a. 使用多路选择器MUX根据控制信号选择一路输出
b. 使用三态门可以控制每一路是否输出
2)CPU内部单总线
- 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容。
由于内部总线一次只能传输一组数据,不能多个寄存器同时输送数据,
因此在ALU和寄存器之间需要有“暂存寄存器”保存一次传输的数据。
同时,来自不同寄存器的输入信号不稳定时ALU也会输出结果,此时写入的是错误的,
因此需要在ALU输出位置增加暂存寄存器,等待输出稳定后在写入。
(两个操作数分别来自主存和R0,最后结果存回R0, 那么从主存中取来的操作数直接放入暂存器,就不会破坏运算前R0的内容。)
- 累加寄存器:它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。
- 程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
- 移位器:对运算结果进行移位运算。
- 计数器:控制乘除运算的操作步数。
控制器的基本结构
- 程序计数器:用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
- 指令寄存器:用于保存当前正在执行的那条指令。
- 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。
- 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
- 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
- 存储器地址寄存器:用于存放所要访问的主存单元的地址。
- 存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息。(MDR的输入输出控制分为MDRinE、MDRin、MDRoutE、MDRout,带E是指MDR和数据总线的数据传输控制,不带E是指MDR和CPU内部总线的数据传输控制)
CPU的总体基本结构
左边为运算器,右边为控制器
其中寄存器分为用户可见(可编程)的寄存器和用户不可见的寄存器。
用户可见的寄存器:通用寄存器组、程序状态寄存器PSW、程序计数器PC
用户不可见的寄存器:MAR、MDR、IR、暂存寄存器
我们可以把CPU分为ALU、寄存器、CU、中断系统四部分。
指令执行过程
指令周期
一个指令周期若干个机器周期,一个机器周期又包含若干个时钟周期。
不同指令的指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。
CPU通过不同触发器的值来确定当前是哪个阶段
这四个工作周期都有访存但目的不同
指令周期数据流
指令周期数据流-取值周期
指令周期数据流-间址周期
指令周期数据流-执行周期
指令周期数据流-中断周期
指令执行方案
单指令周期和多指令周期方案的指令都是串行执行;流水线方案的指令是并行执行。
数据通路
CPU内部单总线方式
执行算术或逻辑运算的时候,Y和ALU之间是专用数据通路,若采用多总线设计则可以不设暂存寄存器Y
注意区分内部总线和系统总线,需要访存的话通过系统总线,访存相关的控制信号也通过系统总线发出
CPU内部多总线方式
采用多总线设计则可以不设暂存寄存器Y(即ALU不需要配合暂存器使用)
专用数据通路
数据通路和CPU内部单总线方式类似,每条指令对应的控制开关由题中的C1、C2……代替即可
数据通路的题在实际做的过程当中可能和课本上的有小的出入(比如某两个寄存器之间没有直接通路需要绕路),随机应变即可
硬布线控制器
计算机执行指令实质上是由不同的微操作(如:(PC)->MAR)组成,而不同的微操作对应着不同的微命令(如上面的微操作对应着得 微命令1:PCout、MARin 有效)。
因此执行指令的关键是按照时序发出微命令。实际上根据 指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些“微命令”。这个过程对应着微操作命令的逻辑表达式。
根据这些逻辑表达式我们就可以完成电路的设计
因此进行硬布线控制器设计的关键在于确定这些逻辑表达式。
具体设计流程如下:
1.分析每个阶段的微操作序列
2.选择CPU的控制方式
3.安排微操作时序
4.电路设计
硬布线控制器的特点:指令越多,设计和实现就越复杂,因此一般用于 RISC(精简指令集系统) 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。 由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。
微程序控制器
我们将计算机中储存的程序转化汇编代码指令,一步一步执行这些指令就能完成程序的功能。那么同样,由于指令的执行也是按照一个一个微命令(微操作)组成的,我们可以把每一步的多个微操作组合成一个微指令,一步一步执行这些微指令就能完成指令的功能。而微程序就代表了这些微指令的执行顺序。
因此,采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”CM中。然而,由因为不同指令的取指、间址、中断的微程序是相同的,因此“控制器存储器”CM中的
内容大致如下:
具体指令功能执行流程如下:
在执行过程中和过程后中会有是否跳过间址周期、是否进入中断周期的问题,这些都可以由顺序逻辑通过标志位控制
另外,通常取指周期的微指令序列固定从#0开始存放,执行周期的微指令序列的存放根据指令操作码确定。
微指令的设计
在微程序控制器中,我们确定了指令的执行过程(分解成不同的微指令),那么这些微指令如何发出对应的微命令呢(如PCout)?答案是微命令与微操作一一对应,一个微命令对应一根输出线。有的微命令可以并行执行,因此一条微指令可以包含多个微命令。
那么如何设计这些微指令?如何确定这些微指令和微命令的对应呢?答案如下。
微指令的格式
水平型微指令中一条微指令能定义多个可并行的微命令;垂直型微指令中一条微指令只能定义一个微命令
微指令的编码方式
只介绍水平型微指令的编码方式
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
(1)直接编码(直接控制)方式
(2)字段直接编码方式
可以缩短微指令字长
(3)字段间接编码方式
微指令地址的形成方式
下地址法(断定方式)和增量计数器法是常考点。
微程序控制单元的设计
和硬布线的设计类似,注意补充微程序控制特有的微操作:利用下地址转移到下一条指令,取指完毕后一般题目为了简化会直接进入执行周期,此时要根据指令操作码确定跳转到当前指令执行周期的地址码
指令流水线
指令的流水式执行能显著提高指令的执行效率
流水线性能指标
指令流水线影响因素分类
流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器, 其作用是保存本流水段的执行结果,提供给下一流水段使用。
各个阶段的耗时不同,为了方便流水线设计,一般以最长耗时为准将每个阶段的耗时取成一样。
1.结构相关(资源冲突)
解决办法:
a.后一相关指令暂停一周期
b.资源重复配置:数据存储器+指令存储器
2.数据相关(数据冲突)
解决办法:
a.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插 入“NOP”两种方法。
b.数据旁路技术。
c.编译优化:通过编译器调 整指令顺序来解决数据相关。
3.控制相关(控制冲突)
解决办法:
a.转移指令分支预测。简单预测(永远猜true或false)、动态预测(根据历史清空动态调整)
b.预取转移成功和不成功两个控制流方向上的目标指令
c.加快和提前形成条件码
d.提高转移方向的猜准率
流水线分类
流水线的多发技术
五段式指令流水线
1.运算类指令
2.LOAD指令
3.STORE指令
4.条件转移指令
5.无条件转移指令
另:只有上一条指令进入ID段后,下一条指令才能开始IF段,否则会覆盖IF段锁存器的内容