CPU的基本功能和组成
CPU功能
- 指令控制:取指、分析指令、执行指令。
- 操作控制:把每条指令的操作信号送入相应的部件。控制相应的部件按指令要求进行动作
- 时间控制:对各种操作加以时间上的控制。按时间顺序为每条指令提供控制信号
- 数据加工:算数逻辑运算
- 中断处理:对运行过程中出现的异常情况和特殊请求进行处理
CPU组成
运算器
- 算术逻辑单元:算数逻辑运算
- 通用寄存器组:用于存放操作数(源操作数、目的操作数、中间结果)和各种地址信息。
算数逻辑单元与通用寄存器组的链接方式:
-
专用数据通路:根据指令执行过程中的数据和地址的流动方向安排链接线路。
- 为了防止多个寄存器同时且一直向ALU传输数据,可以采用多路选择器或三态门控制线路输出。
- 性能高,结构复杂,硬件量大,成本高
-
CPU内部单总线方式:将所有寄存器的输入端和输出端连接到一条公共的通路上。
-
结构简单,容易实现,存在较多数据冲突现象,性能较低
-
暂存寄存器可以缓解冲突现象,暂存从主存读来的数据,且该数据不能放在通用寄存器,否则会破坏原有内容。
-
累加寄存器:一种通用寄存器,暂时存放ALU运算结果
-
程序状态字寄存器(PSW):保留算数逻辑运算指令或测试指令的结果建立的各种状态信息:溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的位,参与并决定微操作的形成
-

控制器
- 程序计数器PC:指明下一条指令在主存中的地址
- 指令寄存器IR:用于保存当前正在执行的那条指令,对用户透明。
- 指令译码器ID:将操作码译码,向控制器提供操作信号
- 微操作信号发生器MSG:根据IR内容(指令)、PSW内容(状态信息)及时序信号,产生并控制各种控制信号,分为组合逻辑型和存储逻辑型
- 时序系统:用于产生各种时序信号,由统一时钟(CLOCK)分频得到

- 控制器可以自动完成取指操作!
- 控制器可以分辨取到的是指令还是数据:指令地址来源于PC,数据地址来源于地址形成部件
指令周期的数据流
- 指令周期由若干机器周期表示,机器周期又叫CPU周期
- 一个机器周期又包含若干时钟周期(又称节拍、T周期、CPU时钟周期),它是CPU操作的最基本单位
取指周期
-
(PC)→MAR,将当前指令地址送至存储地址寄存器
-
CU发出控制信号,经控制总线传到主存,这里是读信号,记为1→R
-
将MAR所指主存中的内容经数据总线送入MDR,记作M(MAR)→MDR
-
将MDR中的内容(此时是指令)复制送入IR,记作(MAR)→IR
-
CU发出控制信号,形成下一条指令地址,记作(PC)+“1”→PC

