380 KiB
中央处理器
即CPU,为最难的一章。
CPU基本概念
CPU功能
CPU总功能
- 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPu管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工。对数据进行算术和逻辑运算。
- 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
运算器功能
- 对数据进行加工。
- 主要部件是ALU和ACC。
控制器功能
协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令:
- 取指令:
- 自动形成指令地址。
- 自动发出取指令的命令。
- 分析指令:
- 操作码译码(分析本条指令要完成什么操作)。
- 产生操作数的有效地址。
- 执行指令:
- 根据分析指令得到的“操作命令”和“操作数地址”。
- 形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。
- 中断处理:
- 管理总线及输入输出。
- 处理异常情况(如掉电)。
- 特殊请求(如打印机请求打印一行字符)。
- 控制器部件向系统中的部件提供它们运行所需要的控制信号。
- 控制器部件从数据总线接收指令信息。
- 控制器部件从运算器部件接收指令转移地址。
- 控制器部件送出指令地址到地址总线。
CPU结构
- ALU为首的组合逻辑。
- CU为首的时序逻辑。
- 寄存器。
- 中断系统。
运算器结构
- 算术逻辑单元ALU:主要功能是进行算术/逻辑运算。
- 通用寄存器组X:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
- 内部总线:
- 专用数据通路方式:
- 根据指令执行过程中的数据和地址的流动方向安排多条连接线路。
- 如果直接用导线连接,相当于多个寄存器同时并且一直向ALU传输数据,解决方法:
- 使用多路选择器MUX根据控制信号选择一路输出解决方法。
- 使用三态门可以控制每一路是否输出,1允许,0不允许。
- 性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
- CPU内部单总线方式:
- 将所有寄存器的输入端和输出端都连接到一条公共的通路上。
- 结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。
- 为了解决冲突用暂存寄存器解决。
- 专用数据通路方式:
- 暂存寄存器R:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容。
- 累加寄存器ACC:它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。
- 程序状态字寄存器PSW:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP) 、符号标志(SF)、零标志(ZF)、进位标志(CF)等,PSW中的这些位参与并决定微操作的形成。
- 移位器:对运算结果进行移位运算。
- 计数器:控制乘除运算的操作步数。
控制器结构
- 程序计数器PC:用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
- 指令寄存器IR:用于保存当前正在执行的那条指令。
- 指令译码器ID:仅对操作码字段进行译码,向控制器提供特定的操作信号。
- 操作控制器OC:用来产生各种操作控制信号。
- 微操作信号发生器:根据R的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
- 时序系统(时序产生器):用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
- 存储器地址寄存器MAR:用于存放所要访问的主存单元的地址。
- 存储器数据寄存器MDR:用于存放向主存写入的信息或从主存中读出的信息。
指令执行
指令周期
- 指令周期:CPU从主存中每取出并执行一条指令所需的全部时间:
- 取指周期:取指、分析。
- 执行周期。
- 指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。如取指令、取有效地址、执行指令这就是三个机器周期,是一个指令周期。
- 一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。
- 每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。
- 指令周期流程:
- 进入取指周期。
- 判断是否有间址。
- 若有则进入间址周期,结束后进入执行周期。
- 若无则直接进入执行周期。
- 判断是否有中断。
- 若有则进入中断周期,结束后进入下一条指令的指令周期。
- 若无则直接进入下一条指令的指令周期。
- CPU访存的四种性质,可以设置四位二进制位作为标志触发器:
- 取指令:取指周期。
- 取地址:间址周期。
- 存取操作数或结果:执行周期。
- 存程序断点:中断周期。
数据流
取指周期
- 当前指令地址送至存储器地址寄存器,记做:(PC)→MAR。
- CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1→R。
- 将MAR所指的地址通过地址总线传入主存中,主存将地址所指的内容经数据总线送入MDR,记做:M(MAR)→MDR。
- 将MDR中的内容(此时是指令)送入IR,记做:(MDR)→IR。
- CU发出控制信号,形成下一条指令地址,记做:(PC)+1→PC。
间址周期
- 将指令的地址码送入MAR,记做:Ad(IR)→MAR或Ad(MDR)→MAR。
- CU发出控制信号,通过控制总线发送到主存中,启动主存做读操作,记做:1→R。
- 将MAR所指的地址通过地址总线传入主存中,主存将地址所指的内容经数据总线送入MDR,记做: M(MAR)→MDR。
- 将有效地址送至指令的地址码字段,记做:MDR→Ad(IR)。这一步可以没有。
执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
中断周期
- 中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。
- 一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。
- CU控制将SP减1,修改后的地址送入MAR记做:(SP)-1→SP,(SP)→MAR。本质上是将断点存入某个存储单元,假设其地址为a,故可记做:a→MAR。
- CU发出控制信号,启动主存做写操作,记做:1→W。
- 将断点(PC内容)送入MDR,记做:(PC)→ MDR。
- CU控制将中断服务程序的入口地更新(由向量地址形成部件产生)送入PC:向量地址→PC。
指令执行方案
一个指令周期通常要包括多个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
- 单指令周期:
- 对所有指令都选用相同的执行时间来完成。
- 指令之间串行执行。
- 指令周期取决于执行时间最长的指令的执行时间。
- 缺点:对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
- 优点:实施简单,只用程序计数器PC就能实现。
- 多指令周期:
- 对不同类型的指令选用不同的执行步骤来完成。
- 指令之间串行执行。
- 可选用不同个数的时钟周期来完成不同指令的执行过程。
- 缺点:需要更复杂的硬件设计。
- 优点:系统运行速度更高,效率更高。
- 流水线方案:
- 在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
数据通路
- 数据通路就是数据在功能部件之间传送的路径。
- 由控制部件产生的控制信号建立数据通路。
- 数据通路的基本结构:
- CPU内部单总线方式。
- CPU内部多总线方式。
- 专用数据通路方式。
CPU内部单总线方式
- 内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线。
- 系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线。
- 使用一根总线连接部件的输入和输出。
- 实现简单。
- 容易冲突,且效率较低。
- 寄存器之间数据传送,比如把PC内容送至MAR,实现传送操作的流程及控制信号为:
- (PC)→Bus:PCout有效,PC内容送总线。
- Bus→MAR:MARin有效,总线内容送MAR。
- 主存与CPU之间的数据传送,比如CPU从主存读取指令,实现传送操作的流程及控制信号为:
- (PC)→Bus→MAR:PCout和IMARin有效,现行指令地址→>MAR。
- 1→R:CU通过控制总线发出读命令。
- MEM(MAR)→MDR:MDRin有效。
- MDR→Bus→>lRMD:Rout和IRin有效,现行指令→IR。
- 执行算术或逻辑运算,比如一条加法指令,微操作序列及控制信号为:
- Ad(IR)→Bus→MAR:MDRout和IMARin有效。
- 1→R:CU发读命令。
- MEM(MAR)→数据线→MDR:MDRin有效。
- MDR→Bus→Y:MDRout和lYin有效,操作数→Y。
- (ACC)+(Y)→Z:ACCout和ALUin有效,CU向ALU发送加命令。
- Z→ACC:Zout和ACCin有效,结果→ACC。
例题 设有如图所示的单总线结构,分析指令ADD(R0),R1的指令流程和控制信号。
第一步分析指令功能和指令周期功能:ADD(R0),R1这条指令的意思是R0在主存中保存着一个地址,这个地址保存一个操作数(R0为一级间址),需要将R0的操作数与R1的相加再保存到R0中。即((R0))+(R1)→(R0)。
第二步写出各阶段的指令流程:
取指周期是一个公共操作,都需要用到。
| 时序 | 微操作 | 有效控制信号 |
|---|---|---|
| 1 | (PC)→MAR | PCout,MARin |
| 2 | M(MAR)→MDR | MemR,MARout, |
| 3 | (MDR)→IR | MDRout,IRin |
| 4 | 指令译码 | |
| 5 | (PC)+1→PC |
间址周期是完成取数操作,被加数在主存中,加数已经放在寄存器R1中。
| 时序 | 微操作 | 有效控制信号 |
|---|---|---|
| 1 | (R0)→MAR | ROout,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 |
CPU内部多总线方式
- 使用多根总线连接部件的输入和输出。、
- 效率相对于单总线而言得到了提升。
专用数据通路方式
- 对于各种部件使用专用的通路进行连接。专用通路就是将总线分散到各个地方。
- 连接多,实现困难。
例题 下图是一个简化了的CPU与主存连接结构示意图(图中省略了所有的多路选择器)。其中有一个累加寄存器(ACC)、一个状态数据寄存器和其他4个寄存器:主存地址寄存器(MAR)、主存数据寄存器(MDR)、程序寄存器(PC)和指令寄存器(IR),各部件及其之间的连线表示数据通路,箭头表示信息传递方向。
要求:
(1)请写出图中a、b、c、d 4个寄存器的名称。
a、b、c、d分别对应主存地址寄存器(MAR)、主存数据寄存器(MDR)、程序寄存器(PC)和指令寄存器(IR)四个。
首先从d入手,如果是+1就一定是PC。
然后在取指周期的时候PC要把地址送到MAR中,所以与d直接相连的c就是MAR。
而剩下的a是与ALU直接相连的,代表要直接参与运算,则一定是存储数据的MDR。
而b是与MDR直接相连的,所以b从MDR直接获取数据,就是IR将数据放入指令。或b与微操作信号发生器产生连接,则一定只有指令才能发生微操作,所以一定是IR。
(2)简述图中取指令的数据通路。
(PC)→MAR:将PC指令送到MAR中开始寻址。
M(MAR)→MDR:将MAR地址指向的主存指令送到MDR中。
(MDR)→IR:将MDR中的指令送到IR中。
(PC)+1→PC:PC自动加一。
(3)简述数据在运算器和主存之间进行存/取访问的数据通路。
取:
因为是运算器与主存之间进行存取,所以数据取入ACC中。
M(MAR)→MDR:将MAR所指向的指令从主存中取出放到MDR中。
(MDR)→ALU→ACC:要把MDR的内容放入ACC进行存储,但是MDR与ACC没有直接连接的线路,所以必须通过ALU进行连接。
存:
(ACC)→MDR:将ACC中的数据传送到MDR中。
(MDR)→M(MAR):将MDR的数据送到MAR所指向的主存地址中。
(4)简述完成指令LDA X的数据通路(X为主存地址,LDA的功能为(X)→ACC)。
就是将X地址的数据送到ACC中。
X→MAR:将X的地址放到MAR中。
M(MAR)→MDR:将MAR地址指向的数据放入MDR中。
(MDR)→ALU→ACC:要把MDR的内容放入ACC进行存储,但是MDR与ACC没有直接连接的线路,所以必须通过ALU进行连接。
(5)简述完成指令ADD Y的数据通路(Y为主存地址,ADD的功能为(ACC)+(Y)→ACC)。
Y→MAR:将Y的地址放到MAR中。
M(MAR)→MDR:取出指向的值放入MDR中。
(MDR)→ALU,(ACC)→ALU:将MDR的数据与ACC的数据都送入ALU中相加。
(ALU)→ACC:将结果送到ACC中。
(6)简述完成指令STA Z的数据通路(Z为主存地址,STA的功能为(ACC)→Z)。
即将ACC中的内容存到主存Z中。
Z→MAR:将Z地址送到MAR中。
(ACC)→MDR:将ACC的数据送到MDR中。
(MDR)→M(MAR):将MDR的数据送到MAR地址中保存。
控制器
CU的设计包括硬布线和微程序两种,微程序比较重要,硬布线了解即可。
控制器输入输出
输入:
- 指令寄存器:OP(IR)->cu控制信号的产生与操作码有关。
- 时钟:一个时钟脉冲发一个操作命令或一组需要同时执行的操作命令。
- 标志:如条件转移指令,根据相应的标志位决定下一步操作。
- 外来信号:如中断请求信号INTR、总线请求信号HRQ。
输出:
- CPU内部的控制信号:寄存器之间的数据传输、PC的修改、控制ALU进行相应的运算。
- 到控制总线的控制信号:
- 到存储器:访存控制信号MREQ、读命令RD、写命令WR。
- 到I/O设备:访问I/O设备的控制信号IO。
- 中断响应信号INTA。
- 总线响应信号HLDA。
硬布线
微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生。
设计步骤
- 分析每个阶段的微操作序列。
- 选择CPU的控制方式:产生不同微操作命令序列所用的时序控制方式:
- 同步控制方式:
- 整个系统所有的控制信号均来自一个统一的时钟信号。
- 通常以最长的微操作序列和最烦琐的微操作作为标准,采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令。
- 同步控制方式的优点是控制电路简单,缺点是运行速度慢。
- 异步控制方式:
- 异步控制方式不存在基准时标信号。
- 各部件按自身固有的速度工作,通过应答方式进行联络。
- 异步控制方式的优点是运行速度快,缺点是控制电路比较复杂。
- 联合控制方式:
- 对各种不同的指令的微操作实行大部分采用同步控制、小部分采用异步控制的办法。
- 同步控制方式:
- 安排微操作时序:
- 原则:
- 微操作的先后顺序不得随意更改被控对象不同的微操作。
- 尽量安排在一个节拍内完成占用时间较短的微操作。
- 尽量安排在一个节拍内完成并允许有先后顺序。
- 原则:
- 电路设计。
- 列出操作时间表。
- 写出微操作命令的最简表达式。
- 画出逻辑图。
指令类别
- 非访存指令:
- CLA(clear):ACC清零。
- COM(complement):ACC取反。
- SHR(shift):算术右移。
- CSL(cyclic shift):循环左移。
- STP(stop):停机。
- 访存指令:
- ADD:加法指令,隐含ACC。
- STA:存数指令,隐含ACC。
- LDA:取数指令,隐含ACC。
- 转移指令:
- JMP(jump):无条件转移。
- BAN(branch ACC Negative):条件转移。
基本微操作时序
首先对于取指周期,基本上的流程如下:
- PC→MAR:将PC地址交给MAR。
- 1→R:主存发出读命令。只需要存储器空闲就能发出。
- M(MAR)→MDR:将地址指向指令交给MDR。要MAR准备好,在1的后面。
- MDR→IR:将指令交给IR。把MDR有指令,在3后面。
- OP(IR)→ID:编译指令。IR中要有指令,在4后面。
- (PC)+1→PC:PC自加1。因为操作完就可以更新,所以在1后面就可以了。
所以没有依赖的可以尽量往前放,顺序可以变为123645。
因为12没有相互依赖,所以可以都安排在T0时间;36在1的后面,且36之间用到的设备不一样从而不会冲突,所以都安排在T1;而4和5时间都较短,所以可以都安排在T2。
然后是间址周期:
- Ad(IR)→MAR:获取IR指令中的地址交给MAR。
- 1→R:主存发出读命令。
- M(MAR)→MDR:取出对应的值放到MDR中。
- MDR→Ad(IR):将MDR的地址值放入IR的指令中。
与取指周期一致,2可以跟1一起,而34都依赖于1,所以12是T0,3是T1,4是T2。
执行周期省略,最后是中断周期,假设中断时要保存的地址为a:
- a→MAR:将a保存到MAR中。
- 1→W:主存发出写命令。存储器空闲就可以。
- 0→EINT:硬件关中断。安排在第一个周期就可以。
- (PC)→MDR:将当前程序计数器保存的位置暂存到MDR,等待后期恢复。内部数据通路空闲就可以。
- MDR→M(MAR):将MDR的数据保存到a这个地址。在4之后。
- 向量地址→PC:将PC送到中断服务地址。只用PC改好就可以,在4之后。
1、2、3都在T0,而456依次为T1、T2、T3。
这些操作由中断隐指令完成。中断隐指令不是一条指令,而是指一条指令的中断周期由硬件完成的一系列操作
微程序
事先把微操作控制信号存储在一个专门的存储器(控制存储器)中,将每一条机器指令编写成一个微程序,这些微程序可以存到一个控制存储器中,用寻址用户程序机器指令的办法来寻址每个微程序中的微指令。
微程序构成
- 完成一条机器指令分为多个微操作命令,微操作命令即微命令,是微操作的控制信号。微操作是微命令的执行过程。
- 微命令分为:
- 相容性微命令:可以同时产生、共同完成某些微操作的微命令。
- 互斥性微命令:在机器中不允许同时出现的微命令。
- 对于相容性的微命令可以合并为一条微指令,而互斥性微命令可以单独为一条微指令。
- 微指令是若干微命令的集合。微周期通常指从控制存储器中读取一条微指令并执行相应的微操作所需的时间。
- 假设微指令的一个二进制位对应一个微操作命令,所有的微命令都合并为微指令,微指令再合并为一个微程序保存到ROM中,从而每一条机器指令对应一条微程序。
- 微指令基本格式:
- 操作控制:微操作码:产生控制信号。
- 顺序控制:微地址码:产生下一条指令地址。
- 每条指令取指周期的操作是相同的,所以将取指令操作的微命令统一编成一个微程序,而每条机器指令所对应的具体操作再单独编写一个对应的微程序。
微程序控制器结构
- 控制存储器CM:用于存放各指令对应的微程序,控制存储器可用只读存储器ROM构成。
- 微地址寄存器CMAR:接收微地址形成部件送来的微地址,为在CM中读取微指令作准备。
- 地址译码器:将地址码转换微存储单元控制信号。
- 微指令寄存器CMDR:用于存放从CM中取出的微指令,它的位数同微指令字长相等。
- 微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行。
- 顺序逻辑单元:为了保证指令联系执行,控制形成下一条微指令,拥有一个标志位标识顺序执行还是跳转和一个时钟信号CLK。
- 控制流程:
- 机器指令操作码OP送到微地址形成部件形成微地址。
- 将初始微地址送到顺序逻辑单元,判断顺序执行还是跳转。
- 送到CMAR保存微地址。
- 将微地址从CMAR送到地址译码器中译码。
- 形成控制单元后送到CM中取出微指令。
- 将微指令送到CMDR中。
- 根据微指令中的下一条指令地址送到顺序逻辑单元,判断顺序执行还是跳转。
- 返回结果后CMDR送到CPU内部和系统总线,产生控制信号。
- 微程序个数:
- 默认一条机器指令对应一个微程序。
- 取指周期微程序默认是公共的(即单独拿出来公用),故如果某指令系统中有n条机器指令,则CM中微程序的个数至少是n+1个。
- 间址周期微程序和中断周期微程序不一定是公共的。若公共的,如果这台计算机指令系统中有n条机滤指令,则CM中微程序的个数是n+3个。
微指令格式
- 水平型微指令:
- 一次能定义并执行多个并行操作。
- 基本格式是:操作控制+顺序控制。
- 优点:微程序短,执行速度快。
- 缺点:微指令长,编写微程序较麻烦。
- 垂直型微指令:
- 类似机器指令操作码的方式,由微操作码字段规定微指令的功能。一条指令对应一个操作。
- 基本格式:微操作码+目的地址+源地址。
- 优点:微指令短、简单、规整,便于编写微程序。
- 缺点:微程序长,执行速度慢,工作效率低。
- 混合型微指令:
- 在垂直型的基础上增加一些不太复杂的并行操作。
- 微指令较短,仍便于编写。
- 微程序也不长,执行速度加快。
微指令编码
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
- 直接编码(直接控制)方式:
- 在微指令的操作控制字段中,每一位二进制位代表一个微操作命令。
- 某位为“1”表示该控制信号有效,为1的指令同时执行;若“0”则代表此时该位指向的命令不运行。
- 优点:简单、直观,执行速度快,操作并行性好。
- 缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大。
- 字段直接编码方式:
- 将微指令的控制字段分成若干“段”,每段经译码后发出控制信号。
- 微命令字段分段的原则:
- 因为每组译码后可以通过每位10的不同来让每组中的操作互斥,而不同组则很难完成互斥,所以互斥性微命令分在同一段内;因为命令在不同的组可以同时执行,所以相容性微命令分在不同段内。
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。
- 优点:可以缩短微指令字长。
- 缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
- 字段间接编码方式:
- 一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。
- 优点:可进一步缩短微指令字长。
- 缺点:运行速度更慢;削弱了微指令的并行控制能力,故通常作为字段直接编码方式的辅助手段。
例题 某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7、3、12、5和6个微命令,则操作控制字段至少有多少位?
一共五个互斥类,所以一共要分为五段控制段。
每个段还要流出一个状态表示不操作,所以每个段能表示的微指令数为8、4、13、6、7。
所以对应的二进制位数分别为3、2、4、3、3。
微指令地址
- 微指令的下地址字段指出:微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。
- 根据机器指令的操作码形成:当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。
- 由硬件产生微程序入口地址:
- 第一条微指令地址:专门硬件产生。
- 中断周期:硬件产生中断周期微程序首地址。
- 增量计数器法:(CMAR)+1→CMAR,适用于指令连续存放的情况。
- 分支转移:指令分为三个字段:
- 操作控制字段:指明操作控制类型。
- 转移方式:指明判别条件。
- 转移地址:指明转移成功后的去向。
- 通过测试网络:一个测试网络产生。
例题 某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是多少位?
求微指令中下地址字段的位数,即求微指令的条数。
一共有32条机器指令,而平均4条微指令,所以有32×4=128,再加上公共取指令微程序的2条,所以一共130条。
对130以2为底取对数,所以至少8位。
微程序控制单元设计
设计步骤:
- 分析每个阶段的微操作序列。
- 写出对应机器指令的微操作命令及节拍安排:
- 写出每个周期所需要的微操作(参照硬布线)。
- 补充微程序控制器特有的微操作:
- 取指周期:Ad(CMDR)→CMAR;OP(IR)→CMAR。b
- 执行周期:Ad(CMDR)→CMAR。
- 确定微指令格式:
- 根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数。
- 由微指令数确定微指令的顺序控制字段的位数。
- 最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
- 编写微指令码点:根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
| 节拍安排 | 取指周期-硬布线控制器的节拍安排 | 取指周期-微程序控制器的节拍安排 |
|---|---|---|
| T0 | PC→MAR | PC→MAR |
| T0 | 1→R | 1→R |
| T1 | M(MAR)→MDR | M(MAR)→MDR |
| T1 | (PC)+1→PC | (PC)+1→PC |
| T2 | MDR→IR | MDR→IR |
| T2 | OP(IR)→ID | OP(IR)→微地址形成部件 |
根据读出转入微指令的过程,变为:
| 节拍安排 | 取指周期-硬布线控制器的节拍安排 | 取指周期-微程序控制器的节拍安排 |
|---|---|---|
| T0 | PC→MAR | PC→MAR |
| T0 | 1→R | 1→R |
| T1 | M(MAR)→MDR | Ad(CMDR)→CMAR |
| T1 | (PC)+1→PC | |
| T2 | MDR→IR | M(MAR)→MDR |
| T2 | OP(IR)→ID | (PC)+1→PC |
| T3 | Ad(CMDR)→CMAR | |
| T4 | MDR→IR | |
| T4 | OP(IR)→微地址形成部件 |
硬布线与微程序
| 对比项目\类别 | 微程序控制器 | 硬布线控制器 |
|---|---|---|
| 工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
| 执行速度 | 慢 | 快 |
| 规整性 | 较规整 | 烦琐、不规整 |
| 应用场合 | CISC CPU | RISC CPU |
| 易扩充性 | 易扩充修改 | 困难 |
微程序设计分类
- 静态微程序设计:无需改变,采用ROM。
- 动态微程序设计动态通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM。
- 毫微程序设计:微程序设计用微程序解种机器指令,毫微程序设计用毫微程序解释微程序。
指令流水线
流水线基本概念
指令流水线定义
一条指令大致分为取指、分析、执行三个阶段,设时间都为t,一共有n条指令:
- 顺序执行:
- 顺序执行所有指令。
- 总耗时3nt。
- 传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。
- 优点:控制简单,硬件代价小。
- 缺点:执行指令的速度较慢,在任何时刻,处理机中只有一个指令在指令,各功能部件利用率都很低。
- 一次重叠执行方式:
- 在执行第k条指令的同时取第k+1条指令。
- 总耗时(1+2n)t。
- 优点:程序的执行时间缩短了1/3,各功能部件的利用率明患提高。
- 缺点:需要付出硬件上较大开销的代价控制过程也比顺件执行复杂了。
- 二次重叠执行方式:
- 分析第k条指令的同时取k+1条指令,执行k条指令时分析k+1条指令与取k+2条指令。
- 总耗时(2+n)t。
- 与顺序执行方式相比,指令的执行时间缩短近2/3。
- 这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。
- 指令流水方式:多次重叠执行方式就是流水线方式。
流水线表示
- 指令执行过程图:
- 横坐标为时间,纵坐标为指令序列。
- 每一行就是一条指令序列。
- 主要用于分析指令执行过程以及影响流水线的因素。
- 时空图:
- 横坐标为时间,纵坐标为空间,即不同的阶段所对应的不同硬件资源,如:取指、译码、执行、存结果。
- 每一斜着的一列就是一条指令序列。
- 主要用于分析流水线的性能。
流水线性能
- 吞吐率:
- 指在单位时间内流水线所完成的任务数量,或是输出结果的数量。
- 设任务数为$n$,处理完成$n$个任务所用的时间为$T_k$,则计算流水线吞吐率$TP$的最基本的公式为$TP=\dfrac{n}{T_k}$。
- 令每个指令分为$k$个阶段,每个阶段所需时间为$\Delta t$一般等于一个时钟周期,则理想状态下$T_k=(k+n-1)\Delta t$,所以$TP=\dfrac{n}{(k+n-1)\Delta t}$。
- 第一个指令执行阶段称为装入时间,最后一个指令执行的阶段称为排空时间。
- 加速比:
- 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
- 设$T_0$表示不使用流水线时的执行时间,即顺序执行所用的时间;$T_k$表示使用流水线时的执行时间,则计算流水线加速比$S$的基本公式为$S=\dfrac{T_0}{T_k}$。
- 单独完成一个任务需要$k\Delta t$,则顺序完成时间$T_0=nk\Delta t$。又$T_k=(k+n-1)\Delta t$,所以$S=\dfrac{nk\Delta t}{(k+n-1)\Delta t}=\dfrac{kn}{k+n-1}$。
- 效率:
- 流水线的设备利用率称为流水线的效率。
- 在时空图上,流水线的效率定义为完成$n$个任务占用的时空区有效面积与$n$个任务所用的时间与k个流水段所围成的时空区总面积之比。(时空图中用到的类平行四边形面积除以围成矩形的面积)。
- 流水线效率$E$的基本公式为$E=\dfrac{T_0}{kT_k}=\dfrac{n}{k+n-1}$。
流水线影响因素
- 理想情况:各阶段花费时间相同,每个阶段结束后能立即进入下一阶段。
- 机器周期一般分为五段:取指IF、译码ID、执行EX,访存M,写回WB。
- 各部件实际耗时:100ns、80ns、70ns、50ns、50ns,为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns。
- 流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
结构相关(资源冲突)
- 由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
- 解决办法:
- 后一相关指令暂停一周期。
- 资源重复配置,按不同阶段将设备分开使用。
数据相关(数据冲突)
- 数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
- 数据的基本操作:读(R)、写(w)。
- 冲突的基本类型:
- 写后读RAW:没有写完就读取,按序发射,按序完成只会出现写后读的错误。
- 读后写WAR:乱序发射,优化手段导致指令顺序不符合编写程序时预想的逻辑顺序。
- 写后写WAW:存在多个功能部件时,后一条指令先于前一条指令完成。
- 解决办法:
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”(空指令)两种方法。
- 数据旁路技术:计算得到结果后不写回,直接当作输入使用。
- 编译优化:通过编译器调整指令顺序来解决数据相关。
例题 假设某指令流水线采用“按序发射,按序完成”方式,没有采用转发技术处理数据相关,并且同一寄存器的读和写操作不能在同一个时钟周期内进行。若高级语言程序中某赋值语句为x=a+b,x、a和b均为int型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流中的执行过程如下图所示。
I1 LOAD R1, [a] I2 LOAD R2, [b] I3 ADD R1, R2 I4 STORE R2, [x]
则这4条指令执行过程中I3的ID段和I4的IF段被阻塞的原因各是什么?
| 指令 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| I1 | IF | ID | EX | M | WB | |||||||||
| I2 | IF | ID | EX | M | WB | |||||||||
| I3 | IF | ID | EX | M | WB | |||||||||
| I4 | IF | ID | EX | M | WB |
题目中提到指令流水线采用“按序发射,按序完成”方式,也就是说这里无法使用编译优化技术,没有采用转发技术处理数据,也就是说无法使用数据旁路技术,所以处理方式就只能等。
同时同一寄存器的读和写操作不能在同一个时钟周期内进行,也就是没有使用多个硬件资源的方式。
问题问I3的ID段和I4的IF段被阻塞的原因,就是I3和I4的IF后都空了三个格子的原因。
然后分析执行过程,R1和R2都是寄存器,I1 LOAD R1, [a]就是指将a所对应地址的数据放入R1中,同理I2 LOAD R2, [b]就是将b放入R2中,I3 ADD R1, R2将R1和R2相加,根据I4可以看出是结果存到R2中,I4 STORE R2, [x]将R2的值存到x指向的地址。
所以分析为什么I3阻塞,因为I3执行的是相加,所以一定要等待R1和R2的值都有了才能相加,所以I3取指IF后要等到有数据才能译码ID,从而必须等到I1、I2的WB完成即时间单元6之后才能开始。所以I3与I1、I2数据相关。
同样I4需要将结果计算出来了才能存,所以I4的ID译码必然等到I3的WB完成之后才能开始,即10之后才能开始。所以I4与I3数据相关。
控制相关(控制冲突)
- 当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
- 解决办法:
- 尽早判别转移是否发生,尽早生成转移目标地址。
- 预取转移成功和不成功两个控制流方向上的目标指令。
- 加快和提前形成条件码4.提高转移方向的猜准率。
流水线分类
- 根据流水线使用的级别的不同:
- 部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
- 处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
- 处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
- 按流水线可以完成的功能:
- 单功能流水线指只能实现一种固定的专门功能的流水线。
- 多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
- 按同一时间内各段之间的连接方式:
- 静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
- 动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
- 按流水线的各个功能段之间是否有反馈信息:
- 线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
- 非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
流水线多发
- 超标量技术:
- 每个时钟周期内可并发多条独立指令。
- 要配置多个功能部件。
- 不能调整指令的执行顺序。
- 超流水技术:
- 在一个时钟周期内再分段。
- 在一个时钟周期内单个功能部件使用多次。
- 不能调整指令的执行顺序,靠编译来优化。
- 超长指令字:
- 由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字。
[]