CPU功能:
- 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制
- 操作控制:管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作
- 时间控制:对各种操作加以时间上的控制,为每条指令按时间顺序提供应有的控制信号
- 数据加工:对数据进行算术和逻辑运算
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理
CPU结构及功能:
指令周期:
指令周期:CPU从主存中每取出并执行一条指令所需的全部时间,常用若干机器周期 (CPU周期)来表示
机器周期:包含若干个时钟周期(也称节拍、T周期或CPU时钟周期,是CPU操作的最基本单位)
指令周期内的机器周期可以不等,每个机器周期内的节拍数也可以不等
指令周期流程:
一个完全的指令周期含有取指周期、间指周期、执行周期、中断周期四个部分,但是并不是每个指令都含有这四个部分,其流程为:
四个工作周期都有CPU访存操作,只是访存的目的不同。取指周期为了取指令,间指周期为了取有效地址,执行周期为了取操作数,中断周期为了保存程序断点。四个工作周期执行与否使用触发器来控制。
各工作周期的数据流:
- 取指周期:
(1)当前指令地址送至存储器地址寄存器, 记做:(PC) → MAR
(2)CU发出控制信号,经控制总线传到主 存,这里是读信号,记做:1 → R
(3)将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR
(4)将MDR中的内容(此时是指令)送入IR,记做:(MDR) → IR
(5)CU发出控制信号,形成下一条指令地址,记做:(PC)+1 → PC - 间指周期:
(1) 将指令的地址码送入MAR,记做:Ad(IR) → MAR或Ad(MDR) → MAR(2)CU发出控制信号,启动主存做读操作,记做:1 → R
(3)将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR
(4)将有效地址送至指令的地址码字段,记做:(MDR)→ Ad(IR) -
执行周期:
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。 -
中断周期:
中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。
(1)CU控制将SP减1,修改后的地址送入MAR记做: (SP)-1 → SP,(SP) → MAR。本质上是将断点存入某个存储单元,假设其地址为a,故可记做:a → MAR
(2)CU发出控制信号,启动主存做写操作,记做:1 → W
(3)将断点(PC内容) 送入MDR,记做:(PC) → MDR
(4)CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址→ PC
指令执行方案:
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
(1)单指令周期:对所有指令都选用相同的执行时间来完成 。指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
(2)多指令周期:对不同类型的指令选用不同的执行步骤来完成 。指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程 。需要更复杂的硬件设计
(3)流水线方案:在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中 。指令之间并行执行。
数据通路:
数据通路:指数据在功能部件之间传送的路径
内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线;
系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线。
单总线结构:
可进行寄存器之间数据传送、主存与CPU之间的数据传送、执行算术或逻辑运算。
例:ADD(R0)R1
取指周期:
时序 | 微操作 | 有效控制信号 |
1 | (PC)→MAR | PCout,MARin |
2 | M(MAR)→MDR | MemR,MARout,MDRinE |
3 | (MDR)→IR | MDRout,IRin |
4 | 指令译码 | - |
5 | (PC)+1→PC | - |
间指周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中。
时序 | 微操作 | 有效控制信号 |
1 | (R0)→MAR | R0out,MARin |
2 | M(MAR)→MDR | MemR,MARout,MDRinE |
3 | (MDR)→Y | MDRout,Yin |
执行周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中。
时序 | 微操作 | 有效控制信号 |
1 | (R1)+(Y)→Z | R1out,ALUin,CU向ALU发ADD控制信号 |
2 | (Z)→MDR | Zout,MDRin |
3 | (MDR)→M(MAR) | MemW,MDRoutE,MARout |
专用数据通路:
重点掌握分析指令的执行过程中的数据流通,专用数据通路速度快但成本高。
控制器设计——硬布线控制器:
设计步骤:
(1)分析每个阶段的微操作序列(取值、间址、执行、中断 四个阶段)。确定哪些指令在什么阶段、在什么条件下会使用到的微操作。
(2)选择CPU的控制方式。采用定长机器周期还是不定长机器周期?每个机器周期安排几个节拍?
(3)安排微操作时序。如何用3个节拍完成整个机器周期内的所有微操作?
(4)电路设计。确定每个微操作命令的逻辑表达式,并用电路实现。
设计原则:
(1)微操作的先后顺序不得随意更改。
(2)被控对象不同的微操作尽量安排在一个节拍内完成。
(3)占用时间较短的微操作尽量安排在一个节拍内完成并允许有先后顺序。
电路设计步骤:
(1)列出操作时间表
(2)写出微操作命令的最简表达式
(3)画出逻辑图
硬布线控制器的特点:
指令越多,设计和实现就越复杂,因此一般用于 RISC(精简指令集系统)。
如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。
由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。
微程序控制器基本原理:
程序:由指令序列组成。
微程序:由微指令序列组成,每一种指令对应一个微程序。
指令是对程序执行步骤的描述微指令是对指令执行步骤的描述,指令是对微指令功能的“封装”。
微命令与微操作一一对应,微指令中可能包含多个微命令
微程序控制器基本结构:
类比于指令的执行过程,其中标志位作用根据指令地址码的寻址特征位判断是否要跳过间址周期,CLK根据中断信号判断是否进入中断周期
指令流水线:
一条指令的执行过程可以分成多个阶段,根据计算机不同,具体分法也不同。指令流水线用来组织多条指令的执行流程,把一个重复的过程分解为若干子过程,每个子过程与其他子过程并行执行。以三段式指令为例,分为取指、分析、执行阶段:
- 顺序执行方式(总耗时:T=n×3t=3nt)
传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低 - 一次重叠执行方式(总耗时:T=3t+(n-1)×2t=(1+2n)t)
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。 - 二次重叠执行方式(总耗时:T=3t+(n-1)×t=(n+2)×t)
优点:程序的执行时间缩短了2/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。
注:可以划分出更多的执行阶段,一般为五个阶段。
流水线表示方法:
- 指令执行过程图
主要用于分析指令执行过程及影响流水线的因素。 - 时空图
主要分析流水线的性能。
性能指标:
(1)吞吐率:吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。
计算公式:
(2)加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
计算公式:
(3)效率:流水线的设备利用率称为流水线的效率。在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。
计算公式:
影响因素:
以MIPS五段流水线为例:
选取最长的的指令执行时间为一个周期,即100ns,为保证时长一致,流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
- 结构相关(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
此时load指令和instr3同事访问Mem和Reg造成资源冲突,解决办法有:
1.后一相关指令暂停一周期。
2.资源重复配置:数据存储器+指令存储器 - 数据相关(数据冲突)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。如此时必须add指令执行完成后sub指令才可以获取操作数r1。解决办法有:
1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
2.数据旁路技术。
3.编译优化:通过编译器调整指令顺序来解决数据相关。 - 控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。如此时由于程序跳转指令导致流水线断流。解决办法有:
1.转移指令分支预测。简单预测(永远猜ture或false)、动态预测(根据历史情况动态调整)。
2.预取转移成功和不成功两个控制流方向上的目标指令。
3.加快和提前形成条件码。
4.提高转移方向的猜准率。
流水线分类:
(1)部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
(2)单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
单功能流水线指只能实现一种固定的专门功能的流水线;
多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
(3)动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
(4)线性流水线和非线性流水线
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
多发技术:
- 超标量技术:
每个时钟周期内可并发多条独立指令,要配置多个功能部件。不能调整指令的执行顺序,通过编译优化技术,把可并行执行的指令搭配起来。 - 超流水技术:
在一个时钟周期内再分段( 3 段),在一个时钟周期内一个功能部件使用多次( 3 次),执行速度提高三倍,不能调整指令的执行顺序,靠编译程序解决优化问题。 - 超长指令字:
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)采用多个部件处理。
MIPS指令执行过程:
MIPS五段式指令执行过程:①IF取指 ②ID译码&取数 ③EX 执行④M访存 ⑤WB写回寄存器
为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns。同时为保证此设计,流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。理想情况下,每个机器周期(功能段)只消耗一个时钟周期。
- 运算类指令执行过程:ADD Rs, Rd
IF 根据PC从指令Cache取指令至IF段的锁存器 ID 取出操作数至ID段锁存器 EX 运算,将结果存入EX段锁存器 M 空段
WB 将运算结果写回指定寄存器 - LOAD指令执行过程:LOAD Rd,996
RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存IF 根据PC从指令Cache取指令至IF段的锁存器 ID 将基址寄存器的值放到锁存器A,将偏移量的值放到Imm EX 运算,得到有效地址 M 从数据Cache中取数并放入锁存器 WB 将取出的数写回寄存器 - STORE指令执行过程:STORE Rs,996(Rd)
IF 根据PC从指令Cache取指令至IF段的锁存器 ID 将基址寄存器的值放到锁存器A,将偏移量的值放到Imm。将要存的数放到B EX 运算,得到有效地址。并将锁存器B的内容放到锁存器 Store。 M 写入数据Cache WB 空段
- 条件转移指令执行过程:BEQ Rs,Rt,#偏移量
IF 根据PC从指令Cache取指令至IF段的锁存器 ID 进行比较的两个数放入锁存器A、B;偏移量放入 Imm EX 运算,比较两个数 M 将目标PC值写回PC WB 空段
-
无条件转移指令执行过程:JMP #偏移量
IF 根据PC从指令Cache取指令至IF段的锁存器 ID 偏移量放入 Imm EX 将目标PC值写回PC M 空段 WB 空段