取指中的“指”指的是指令字!指令字由操作码和操作数组成!
间址周期
- 将指令的地址码送入MAR,记作:Ad(IR)→MAR,或Ad(MDR)→MAR
- 进行间址周期前已完成了取址周期,故MDR中的内容与IR中的内容一致(IR中的内容由MDR复制送入得到)
- CU发出控制信号,启动主存进行读操作,记为1→R
- 将MAR所指主存中的内容经数据总线送入MDR,记为M(MAR)→MDR
- 将有效地址EA送至指令的地址码字段(当作指令的直接地址),记作(MDR)→Ad(IR)
执行周期
中断周期
中断:暂停当前任务执行其他任务,为了恢复当前任务,需要保存断点
- 一般使用堆栈保存断点,SP表示栈顶地址,假设SP指向栈顶,进栈操作时先修改地址,后存入数据
- CU将SP-1(堆栈是以高地址向低地址增长的),修改后的地址送入MAR,记为(SP)-1→SP,(SP)→MAR。
- 本质上是将断点存入某个存储单元,假设其地址为a,也可记为:a→MAR
- CU发出控制信号,启动主存做写操作,记作:1→W
- 别忘了我们正在向主存保存我们的断点!
- 将断点(PC内容)送入MDR,记作(PC)→MDR
- CU控制将中断服务程序的入口地址送入PC,记作向量地址→PC
- 入口地址由向量地址形成部件产生
指令执行方案
- 单指令周期
- 对所有指令都选用相同的执行时间来完成
- 指令之间串行执行;指令周期取决于执行时间最长的指令执行时间
- 电路设计简单,会降低系统的运行速度
- 多指令周期
- 对不同类型的指令选用不同的执行步骤完成
- 指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程
- 流水线方案
- 在每一个时钟周期启动一条指令,尽量让多条指令同时运行,单各自处在不同的执行步骤中
- 指令之间并行执行
数据通路的基本结构
- 内部总线:CPU内部链接各寄存器与运算部件之间的总线
- 系统总线:同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线
CPU内部单总线
-
寄存器之间的数据传送
-
例如PC内容送至MAR,其流程为:
-
(PC)→Bus(总线), PCout有效,PC内容送入总线
-
Bus→MAR,MARin有效,总线内容送MAR
-
-
总结一下就是先让送出寄存器out有效,再送入总线;下一步让送入寄存器in有效,总线内容送入寄存器中。
-
-
主存与CPU之间的数据传送
- 例如CPU从主存读取指令,实现传送操作的流程为:
- (PC)→Bus→MAR ,PCout与MARin有效,现行指令地址→MAR
- 1→R ,CU发出读命令(通过控制总线发出)
- MEM(MAR)→MDR MDRin有效
- MDR→Bus→IR MDRout和Rin有效, 现行指令→IR
- 例如CPU从主存读取指令,实现传送操作的流程为:
-
执行算数或逻辑运算
- 比如执行一条加法指令:
- Ad(IR)→Bus→MAR MDRout和MARin有效(读取指令后MDR存放的内容就是该指令的完整信息)
- 1→R CU发出读命令
- MEM(MAR)→数据线→MDR MDRin有效
- MDR→Bus→Y MDRout和Yin有效,操作数→Y(暂存寄存器)
- (ACC)+(Y)→Z ACCout和ALUin有效,CU向ALU发送加命令
- Z→ACC Zout和ACCin有效,结果→ACC
- 所以使用单总线方案执行算数逻辑运算,必须将一个操作数先读到一个暂存寄存器中等待总线变空闲
分析一个指令的指令流程与控制信号首先要按指令周期分类分析
ALU需要配合暂存寄存器使用!
- 比如执行一条加法指令:
专用数据通路
在任何两个需要数据流动的寄存器都建立专用数据通路
所以CPU内部单总线的设计方案,就是在需要数据流动的两个寄存器中间设了一个总线来缓冲!
硬布线控制器
确定一个节拍下应该发出哪些“微命令”需要让控制器得到
指令操作码
、目前的机器周期
、节拍信号
、机器状态条件
四个参数
- 指令操作码通过指令寄存器IR经由操作码译码器译码通过导线送入CU
- 目前的机器周期由4个集成在CU内部的状态触发器得知(FE、IND、EX、INT)
- 节拍信号经由节拍发生器循环发出(每一个时钟周期发出一个节拍信号)
- 机器状态参数(标志)来自于执行单元的反馈信息
- 可能来自运算器的PSW、ACC的符号位;
- 以及I/O设备、主存
设计步骤
- 分析每个阶段的微操作序列(取指、间址、执行、中断)
- 在此环节需要分析每个阶段每条微操作的依赖关系
- 选择CPU的控制方式
- 采用定长机器周期还是不定长机器周期
- 每个机器周期安排的节拍数
- 安排微操作时序
- 微操作的的先后顺序不得随意改变
- 被控对象不同的微操作安排在一个节拍完成
- 占用时间较短的微操作尽量安排在一个节拍完成,并允许有先后顺序
- 访存的微操作占一个节拍,但不耽误安排其他不涉及访存的微操作在这个节拍并行执行
- 电路设计
- 列出操作时间表(4个机器周期内T0、T1、T2节拍内有可能用到的所有微操作)
- 写出微操作命令的最简逻辑表达式
- 画出逻辑图
硬布线控制器的特点:
- 指令越多、设计和实现越复杂,通常用于RISC
- 扩充指令需要重新设计整个控制器、扩充指令困难
- 纯硬件设计实现控制,执行速度很快,微操作控制信号由组合逻辑电路即时产生
微程序控制器
每条指令的执行过程被用一个微程序表示,每个微程序含若干微指令,每个微指令又包含若干微命令
- 微指令是对指令执行步骤的描述,一个微指令有可能包含多个微命令,微命令用于控制信号
采用存储程序的思想,在出厂前将所有指令的“微程序”存入“控制器存储器”中
基本架构
-
控制存储器CM,用于存放各指令对应的微程序,控制存储器可用只读存储器ROM构成
-
微地址寄存器CMAR(或μPC),接受微地址形成部件送来的微地址,为在CM中读取微指令做准备
-
地址译码器,将地址码转化为存储单元控制信号
-
微数据寄存器CMDR(或μIR),用于存放从CM中取出的微指令,其位数应与微指令字长相等
-
微地址形成部件,产生初始微地址和后继微地址,以保证微指令的连续执行
-
顺序逻辑部件,接受两个参数
- 标志参数,根据指令地址码的寻址特征位判断是否要跳过间址周期
- CLK,根据中断信号判断是否进入中断周期
工作原理
在CM中顺序存入取值周期、间址周期、中断周期、执行周期的微程序
按顺序将微指令送入CU执行。
注意:
通常取指周期微程序是公用的,所以如果某指令系统中有n条机器指令,则CM中微程序段的个数至少为n+1
- 公用的一个取指周期微程序段
- 每一条机器指令至少有一个的执行周期微程序段
- 早期CPU以及物联网设备的CPU可以不提供间接寻址和中断功能,如果题干有提及就加上
微指令格式设计
每一个微命令对应一根输出线
- 相容性微命令:允许并行完成的微命令
- 互斥性微命令:不允许并行完成的微命令
- 水平型微指令:一条指令能定义多个可并行的微命令
- 每一条微指令略长,一个微程序含的指令数少(水平发展),执行速度快
- 编写微程序比较麻烦
- 垂直性微指令:一条指令只能定义一个微命令,由微操作码字段规定具体功能
- 每一条微指令略短,一个微程序含的指令数多(垂直发展),执行速度慢
- 便于编写微程序,简单,规整
- 混合型:在垂直型的基础上增加一些不太复杂的并行操作
微指令的编码(控制)方式
- 水平型微指令
直接编码
:在微指令的操作控制字段中,每一位代表一个微操作命令- 某位为“1”代表该控制信号有效
- 执行速度快,操作并行性好
- 微指令字长过长,n个微命令需要n位操作字段,造成控存容量需求极大
字段直接编码
:将微指令的控制字段分成若干“段”,每段经译码后发出控制信号- 分类编段,互斥性微命令在同一段,相容性微命令分在不同段
- 每个小段包含的信息位不能太多,否则将增加译码时间和译码线路的复杂性
- 每个小段还要留出一个状态,表示本字段不发出任何微命令(默认用全0表示)。即n位字段长度只能表示2n-1个互斥型微命令
字段间接编码
:一个字段的某些微命令需由另一个字段中的某些微命令来解释,又称为隐式编码
- 进一步缩短指令字长
- 削弱了并行控制能力,通常作为字段直接编码方式的辅助手段
微指令的地址形成
-
微指令的下地址字段指出:后继微指令的地址,又称为断定方式
-
根据机器指令的操作码形成:当机器指令取至寄存器后,微指令的地址由操作码经微地址形成部件形成
-
增量计数器法: (CMAR)+1→CMAR
-
分支转移:指明判别条件;转移地址来指明转移成功后的去向。
- 通过测试网络:即控制器中负责顺序逻辑的部分
- 由硬件产生微程序入口地址:第一条指令地址与中断周期微程序首地址
微程序控制单元的设计
- 静态微程序设计
- 微程序无需改变,采用ROM
- 动态微程序设计
- 改变微指令和微程序来改变机器指令
- 有利于仿真,采用EPROM
指令流水线
指令流水:一条指令的执行过程可以分成多个阶段(过程)
-
取指:根据PC内容访问主存。取出一条指令送入IR
-
分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数
-
执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。
执行方式
-
顺序执行
- 传统冯诺依曼机采用的方式,又称串行执行方式,
- 设三个阶段耗时相等为t,则总耗时为$3nt$
-
一次重叠方式
- 总耗时为$3t+2t(n-1)=(1+2n)t$
- 执行时间缩短了1/3,各功能部件的利用率明显提高
- 控制过程较为发杂,需要额外硬件开销
- 二次重叠方式
- 总耗时$3t+t(n-1)=(n+2)t$
- 此为理想状态的指令执行方式
- 正常情况处理机中同时有3条指令执行
性能指标
- 吞吐率
- 单位时间内流水线所完成的任务数量
- 设一条指令有k个阶段,每个阶段耗时Δt(一个时钟周期),则吞吐率$T_p=\frac{n}{ (k+n-1)\triangle t}$
- 加速比
- 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
- 效率
- 流水线的设备利用率
- 在时空图上,完成n个任务占用的时空区有效面积,与n个任务所用的时间与k个流水段所围成的时空区总面积之比
- 当连续输的任务n趋近于正无穷时,效率也将趋近于1
五段式流水线
经典的MIPS架构,所有的指令全部都有五个机器周期,规定所有阶段的耗时取统一耗时,以最长耗时为准。
- 在每个功能段部件设置一个缓冲寄存器(锁存器),保存该段流水的执行结果,方便统一所有阶段耗时一致
影响流水线的因素
-
结构相关
- 多条指令在同一时刻征用同一个资源而形成的冲突
- 解决:后一相关指令暂停一周期;资源重复配置:数据存储器+指令存储器
-
数据相关(重点)
存在必须等待前一条指令执行完才能执行后一条指令的情况
解决:
-
遇到数据相关的指令及后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行
-
可以分为硬件阻塞(stall)或软件插入“NOP”(空操作指令)两种方法
-
-
数据旁路技术,直接从硬件层面多牵几条线连到需要数据的部件上
-
编译优化:通过编译器调整指令顺序解决(用别的不相干的指令来替代插入NOP)
-
-
控制相关
流水线遇到转移指令
jump
和其他改变PC值的指令(比如返回指令ret
)而造成断流时引发的冲突解决:
- 转移指令分支预测。分为简单预测(永远猜true或false)、动态预测(根据历史情况动态调整)
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率(简单预测的优化)
流水线分类
-
部件功能级、处理机级、处理机间级流水线
-
部件功能级:复杂的算数逻辑运算组成流水线工作方式
-
例如浮点加法可分成求阶差、对阶、尾数相加、结果规格化四个子过程
-
这四个子过程需要不同的功能部件,所以可以处理成流水线式执行
-
-
处理机级:一条指令解释过程分为多个子过程,如:取指、译码、执行、访存、写回
-
处理机间级:一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器。
-
-
单功能流水线与多功能流水线
- 单功能:只能完成固定的专门功能的流水线
- 多功能:可以同时、不同时完成多种功能的流水线(指令流水线)
-
动态流水线、静态流水线
- 静态流水线:在同一时间内,流水线的各段只能按同一种功能的连接方式工作
- 动态流水线:同一时间内,一些段完成某种运算,另一些则在完成另一种
-
线性流水线、非线性流水线
- 线性:输入输出间不存在反馈回路即每个功能段是单向的
- 非线性:存在反馈回路,某些功能段将数次通过流水线,适合线性递归运算
流水线多发技术
-
超标量技术:每个时钟周期内可并发多条独立指令
-
需配置多个功能部件
-
指令执行顺序不可调整,需要通过编译器优化
-
空间复用
-
-
超流水技术:
-
一个时钟周期内再分段
-
一个时钟周期内一个功能部件使用多次
-
不能调整指令执行顺序,需要通过编译器优化
-
时间复用
-
-
超长指令字
- 由编译程序挖掘出指令间潜在的并行性
- 将多条能并行操作的指令组合成一个
- 具有多个操作码字段的超长指令字
五段式流水线
-
通常RISC处理器只有“
取数LOAD
”和“存数STORE
”指令才能访问主存 -
条件转移指令通常使用相对寻址
- 若(Rs)==(Rt) 则(PC)+指令字长+(偏移量*指令字长)→PC: 否则(PC)+指令字长→PC
- Rs!=Rt时的情况一样
- PC寄存器值的修改(WrPC段)发生在M(访存)阶段,因为PC并非通用寄存器
-
无条件转移指令 其WrPC段发生在EX段,WrPC段越早完成越能避免控制冲突