360 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。
这些操作由中断隐指令完成。中断隐指令不是一条指令,而是指一条指令的中断周期由硬件完成的一系列操作
微程序
指令流水线
[]