第五章-中央处理器
CPU的功能和基本结构
5.11.CPU的功能
- 指令控制: 完成取指令, 分析指令和执行指令的操作, 即程序的顺序控制
- 操作控制: 一条指令的功能往往是若干操作信号的组合来实现的. CPU管理并产生由内存取出的每条指令的操作信号. 把各种操作信号送往响应的部件, 从而控制这些部件按指令的要求进行动作
- 时间控制: 对各种操作加以时间上的控制. 时间控制要为每条指令按照时间顺序提供应有的控制信号
- 数据加工: 对数据进行算术和逻辑运算
- 中断处理: 对计算机运行过程中出现的异常情况和特殊请求进行处理
2.运算器和控制器的功能
3.运算器
对数据进行加工
4.控制器
协调并控制计算机各部件执行程序的指令序列, 基本功能包括取指令, 分析指令, 执行指令
- 取指令: 自动形成指令地址; 自动发出取指令的命令
- 分析指令: 操作码译码(分析本条指令要完成什么操作); 产生操作数的有效地址
- 执行指令: 根据分析指令得到的"操作命令"和"操作数地址", 形成操作信号控制序列, 控制运算器, 存储器以及I/O设备完成响应的操作
- 中断指令: 管理总线几输入输出; 处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)
5.运算器的基本结构
- 算术逻辑单元: 主要功能是进行算术/逻辑运算
- 通用寄存器组: 如AX、BX、CX、DX、SP等, 用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息. SP是堆栈指针, 用于指示栈顶的地址(stack pointer)
- 暂存器: 用于暂存从主存读出来的数据, 这个数据不能存放在通用寄存器中, 否则会破坏其原有的内容
- 累加寄存器: 它是一个通用寄存器, 用于暂时存放ALU运算的结果信息, 用于实现加法运算
- 程序状态字寄存器: 保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息, 如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等. PSW中的这些位参与并决定微操作的形成
- 移位器: 对运算结果进行移位运算
- 计数器: 控制乘除运算的操作数
专用数据通路方式
根据指令执行过程中的数据和地址的流动方向安排链接线路
如果直接用导线连接, 相当于多个寄存器同时并且一直向ALU传输数据
- 解决方法1: 使用多路选择器, 根据控制信号选择一路输出
- 解决方法2: 使用三态门, 可以控制每一路是否输出
性能较高, 基本不存在数据冲突现象, 但是结构复杂, 硬件量大, 不易实现
CPU内部单总线方式
将所有寄存器的输入端和输出端都连接到一条公共的通路上
6.控制器的基本结构
- 程序计数器: 用于指出下一条指令在主存中的存放地址. CPU就是根据PC的内容去主存中读取指令的. 因程序中指令(通常)是顺序执行的, 所以PC有自增功能
- 指令寄存器: 用于保存当前正在执行的指令
- 指令译码器: 仅对操作码字段进行译码, 向控制器提供特定的操作信号
- 微操作信号发生器: 根据IR的内容(指令)、PSW的内容(状态信息)及时序信号, 产生控制整个计算机系统所需的各种控制信号, 其结构有组合逻辑型和存储逻辑型两种
- 时序系统: 用于产生各种时序信号, 他们都是由统一时钟(CLOCK)分频得到
- 存储器地址寄存器: 用于存放所要访问的主存单元的地址
7.CPU的基本结构
- ALU
- 中断系统
- 寄存器
- CU
5.2 指令执行过程
1.指令周期
- 指令周期: CPU从主存中每取出并执行一条指令所花的全部时间
- 指令周期常常用若干机器周期来表示, 机器周期又叫CPU周期
- 一个机器周期又包含若干时钟周期
- 时钟周期也称为节拍、T周期或者CPU时钟周期, 它是CPU操作的最基本单位
每个指令周期内机器周期数可以不等, 每个机器周期内的节拍数也可以不等, 如:
空指令NOP: 取址周期
加法指令ADD: 取址周期+执行周期
取址周期+较长的执行周期
取址周期+间接寻址周期+执行周期
取址周期+间接寻址周期+执行周期+中断周期
2.指令周期流程
四个工作周期都有CPU访存操作, 只是访存的目的不同. 取址周期是为了取指令, 间址周期是为了取有效地址, 执行周期是为了取操作数, 中断周期是为了保存程序断点
3.指令周期的数据流—取址周期
- 当前指令地址送至存储器地址寄存器, 记做: (PC)->MAR
- CU发出控制信号, 经控制总线传到主存, 这里是读信号, 记做: 1->R
- 将MAR所指主存中的内容经数据总线送入MDR, 记做M(MAR)->MDR
- 将MDR中的内容(此时是指令)送入IR, 记做: (MDR)->IR
- CU发出控制信号, 形成下一条指令地址, 记做: (PC)+1->PC
4.指令周期的数据流-间址周期
- 将指令的地址码放入MAR, 记做: Ad(IR)->MAR或者是Ad(MDR)->MAR
- CU发出控制信号, 启动主存读操作, 记做: 1->R
- 将MAR所指主存中的内容经过数据总线送入MDR, 记做: M(MAR)->MDR
- 将有效地址送至指令的地址码字段, 记做: (MDR)->Ad(IR)
5.指令周期的数据流-执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果. 不同指令的执行周期操作数不同, 因此没有统一的数据流向
6.指令周期的数据流-中断周期
暂停执行当前的程序去执行其他的程序. 为了能够恢复当前任务, 需要保存断点. 一般用堆栈来保存断点, 这里用SP表示栈顶地址, 假设SP指向栈顶元素, 进栈操作是先修改指针, 后存入数据.
中断周期中的进栈操作是将SP减1, 这和传统意义上的进栈操作相反, 原因是计算机的堆栈中都是向低地址增加, 所以进栈操作是减1而不是加1
- CU控制将SP-1, 修改后的地址送入MAR, 记做: (SP)-1->SP, (SP)->MAR. 本质上是将断点存入某个存储单元, 假设其地址为a, 故可以记做: a->MAR
- CU发出控制信号, 启动主存做写操作, 记做: 1->w
- 将断点(PC内容)送入MDR, 记做(PC)->MDR
- CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC, 记做: 向量地址->PC
7.指令执行方案
一个指令周期通常包括几个时间段(执行步骤), 每个步骤完成指令的一部分功能, 几个依次执行的步骤完成这条指令的全部功能
单指令周期
对所有指令选用相同的执行时间来完成, 指令之间串行执行, 指令周期取决于执行时间最长的指令的执行时间
多指令周期
对于不同类型的指令选用不同的执行步骤来完成. 指令之间串行执行; 可选用不同个数的时钟周期来完成不同指令的执行过程
流水线方案
在每一个时钟周期启动一条指令, 尽量让多条指令同时运行, 但各自处在不同的执行步骤中, 指令之间并行执行
5.3 数据通路的功能&单总线结构
1.数据通路
数据通路的基本结构:
- CPU内部单总线方式
- CPU内部三总线方式
- 专用数据通路方式
2.数据通路-CPU内部单总线方式
- 内部总线是指同一部件, 如CPU内部连接各个寄存器及运算部件之间的总线
- 系统总线是指同一台计算机系统的各部件, 如CPU、内存、通道和各类I/O接口之间互相连接的总线
寄存器之间的数据传送
比如把PC内容送至MAR, 实现传送操作的流程及控制信号为:
- (PC)->Bus PCout有效, PC内容送总线
- Bus->MAR MARin有效, 总线内容送MAR
- 重要的是描述清楚数据的流向
主存与CPU之间的数据传送
比如CPU从主存读取指令, 实现传送操作的流向及控制信号为:
- (PC)->Bus->MAR PCout和MARin有效, 现行指令地址->MAR
- 1->R CU发读命令(通过控制总线发出)
- MEM(MAR)->MDR 指令从存储器->数据线->MDR
- MDR->Bus->IR MDRout和IRin有效, 现行指令->IR
执行算术或者逻辑运算
比如一条加法指令, 微操作序列及控制信号为:
- Ad(IR)->Bus->MAR MDRout和MARin有效
- 1->R CU发出读命令
- MEM(MAR)->数据线->MDR 操作数从存储器->数据线->MDR
- MDR->Bus->Y MDRout和Yin有效, 操作数->Y
- (ACC)+(Y)->Z ACCout和ALUin有效, CU向ALU发送加命令
- Z->ACC Zout和ACCin有效, 结果->ACC
3.公共操作
时序 | 微操作 | 有效控制信号 |
---|---|---|
1 | (PC)->MAR | PCout, MARin |
2 | M(MAR)->MDR | MemR, MARout, MDRinE |
3 | (MDR)->IR | MDRout, IRin |
4 | 指令译码 | - |
5 | (PC)+1->(PC) | - |
5.4 数据通路专用通路结构
专用数据通路方式-取指周期
- (PC)->MAR C0有效
- (MAR)->主存 C1有效
- 1->R 控制单元向主存发送读命令
- M(MAR)->MDR C2有效
- (MDR)->IR C3有效
- (PC)+1->PC
- Op(IR)->CU C4有效
5.5 控制器设计硬布线控制器
1.内容回顾
每一个机器周期由若干个时钟周期(或者称为节拍)组成, 通过若干个微操作组成的序列完成这个周期内需要做的事情. CU会在每一个节拍内, 发出一个微命令, 用来完成对应的微操作. 如: 微命令1使得PCout和MARin有效, 则完成对应的微操作1(PC)->MAR
- 取址周期(FE=1): T0: 微操作1、微操作2; T1: 微操作3; T2: 微操作4;
- 间址周期(IND=1): T0: 微操作5、微操作2; T1: 微操作6; T2: 微操作7;
- 执行周期(EX=1): T0: 无; T1: 微操作8; T2: 微操作9、微操作6
- 中断周期(INT=1): T0: 无; T1: 微操作10; T2: 微操作11
- 一个节拍内可以并行完成多个“相容的”微操作
- 同一个微操作可能在不同指令的不同阶段内被使用
- 不同指令的执行周期所需节拍数各不相同, 为了简化设计, 选择定长的机器周期, 以可能出现的最大节拍数为准(通常以访存所需的节拍数为参考)
- 若实际所需的节拍数较少, 可将微操作安排在机器周期末尾几个节拍上进行
- 根据指令操作码、目前的机器周期、节拍信号、机器状态条件, 即可确定现在这个节拍下应该发出哪些“微指令”
2.硬布线控制器
所有指令的取址周期、T0节拍下一定要完成(PC)->MAR. 则可知C1=FE∙T0 逻辑表达式是电路的数学化描述
M(MAR)->MDR微操作命令的逻辑表达式: FE∙T1+IND∙T1(ADD+STA+LDA+JMP+BAN)+EX∙T1(ADD+LDA)
3.硬布线控制器的设计
设计步骤
- 分析每个阶段的微操作序列(取指令、间指、执行、中断四个阶段)「确定哪些指令在什么阶段、在什么条件下会使用到什么微操作」
- 选择CPU的控制方式「采用定长机器后期还是不定长机器周期?每个机器周期安排几个节拍?」
- 安排微操作的时序「如何用3个节拍完成整个机器周期内的所有微操作」
- 电路设计
特点
指令越多, 设计和实现就越复杂, 因此一般用于RISC(精简指令集系统), 如果扩充一条新的指令, 则控制器的设计就需要大改, 因此扩充指令较困难, 由于使用纯硬件实现控制, 因此执行速度更快, 微操作控制信号由组合逻辑电路即时产生
分析每个阶段的微操作序列
- 取址周期(所有的指令都一样): PC->MAR; 1->R; M(MAR)->MDR; MDR->IR; OP(IR)->ID; (PC)+1->PC (ID为指令译码器 Instruction Decoder)
- 间址周期(所有指令都一样): Ad(IR)->MAR; 1->R; M(MAR)->MDR; MDR->Ad(IR)
- 执行周期(各不相同):
- CLA: clear ACC指令 ACC清零 0->AC(很多地方将ACC简写为AC)
- LDA: 取数指令, 把x所指内容取到ACC Ad(IR)->MAR; 1->R; M(MAR)-> MDR; MDR->AC
- JMP: 无条件转移 Ad(IR)->PC
- BAN: 条件转移, 当ACC为负时转移 A0∙Ad(IR)+(1-A0)∙(PC)->PC
罗列出所有指令在各个阶段的微操作序列, 就可以知道在什么情况下需要使用这个微操作
选择CPU的控制方式
假设采用同步控制方式(定长机器周期), 一个机器周期内安排3个节拍
安排微操作时序
三个原则
- 微操作的先后顺序不得随意更改
- 被控对象不同的微操作尽量安排在一个节拍内进行
- 占用时间较短的微操作, 尽量安排在一个节拍内完成, 并允许有先后顺序
取址周期
- T0: PC->MAR, 1->R
- T1: M(MAR)->MDR, (PC)+1->PC
- T2: MDR->IR, OP(IR)->ID
- M(MAR)->MDR: 从主存取数据, 用时较长, 因此必须一个时钟周期才能保证微操作的完成
- MDR->IR: 是CPU内部寄存器的数据传送, 速度很快, 因此在一个时钟周期内可以紧接着完成OP(IR)->ID, 也就是可以一次同时发出两个微命令
间址周期
- T0: Ad(IR)->MAR, 1->R
- T1: M(MAR)->MDR
- T2: MDR->Ad(IR)
电路设计
参见书表
可以得出微操作命令的逻辑表达式
微程序控制器
- 微命令和微操作
- 微命令和微操作是一一对应的,微命令是微操作的控制信号,微操作是微命令的执行过程
- 微指令和微周期
- 微指令是若干微命令的集合,存放微指令的控制寄存器单元地址称为微地址
- 一条微指令包含操作控制字段(产生某一步操作所需的各种操作控制信号)和顺序控制字段(产生下一条要执行的微操作地址)
- 微周期指从控制存储器中读取一条微指令并执行相应微操作的时间
- 微指令是若干微命令的集合,存放微指令的控制寄存器单元地址称为微地址
- 主存储器:
- 用于存放程序和数据,在CPU外部,RAM
- 控制存储器:
- 用于存放微程序,在CPU内部,ROM
- 程序与微程序
- 程序是指令的有序集合,微程序是微指令的有序集合
- 计算机中微程序的结构和功能是透明的
- 地址寄存器(MAR)用于存放主存的读写地址
- 微地址寄存器(CMAR)用于存放控制存储器的读写地址
- 指令寄存器(IR)用于存放从主存中读出的命令
- 微指令寄存器(CMDR或IR)用于存放从控制存储器中读出的微指令
5.6 中断和异常
1.概念
- 由CPU内部产生的意外事件称为异常->内中断
- 由CPU外部的设备向CPU发出的中断请求称为中断->外中断
- 对中断的具体处理过程由操作系统或驱动程序完成
2.异常的分类
- 硬故障中断:存储器校验错、总线错误
- 程序性异常(软件中断):整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页
- 故障:指令启动后,执行结束前的异常
- 非法操作码、缺段、缺页、除数为0
- 自陷:断点调试
- 终止:计算机出现了无法继续执行的硬件故障,不是特定指令产生的,而是随机发生的
- 故障异常和自陷异常属于软件中断
- 终止异常和外中断属于硬件中断
3.中断的分类
- 可屏蔽中断
- 通过可屏蔽中断请求线INTR向CPU发出中断请求-->可屏蔽或不屏蔽
- 不可屏蔽中断
- 通过专门的不可屏蔽中断请求线NMI向CPU发出中断请求-->电源掉电等
4.异常和中断响应
- 过程为关中断、保存断点和程序状态、识别异常和中断并转移到相应的处理程序
- IF为1开中断,IF为0关中断
- 断点保存于栈中
- 异常状态寄存器/向量中断