中央处理器
CPU的结构和功能
CPU由控制器和运算器组成,下面着重介绍控制器
CPU的功能
-
指令控制
完成取指令,分析指令和执行指令的操作
-
操作控制
一条指令往往由多个操作信号组成,CPU管理并产生操作信号,并送入相应的部件
-
时间控制
每一条程序按照时间顺序供应控制信号
-
数据加工
进行算数或者逻辑运算
-
中断处理
对计算机运行中的特殊情况进行处理
CPU的主要技术指标
- 主频:CPU 的时钟频率,即 CPU 进行运算时的工作频率。主频数值越高,CPU 的速度越快
- 外频:即系统总线,CPU 与周边设备传输数据的频率,具体是指 CPU 到芯片组 之间的总线速度
- 倍频:原先并没有倍频概念,CPU 的主频和系统总线的速度是一样的,但 CPU 的速度越来越快,倍频技术也就应运而生。它可使系统总线工作在相对较低 的频率上,而 CPU 速度可以通过倍频来无限提升。CPU 主频的计算方式变为: 主频 = 外频 * 倍频
控制器
控制器的功能
大体地说,控制器的功能为正确地完成每一条指令规定的功能,正确,自动地连续执行指令命令,即向计算机各个部件提供协调运行每一个步骤所需要的指令信号。
- 取指令
- 分析指令
- 执行指令,发出各种操作命令
- 控制程序的输入以及结果的输出
- 总线管理*
- 处理异常情况和特殊请求
- 中断请求
- DMA请求
控制器的组成
控制器大体上被分成两大种类的部件:指令部件,时序部件
指令部件包含:
- PC
- IR
- 指令译码器
时序部件包含:
- 脉冲源
- 启停电路
- 时序控制信号形成部件
主要的寄存器
- DR:临时存放一条指令和一个数据字
- IR:存放当前正在执行的一条指令
- PC:存放下一条要执行的指令地址
- AR:地址寄存器
- AC(GR):当ALU进行运算时,给ALU提供一个工作区
- PSW:保存算数,逻辑指令运行或测试建立的各种条件码的内容。以便CPU能及时了解机器的运行状态和程序运行状态
程序计数器(PC)
用来存放当前执行的指令地址或即将执行的下一条指令的地址
由两种方法来形成指令地址:
- 通过PC+1来形成下一条指令地址
- 如果需要改变程序的执行顺序,例如转移指令,那么会将转移地址送入PC
指令寄存器(IR)
用来存放当前执行的命令,以便在指令执行过程中控制完成一条指令的全部功能
指令译码器
对指令寄存器中的指令进行分析解释,产生相对应的控制信号
脉冲源以及启停电路
脉冲源产生一定频率的脉冲作为时钟脉冲
启停电路负责可靠的送出和封锁完整的时钟脉冲
时序控制信号形成部件
在CLK时钟的作用下,根据当前正在执行的指令的需要,产生相对应的时序控制信号,并根据被控功能部件的反馈信号调整时序控制信号。
这一部分是控制器的核心,具体有两种实现方法:
- 微指令
- 硬布线
在下文都有详细的描述
控制器的组成框图
脉冲源以及启停电路
在本接线图中,脉冲源和启停电路只对PC和时序信号形成部件进行控制,对PC仅为reset信号控制,对于时序信号形成部件则需要输入正确的时钟信号。
时序控制信号形成部件
时序信号形成部件是对时序控制信号的分发,其接收指令译码器的译码结果,向控制总线,运算器发送时钟信号,控制信号,比如说操控运算器进行运算,操纵主存进行数据的读写等
程序计数器PC
程序计数器会把指令的地址发到地址总线上,或者使用不同的寻址方式,经过将经过运算器运算的地址送到地址总线上,进行指令的读取,读取后送入IR中
微程序控制计算机的基本工作原理
在计算机中,一条指令的功能是通过按照一定次序执行一系列的基本操作完成的,这些基本操作成为微操作。
我们将同时发出控制信号所执行的一组微操作称位微指令。
计算机的程序由指令序列构成,而计算机的每一条指令的功能均由微指令序列解释完成,这些微指令序列的集合就叫微程序。
我们采用自顶向下的方法来进行分析,微程序打个比方就是一个命令,比如说加法命令,加法命令在实际实现的时候,会分成几个部分:
- 取指
- 计算地址
- 取数
- 加法运算和回送结果
这每一个部分成为微指令,每一个微指令还可以拆分成一个个信号,成为微操作
指令周期
在了解微程序之前,我们先来看一下指令周期
基本概念
取出并执行一条指令所需的全部时间
包括:
- 取出指令
- 分析指令
- 执行指令
其中,1和2为取址周期,3为执行周期,对于不同的CPU可能不同
在CPU中,每条指令的指令周期不同,例如:加法指令含有取指周期和执行周期,转移指令只包含取指周期
指令周期的基本分类
-
取址周期
根据程序计数器PC的内容从主存中取出指令
-
间址周期
取操作数的有效地址
-
执行周期
使用ALU进行计算
-
中断周期
处理中断请求
微操作和微指令
我们还是拿加法程序举例,对于运算器而言,运算操作需要将数据放进通用寄存器GR内(因为布线原因),所以一个微操作就是根据指令(三地址指令)中的前两个地址,取出对应的数据,因此,我们需要产生几个操作主存的控制信号(假设我们的数据在主存中),在此之前,我们要先将指令取出来,所以将PC
中的地址放入总线上,表示为:PC -> AB
。然后同时,产生读写信号:W/R = 0
。读数据总线上的数据M/IO = 1
。从数据总线上接收数据放到指令寄存器,DB -> IR
。程序计数器加一,PC+1
。
我们整理一下,在取指部分,这操作在同一时间执行:
PC -> AB
W/R = 0
M/IO = 1
DB -> IR
PC = PC+1
那么,到了下一个微操作,算出要取的数的地址(寻址),我们也可以这样分解:
rs1 -> GR # 将rs1部分送入通用寄存器
(rs1) -> ALU # 将通用寄存器的部分送入ALU
disp -> ALU # 将disp的内容送入ALU
"+" # 对运算器发出+指令
ALU -> AR # 将运算结果送入地址寄存器
接下来是取数微操作:
AR -> AB # 将地址寄存器的内容送到地址总线
W/R = 0 # 读信号
M/IO = 1
DB -> DR # 从数据总线中取数据到数据寄存器
最后是运算和回送微操作:
rs -> GR # 数据放入通用寄存器
(rs) -> ALU # 数据放入ALU
DR -> ALU # 刚刚取出的数据从数据寄存器放入ALU
+ # + 信号
rd -> GR
ALU -> rd # 回送结果
状态位输出 #例如N,Z,V,C
微指令的组织形式
微指令最简单的组织形式是将每一个控制信号用一个控制位来表示(这些信号是同时发出的)
微程序控制器
微程序的流程图如下:
微程序控制器的基本工作过程如下:
- 指令到IR中,译码,得到相应指令的第一条微指令的地址
- 由微指令的下址字段指出下一条要执行的微指令地址
微程序控制器简图如下
微程序设计技术
微程序设计时应该注意的三个问题:
- 微指令字长尽可能短
- 微程序长度尽可能短
- 提高微程序的执行速度
微程序的编译法
微指令由两个部分组成:控制字段和下址字段
直接控制法
控制字段的每一位代表一个微命令,用0和1代表是否发出命令。
优点:
- 结构简单
- 并行性强
- 操作速度快
缺点:控制字段长
字段直接编译法
互斥微命令编程一组,降低微指令中的字段长度
优点:微指令的字长最短
缺点:要通过一个微命令译码器译码后才能得到需要的微命令
字段间接编译法
对直接译码的改进,进一步缩短微指令的长度,即一个字段的某些微命令要由另一字段中的某些微命令来解释。
简而言之就是用编码的组合来映射到某些微程序
常数源字段法
微指令中分配几位用于给出特定用途的有关数值。有时又称发射字段。
微程序流的控制
微程序流的控制是指当前微指令执行完毕后,下一条微指令地址的计算(解决下一条微指令是什么的问题)
下面对下文中所用到的名词进行解释:
- 微地址:微指令所在控制存储器单元的地址
- 现行微地址:当前执行微指令所在控制器存储控制单元的地址
- 后继微地址:下一条要执行的微指令的地址
- 微程序计数器:类似于PC的一种东西
增量方法
增量方法分为两种情况:顺序执行微指令,非顺序执行微指令
顺序执行微指令
顺序执行微指令时,后续微地址由现行微地址加上一个增量
下一条地址就是微程序计数器加上增量
非顺序执行微指令
遇到转移类微指令则由微程序计数器和形成转移微地址的逻辑电路组合后合成后继微地址
增量和下址字段结合方式
将微指令的下址字段分成两部分:转移控制字段BCF和转移地址字段BAF
其中BCF控制转移的方式
BAF提供转移的地址
多路转移方式
一条微指令存在多个转移分支的情况
在执行某条微指令时,可能会遇到在若干个微地址中选择一个作为后继微地址的情况。此时我们使用,一种特殊的存储器MAPROM(映像只读存储器),该存储器可以使用指令的操作码作为地址的输入,输出第一条微指令的入口地址。
微中断
微中断的概念和中断的概念类似,都是要暂时停止当前执行的程序,去处理中断,然后在中断处理完再继续执行
微指令格式
水平型微指令
特点:一条微指令中定义并执行多个并行操作的微命令
代表:
- 直接控制法
- 字段编译法
垂直型微指令
这种微指令一条只要求能控制实现一二种操作,使用类似机器指令操作码的方式,由微操作码字段规定微指令的功能
里面有一些具有具体含义的字段
水平微指令和垂直微指令的比较
特点\微指令 | 水平型微指令 | 垂直型微指令 |
---|---|---|
执行效果 | 并行操作能力强,效率高,灵活性强 | 并行能力差,效率低 |
指令执行时间 | 时间短 | 时间长 |
长度 | 指令字长,微程序字短 | 指令字短,微程序长 |
难易程度 | 难以掌握 | 容易掌握 |
微程序设计语言
st=>start: 微程序流程图
op=>operation: 微编程并分配微地址
e=>end: 翻译为只有0和1的微程序并写入PROM
st->op->e
硬布线控制的计算机
时序和节拍
硬布线控制器需要解决的首要问题就是机器周期的问题,如何去划分机器周期,可以考虑使用计数器或者一位寄存器
然而因为每一条指令的功能不同,所需的机器周期数目可能不同,我们可以用逻辑电路来设计和转化这些机器周期,比如A指令需要四个机器周期:00→01→10→11
,指令B需要三个机器周期:00→10→11
,根据真值表
其中cyA
,cyB
表示当前周期的计数器状态,cyA′
, cyB′
表示下一周期计数器状态。
我们可以得出相对应的逻辑图
操作控制信号的产生
操作码的译码器
指令由操作码和地址码部分构成,此部分的功能就是翻译出指令的功能
然后根据译码器的输出和四个状态作为输入,使用逻辑电路即可产生逻辑控制信号
控制信号的产生
控制信号如PC -> AB
的产生在硬布线控制器中靠译码器的输出和状态机的状态作为输入,即可产生控制信号。
例如:
PC -> AB = 加法指令·cy1
以此类推,根据指令的种类和状态就能得出控制信号
硬布线控制器的组成
硬布线控制器主要由五部分组成:
- 程序计数器和中断逻辑
- 指令寄存器
- 译码器
- 节拍发生器
- 组合逻辑电路
硬布线控制器和微程序控制器的比较
硬布线控制器 | 微程序控制器 | |
---|---|---|
实现 | 电路复杂,速度快 | 电路规整,速度慢 |
性能 | 速度快 | 速度慢 |
控制器的控制方式
形成控制不同微操作序列的时序控制信号的方法
常用的三种控制方式为:
-
同步控制方式
各个操作都由统一的时序信号控制
-
异步控制方式
各操作不采用统一的时序信号控制
-
联合控制方式
同步和异步控制方式相结合
流水线
减少CPU的空闲时间,提高工作效率
原理:让指令2在指令1的空闲时间运行
用专业的方法表示就是:
将一条指令的实现过程分成时间上大致相等的几个阶段,然后使几条指令的不同阶段在 时间上重叠起来。
流水线的特点
- 在流水线中处理的必须是连续业务
- 一个过程分解为几个有联系的子过程,每一个子过程由一个专门的功能部件来实现
- 流水线中每一个功能部件的后面都要有一个缓冲寄存器,用于保存本段执行结果
- 流水线中各段的时间尽可能相等
- 流水线需要由装入时间和排空时间
流水线执行时间的计算
如果一个指令分为三个过程
顺序执行
执行n条指令所需要的时间为:
$$
T = 3nt
$$
一次重叠执行方法
$$
T = (1 + 2n)t
$$
对于每条指令(除去第一条指令外)只执行两个指令周期,但是对于第一个要加1
二次重叠执行方法
$$
T=(2+n)t
$$
对于每条指令(除去第一条指令外)只执行一个指令周期,但是对于第一个要加2