type
status
date
slug
summary
tags
category
icon
password
模型机指令系统
- 模型机的指令格式分类(模型机中没有三四地址指令)
- 双操作数指令
- 单操作数指令
- 转移指令
- 指令格式(字长操作码地址码):采用定长指令格式,指令字长16位(模型机的基本字长是16位)
- 双操作数指令
- 如下图:
- 单操作数指令
- 转移指令
注意源操作数是在后面的,如MOV A,B是将B(源)移动到A(目的)
如下图:
注意单操作数指令只有目的操作数(这个涉及到后面的指令流程和操作时间表,所以单操作数指令是没有源周期的)
如下图:
注意跳转指令多了一些转移条件(这些条件通常是由PSW提供的)
- 寻址方式:操作数在寄存器或存储器中。模型机主存储器按字编址,字长16位(也就是基本字长。所以一个单元能存储一条指令);
为了减少地址码长度,采用寄存器型寻址(模型机不支持在指令中直接提供主存地址,但是支持变址寻址,此时形式地址是在指令的下一个单元;也支持立即寻址,这个时候立即数也是放在指令的下一个单元);地址码部分给出的是寄存器号;常用寻址方式如下图:
需要特别注意:双间址就是寄存器内存的是操作数的间接地址(所以需要多取一次数);立即寻址的立即数是在当前指令的下一个单元;变址寻址和相对寻址的形式地址都是存储在指令的下一个单元;上面这些助记符要记下来
- 按功能划分的指令类型:操作码共4位,设置15种指令(14种编码,转移指令与子程序返回指令共用一种编码);余下两种编码可供指令扩充(也就是扩展操作码);
- 如下图:
转移指令和返回指令共用同一个编码的原因:JMP指令是根据寄存器内的给出的地址进行跳转,RST指令就相当于是指定寄存器为SP寄存器,所以使用同一种编码
CPU的组成
- 寄存器:暂存操作数或运算结果。每个寄存器16位,内部由16个边沿D触发器或集成D触发器构成;同步打入(受CP控制)或异步置入(优先级更高,相当于一个与非门RS触发器)
- 用于暂存数据的寄存器:通用寄存器(R0等)、暂存器(C、D)。
- 通用寄存器:可编程,指令系统中分配了编号:R0、R1、R2、R3(也就是模型机中只有四个通用寄存器)
- 暂存器:不可编程,暂存信息,指令系统中没有分配编号
- 暂存器C:暂存源操作数或源地址(也就是C用来处理源操作数,在源周期使用)
- 暂存器D:暂存目的操作数或目的地址,或中间结果(也就是D用来处理目的操作数,在目的周期试用)
- 用于程序控制的寄存器:
- 指令寄存器IR(采取异步置入方式):存放现行指令,可扩充为指令队列(指令栈)
- 程序计数器PC:提供下一条指令的地址(通过隐含下一条指令的地址使得四地址指令能变成三地址指令)
- 程序状态字寄存器PSW:
- 特征位:进位C、溢出V、零值Z、负数N(通常用来作为跳转的条件)
- 控制位(可编程,CPU开关中断的标志为IF就在PSW内):中断标志等
- 主存接口寄存器:
- 地址寄存器MAR(单向,只能从CPU向地址总线发送,因为寻址是CPU的一个特有的功能):访存地址由MAR经地址总线送往主存储器
- 数据缓冲寄存器MDR(双向,既可以是CPU向主存发送数据,也可以是CPU从主存中读出信息):由控制命令R、W ̅(由控制逻辑决定)决定传送方向
- 读: 主存单元->数据总线->(异步置入)MDR(由于是打入异步的,不需要时钟信号控制,所以从主存单元到暂存器C是可以在一个时钟周期内完成)
- 写: MDR->数据总线->主存单元(同步打入)
- 运算器(冯诺依曼计算机的核心):算术逻辑运算
- 运算器的框图如下(画CPU的数据通路宽度的时候要用到):
- 输入选择器A/B:选择数据来源,送入ALU进行运算处理,或通过ALU进行传送
- ALU(算术逻辑单元,通常由多个全加器组成):采用SN74181芯片(4位);由微命令M,C0,S0,S1,S2,S3控制不同运算(下一节详细介绍)
- 移位器:将ALU产生的结果进行直接传送、左移或右移
注意这里PC、SP只能走选择器A,PSW、MDR只能走选择器B
记忆:两个字母的走A,三个字母的走B
- 控制器:组合逻辑控制器/微程序控制器(两种产生微命令的方式):指令执行过程中,分时产生每一步操作所需的控制信号(微命令)
- 控制器框图如下:
跟概论中一样,需要注意微命令发生器的输入:时序信号、IR(当前执行指令)、PSW(当前程序的状态)、IO请求(中断或者DMA)
- 总线(数据传送通路):CPU内总线(采用同步模式)、系统总线(采用异步模式)
- CPU内总线(采用同步方式):单向(所以就算是CPU内寄存器之间的数据传输,也需要经过ALU)数据传送总线,分离寄存器结构(就是每一个寄存器都有一个输入端口和输出端口)
- 如下图:
- 系统总线(大多采用异步方式):通过16位(说明模型机的数据通路宽度是16)系统总线连接主存和外设接口
如下图:
- 时序系统:产生时序信号(便于执行同步操作,如向寄存器中打入数据等)
- 时序系统的意义:计算机的工作通常是分步执行,需要有一种时间信号作为分步执行的标志
- 模型机的时序信号:包含机器周期(工作周期)、时钟周期(节拍)、脉冲(也就是组合逻辑控制器的三级时序)
- 时序部件(时序系统)的组成:由一个振荡器和一组计数器分频器组成(想想综设里面的晶振和时基单元)
模型机CPU的数据通路结构(超级重点)
- 模型机CPU的数据通路框图
- 如下(一定要背!):
- MAR跟地址总线之间的单向的
- SP、PC只能走选择器A,PSW、MDR只能走选择器B
- IR寄存器没有连到内总线上
- 控制逻辑是单挂在CB上的,并且这个控制逻辑应该就是CPU内的控制器
- 主存和接口与AB之间的连线也是单向的
- IR寄存器仅与DB相连
上图的一些注意点:
- 各类信息的传送路径(超级重点,与第四节中的微命令有关):指令执行过程就是各类信息的传送
- 指令信息(虽然是指令,但是走的还是DB):从主存储器M到指令寄存器IR(这个描述就是在描述指令流程)
- 地址信息(走AB):包括指令地址(传入IR)和数据地址(传入MDR),包括了取源操作数地址和目的操作数地址
- 数据信息(走DB):Ri->Rj(一个时钟周期), R->M或接口(两个时钟周期), M或接口->R(一个时钟周期)
- 下面具体举例(重点)
- 取指令地址(指令的地址来自PC):
- 取完指令之后需要修改PC使PC指向下一条指令
- 指令信息的传送(从主存中读取指令,注意是经过DB传送指令到IR):
- 操作数地址(包括源操作数和目的操作数的地址):若操作数在存储器中,则需按寻址方式计算操作数地址,送MAR
- 寄存器间址(R)取操作数地址:
- 自减型寄存器间址 -(R)取操作数地址(经过ALU的时候做减一操作直接打入MAR和Ri即可,不需要再经过暂存器了):
- 自增型寄存器间址 (R)+取操作数地址(先取数再加一,所以没办法一个时钟周期完成了):
- 自增型双间址 @(R)+取操作数地址:
- 变址器址 X(R)取操作数地址(注意形式地址在下一个单元,需要先将形式地址取到暂存器中):
- 数据信息的传送
- 寄存器→寄存器(直接通过CPU内总线传输):
- 寄存器→主存(或者统一编址的接口):
- 主存(或统一编址的接口)→寄存器:
- 主存→主存(必须经过CPU):
从主存来的数据都是异步置入的
注意这里将间接地址送MAR之后应该先取出直接地址,将直接地址存到暂存器C中,然后对Ri内容进行增加(根据第三节的指令流程)。所以可以理解为将直接地址送到暂存器中而不是马上打入MAR是为了将Ri自增(所以需要暂停直接地址的传送,先处理Ri的自增)
注意,将数据放到了暂存器中才叫做“将数据取出了”,所以都是在数据进入暂存器之后对寄存器进行自增(自减是在取数之前,所以就没有影响)
由于此时是同步打入MDR,所以执行这个操作需要两个时钟周期(一个用于控制同步打入MDR,一个用于控制同步打入主存单元)
由于是异步置入,所以此时只需要一个时钟周期就能完成这个操作(只需要一个时钟周期用于将数据同步打入Ri)
上面的颜色就区分出来了两个操作。前一个操作需要一个时钟周期,后一个操作需要两个时钟周期
时序控制方式
根据操作与时序信号之间的关系分同步与异步控制方式(还有扩展同步方式)
- 同步控制方式:各项操作与统一的时序信号同步,称为同步控制。
- 时间分配(基本特征):将操作时间划分为许多时钟周期,周期长度固定(应该是指时钟周期的长度固定。实际上如果采用同步控制的话,操作时间内的时钟周期数也是固定的), 每个时钟周期完成一步操作
- 同步定时:有些操作需要严格地同步定时,如将结果打入寄存器,需要同步打入脉冲(脉冲,也就是组合逻辑控制器中的第三级时序,也是CPU内每次打入寄存器都需要一个时钟周期的原因)
- 各部件间的协调:在CPU内,一般由CPU提供统一时序信号控制部件间信息传送
- 特点:时序关系比较简单,时间安排上可能不经济的(这个可能有)
- 异步控制方式:各项操作按其需要选择不同的时间,不受统一的时钟周期的约束(此时一个操作的时间就不一定是时钟周期的整数倍了)。各操作之间的衔接与各部件之间的信息交换采取应答方式
- 时间分配(基本特征):没有统一的节拍划分与同步定时脉冲,但存在着申请、响应、询问、回答一类的应答关系。(如从主存中读出数据到CPU中的异步置入,就不是同步时序信号控制的)
- 特点:时间紧凑,能按实际需要分配时间,实现异步应答所需的控制比较复杂。
- 实际应用中的一些变化:
- 在CPU或设备的内部普遍采用同步控制方式(也就是CPU内总线采用同步方式)
- 对连接CPU、主存、外设的系统总线,有的采用同步,有的采用异步控制,但多采用异步控制。
- 在实际应用中,还可采用同步扩展方式,以同步思想为基础,引入异步应答关系(同步扩展方式的指令周期还是时钟周期的整数倍,但是每一个指令周期的时钟周期数不是固定的)
运算部件
一位加法单元
也就是一个全加器,输入为两个本位和一个进位,输出为一个进位和一个本位和
- 全加器的逻辑符号
- 全加器的逻辑函数表达式(根据真值表就能算出来):
串行加法器
将n位加分成n步实现,每步做1位加
- 串行加法器的组成
- 1个一位全加器(因为是串行的所以只需要一位)
- 1个移位寄存器:从低到高(所以需要移位)串行提供操作数相加
- 1个寄存器:提供另一个操作数
- 1个触发器:暂存(需要存储所以需要使用一个触发器)进位信号
- 串行加法器的结构图:
注意上图中的A就是移位寄存器,这里是将最终的结果直接存储到移位寄存器A中(从高位开始存储,因为计算一个低位,高位就会因为移位空出来一位)
- 特点:结构简单(因为只有一个全加器),速度慢(因为是串行的)
并行加法器
- 并行加法器:用n位全加器实现n位数相加
- 并行加法器组成:
- n位全加器
- 进位链
- 串行进位链(进位信息串行传递,注意如果是用了串行进位链就是一个并行加法器。串行进位链中的串行仅是代表进位信息是如何传递的,并不代表加法器是并行的还是串行的)
- 并行进位链(进位信息并行传递)
- 所以加法器的运算速度不仅与全加器的运算速度有关,更主要的因素是取决于进位传递速度(与进位链有关)
- 并行加法器进位信号的基本逻辑
- 如下图(这个还是背一下):
记忆:如果AB都为1就产生一个进位,所以AB是进位产生函数;如果AB其中有一个1,那么进位就会被传递到下一位,所以AB异或是进位传递函数
- 串行进位链:各级进位信号直接依赖于低一级的进位信号
- 串行进位链的结构图
- 如下(就是将所有的全加器都串联起来):
- 串行进位链的进位关系式
- 如下图(也就是当前的进位信息依赖于上一个产生的进位信息,所以所有全加器是串行运作的):
- 串行进位链的特点(跟串行加法器是一样的):结构简单(因为进位信息是串行传递的),运算速度较慢(因为是每一个全加器都是串行运作的)
- 并行进位链:各级进位信号并行(同时)形成(因为每一个加法器前面增加了一些电路还有输入)
- 并行进位链的关系式(实际上就是在串行进位链的基础上将上一个关系式带入)
- 如下图:
- 并行进位链的结构图
- 如下图(注意到后面的输入增加了前面几位的信息):
- 并行进位链特点:运算速度快(因为增加了输入之后每一个加法器都是并行工作的),但进位结构复杂(牺牲了电路结构上简单性来换取运算速度,越到高位电路结构就更复杂,因为到高位需要带入的关系式就越多,输入也就越多,处理也就更复杂)
- 分组进位:组内并行进位,组间串行或并行进位(就是在运算速度和电路结构的简单性之间寻找了一个平衡点)
- 分组进位的关系式
- 第一级:小组内并行进位链(这里先假设组间传递是串行的,之后进行组间并行的时候再进行修改)
- 第二级:小组间并行进位链
- 分组进位的进位传递过程
也就是组内还是并行进位(将上一个关系式带入下一个关系式),在进行组间传递的时候先整合当前组内的电路结构(也就是得出组间进位时的进位产生函数和进位传递函数),整合之后再在组间进行并行传递(将上一个关系式带入下一个关系式)。注意这个时候每一组内的输入不是所有的位和初始进位,而是当前组需要处理的位和上组进位
- 如下图:
- 根据输入,每一个组内运算先并行进行,所以产生了每一个组间的进位产生函数和进位转移函数(这个是根据本组的本位信息就可以直接得出的),但是后面三组由于并行进位链还没有开始工作(因为要等待所有的组间进位转移函数和进位产生函数都传入组间并行进位链),所以没办法获取进位信息;而第一组根据初始进位(初始进位直接输入)可以计算出组内的每一个进位信息(也就是C1—3)。所以第一步运算就是每一个组内加法器进行运算,产生并行进位链需要的组间进位产生函数还有进位转移函数(C1—3能计算是因为初始进位直接输入第一组)
- 然后就是并行进位链根据每个组运算产生的进位产生函数和进位转移函数以及初始进位计算每一个组间进位,也就是CⅣ、CⅢ、CⅡ、CI
- 最后就是每组加法器根据组间进位产生组内每一位的进位(因为这个时候每一组加法器都知道自己的初始进位是什么了)
对上图的理解:
算术逻辑单元ALU(不太可能考)
- 一位ALU的组成
- 1位加法器(也就是一个全加器):求和、进位
- 输入选择器:1对与或非门(为了支持除加法外的运算)
- 控制门:控制当前ALU是进行算术运算还是逻辑运算(为了支持除加法外的运算。M为1是逻辑运算,M为0是算术运算)
- 一位ALU的框图(了解,这要画的话按照真值表来搞):
- 四位ALU芯片举例(更不可能考框图了,没必要看,这里就摆上两个框图):SN74181:4位全加器,并行进位链,公共输入选择门、控制门集成在一块芯片上
- 框图如下:
该芯片的功能表如下:
运算器组织
- 运算器基本逻辑组成:ALU、寄存器组(用于提供操作数)、判别逻辑
- 针对ALU的基本逻辑组成,组织多功能运算器有两个问题:
- 向ALU提供操作数的方式?
- 寄存器组的结构?采用独立寄存器结构(就是模型机内部的结构)还是小型存储器结构?
- 模型机运算器框图(重要捏)
- 如下图:
这个时候通过多路选择器向ALU提供操作数;并且采用独立寄存器结构
本章小结
- 全加器结构:两个本位输入,一个低位进位,输出本位和、高位进位;并行加法器的进位逻辑(产生式的带入)
- ALU的功能(算术逻辑运算)
- 运算器的基本结构(模型机内的运算器采用多路选择器和独立寄存器结构)
运算方法
定点加减运算
- 补码加减运算规则(重点):操作数用补码表示,符号位一起参与运算,所得运算结果为补码表示。(对加减法而言,补码会比原码方便)
补码加减运算的逻辑实现框图(不考):
- 补码加运算:直接将补码表示的两个操作数相加,所得结果即为补码表示的和
- 补码减运算:补码减运算:转换为与减数的负数相加(所以需要求出减数负数的补码,也就是需要求变补),化“减”为“加”
- 变补(也是补码的机器负数):将Y补连同符号位(与计算补码的唯一区别)一起各位变反, 末位加1
- 结果溢出判断(这里主要讲的是硬件溢出判断。如果是程序溢出判断的话就是直接看PSW)
- 溢出:运算结果超出机器数的表示范围
- 溢出分为以下两种
- 正溢:两正数相加(向上溢出)绝对值超出允许的表示范围
- 负溢:两负数相加(向下溢出)绝对值超出允许的表示范围
- 硬件判断逻辑一
- 硬件判断逻辑二
- 硬件判断逻辑三(双符号)
- 运算溢出例题
- 如下:
SaSbSf代表的是两个加数的符号和计算结果的符号
上式就是表示:两个负数相加得到正数或者两个正数相加得到负数就有运算溢出
这里的Cf表示符号位进位,C表示有效位的最高位进位
上式就是表示:当符号位进位但是最高有效位没有进位或者最高有效位进位但是符号位没有进位的时候就有运算溢出
Sf1和Sf2就代表结果的两个符号位
上式就表示:当运算结果的两个符号位不同时就有运算溢出
定点乘法运算
进行机器乘法需要考虑下面三个问题:
- 运算符号如何处理?(原码乘法、补码乘法对符号位处理不同。在原码乘法中符号最后处理)
- 如何处理多项部分积相加?(多次累加)
- 部分积移位导致加数位数增加,加法器如何处理?(使用移位寄存器,将结果存储在移位寄存器的高位)
- 原码一位乘法:取两个操作数的绝对值相乘,每步处理一位乘法,符号位单独处理(对于乘法而言,使用原码会比补码简单)
- 运算规则
- 寄存器设置:A、B、C三个寄存器
- A:部分积累加和,双符号位,初始值为0(需要进行移位,并且低位需要跟C拼在一起。所以最后运算的结果是两个寄存器里的值拼在一起)
- B:被乘数X绝对值,双符号位,运算过程值不变
- C:乘数Y的有效位,运算过程值要变化(就是进行移位)
- 操作步骤
- 在原码一位乘中,每步只处理一位乘数,即位于C寄存器末位的乘数,称为判断位Cn
- 若Cn=1,则当前部分积为B(也就是B*1),执行操作:A+B,C→(右移一位,此时低位已经没有用了。如果是小数的话小数点也需要右移,详见下面的例题),A→(右移一位,高位补0,并且将A的末位移入C的高位。相对而言后面的几次操作就相当于是将B左移,就符合了手手算乘法的规则)。需要先右移C,如果先右移A的话就有可能将C的还没运算的高位顶掉
- 若Cn=0,则部分积为0(也就是B*0),执行操作:A+0,C→,A→;
- n次循环(也就是C的位数),每次循环做累加、移位
- 加符号位:Xf⊕Yf(两个操作数异号结果为负数,两个操作数同号结果为正数)
- 原码一位乘法例题
- 如下:
- 原码一位乘法硬件逻辑框图(了解即可)
定点除法运算(不考)
运算方法小结
- 补码加减运算规则(正数直接加,负数取变补之后再加)
- 变补操作(计算机器负数)
- 溢出判断方法(三种硬件判断溢出逻辑)
- 原码一位乘法设计思想(累加,移位,最后补符号位)
模型机的组合逻辑控制器(重点)
组合逻辑控制器
- 组合逻辑控制器的硬件组成
就像概论还有CPU组成里面的,要注意控制器的输入:IR(提供当前正在执行的指令)、PSW(当前程序的状态)、时序系统、IO请求(中断和DMA)
组合逻辑控制器时序系统
- 组合逻辑控制器的三级时序
- 工作周期(机器周期):一条指令执行的某一工作阶段所需的时间,称为一个工作周期;不同工作周期长度可能不同
- 取指周期(FT,指令正常执行过程的工作周期):从存储器取指令送IR,并修改PC
- 源周期(ST,指令正常执行过程的工作周期):源操作数非寄存器寻址(也就是非寄存器直接寻址),进入ST。按寻址方式形成源操作数地址,从主存读数送暂存器C;
- 目的周期(DT,指令正常执行过程的工作周期):目的操作数非寄存器寻址,进入DT。获取目的操作数相关信息。按寻址方式形成目的地址送MAR,非传送类指令还需从主存读操作数送暂存器D
- 执行周期(ET,指令正常执行过程的工作周期):根据操作码执行具体操作(传送、运算、转移等),并将后续指令地址(PC的值)送MAR(所以取指周期只需要将PC加一)
- DMA周期(DMAT,I/O传送控制的工作周期,第五章中详细介绍):响应DMA请求之后进入DMAT,实现主存与外围设备间的数据直传。注意DMA周期是在IT周期之前的
- 中断周期(IT,I/O传送控制的工作周期,第五章中详细介绍):响应中断请求后的过渡周期(并不执行中断程序,而是进行保存断点等准备操作),获取中断服务程序入口地址,转中断服务程序。
- 如下图:
- 工作周期的切换
- 如下图:
- 时钟周期(节拍):一个工作周期内可包含多个时钟周期,用来控制一个工作周期内的分步操作;时序系统中最基本的时间分段;各节拍长度相同(跟CPU主频相关)
- 时钟周期长度:模型机以一次访存时间作为时钟周期长度,设置为1us
- 一个时钟周期长度内可执行操作(重要捏):
- 一次读主存,并经内部数据通路传送的操作(因为从主存读数据到CPU的接口寄存器的时候都是异步置入的,所以还能再在CPU内部转移一次)
- 一次内部数据通路传送操作(也就是从一个寄存器到另一个寄存器)
- 一次写主存操作(从MDR经总线到M)
- 时钟周期计数
- 每个工作周期第一节拍,T=0
- 每开始一个新节拍,T计数(加1。实际上应该是在上一个时钟周期结束的时候T+1)
- 当期工作周期结束时,T清0(在操作时间表内没有显示写出来,而是在工作周期结束的时候直接进行工作周期的切换)
- 如下图:
- 工作脉冲(定时脉冲,通常是在时钟周期的末位处):每个时钟周期末尾(所以所有的寄存器打入操作都是在时钟周期最后的)设置一个工作脉冲,作为各种同步脉冲的来源。
- 同步定时脉冲控制的定时操作
- 打入寄存器(数据传送的时候。在工作脉冲的上升沿打入)
- 时序切换(就是工作周期的切换或者计数器的增加。在工作脉冲的下降沿进行操作)
- 如下图:
再次提醒,DMA周期是在中断周期之前的;还有就是模型机内的单地址指令是只有一个目的操作数的(所以单操作数指令没有源周期)
由于每一个工作周期都对应一个状态触发器,所以一共有六个状态触发器。同一时刻,只能有一个工作周期状态触发器为1,指明当前所在工作周期(所以在写指令流程和操作时间表的时候每一个工作周期的结束的时候都需要进行状态的切换)。所以当CPU需要知道当前是在什么工作周期内的时候就是去查看哪一个工作周期状态触发器是1
注意T是从0开始的,所以后面每一个工作周期的开始都是0(比如FT0,ST0等等)
- 组合逻辑控制器时序系统小结
- 模型机组合逻辑控制器采用三级时序:工作周期(机器周期)、时钟周期(节拍)和脉冲
- 不同工作周期时间长度可能不同(由若干个时钟周期组成),通过工作周期状态触发器控制工作周期的切换
- 时钟周期长度固定,一个工作周期可包含多个时钟周期
- 工作脉冲用于定时操作(同步操作)
指令流程与操作时间表
CPU执行指令的工作机制,从两个层次(是两个不同的视角范围)分析
- 指令流程(视角范围比较大):在寄存器传送级拟定各类指令的执行流程,即每一时钟周期完成的具体操作
- 指令流程的示例如下:
注意写指令流程的时候都不用写总线了(写数据通路的时候才需要写),只需要写到寄存器传送级
- 操作时间表(视角范围比较小):指令流程中各操作所需的微操作命令(电位型、脉冲型。脉冲型是需要工作脉冲来控制的)序列,以及各种微命令的逻辑条件(是否是非寄存器寻址等)与时间条件(与时钟周期数有关)
- CPU内部数据通路操作(寄存器之间传送)相关微命令
- ALU输入选择(也就是在多路选择器处需要执行的微命令。微指令是一个时钟周期做的,,对应指令流程;但是微命令就只是一步操作。详见微程序控制器)
- Ri→A (选择寄存器Ri):Ri取值:R0、R1、R2、R3,C, D, PC, SP(两个字母的送A)
- Rj→B (选择寄存器Rj):Rj取值:R0、R1、R2、R3, C, D, MDR, PSW(三个字母的送B)
- ALU功能选择微命令(通常是不用写S和C的取值的,只需要写ALU要做的功能即可,也就是R+1等):
- S0,S1, S2, S3,C0(初始进位),M(算术/逻辑运算)
- 移位器功能选择微命令:
- 直传(DM):比较常用
- 左移(SL):shift left
- 右移(SR):shift right
- 结果分配微命令(也就是将结果放到寄存器):
- 脉冲型:脉冲上升沿将内总线上数据打入寄存器
- 如:CPR0、CPR1、CPR2、CPR3、CPC、CPD、CPMAR、CPPC、CPSP、CPMDR、CPPSW(也就是CP加上需要接受数据的寄存器名。在组合逻辑控制器中可以同时将结果传到两个寄存器中)
- 访问主存有关的微命令
- 读主存微命令
- EMAR(地址使能微命令,有效时MAR到地址总线的三态门打开)
- R(读存储器微命令)
- SMDR(MDR置入微命令,数据经数据总线置入MDR。注意跟CPU内部将数据打入寄存器的区别:CPU内部是同步时钟信号,所以是CP;但是在系统总线上是异步的,所以是S,也就是异步置入的意思)
- SIR(IR置入微命令,取指令时指令从主存经数据总线置入IR。同样是异步置入)
- 写主存微命令:
- EMAR(写主存时候同样需要指明要向主存的什么位置写)
- W(写存储器微命令)
- 时序切换微命令
- 时钟周期(第二级时序):
- 时钟周期切换:CPT(不论有没有进行工作周期的切换,结束一个时钟周期的时候需要进行时钟周期的切换)
- 时钟周期计数
- 工作周期未结束(也就是下一个时钟周期还在当前工作周期内的时候):T+1,时钟周期计数
- 工作周期结束(下一个时钟周期已经在下一个工作周期内了):不需要T+1,计数清0(并没有显示地写出将T清零。这里认为工作周期切换会自动将计数器清零)
- 工作周期切换(第一级时序)切换(注意要先向对应的工作周期状态寄存器写1,此时是给一个电平信号;然后再通过同步信号通过上升沿或者下降沿将1打入触发器转到下一个工作周期,此时给的是一个脉冲信号。)
- 工作周期切换的微命令
- 1->ST(电平型),CPST(脉冲型):进入源周期
- 1->DT(电平型),CPDT(脉冲型):进入目的周期
- 1->ET(电平型),CPET(脉冲型):进入执行周期
- 1->FT(电平型),CPFT(脉冲型):进入取指周期
- 各指令各工作周期的指令流程及操作时间表
- 取指周期 FT(所有指令的取值周期都是相同的)
- 进入FT的方式和条件
- 由S端异步置入(优先级更高,相当于一个与非门基本RS触发器):
- 上电初始化
- 复位初始化
- 运算过程中同步打入FT(由D端打入):
- 程序正常执行(没有DMA请求和中断请求),应进入FT
- DMA周期执行后(没有中断请求,因为DMA的优先级比外部中断更高),应进入FT
- IT周期执行后,应进入FT
- 取指流程(也就是指令流程)
- FT0:M→IR ,PC+1→PC(两步操作可以在一个时钟周期内同时完成,因为数据的传输线路没有重合,前一步是走DB的,但是后一步是走CPU内总线的。所有的指令的取值周期都是一样的,并且只有一个时钟周期)
- 操作时间表(也就是微命令序列)
- EMAR,R,SIR,(对应M→IR)PC→A,S3¯S2S1S0¯MC0(可以简写为A+1,也就是说这些SC啥的都不用背),DM ,CPPC,(对应PC+1)CPT(时钟周期切换)。后续还需要跟上工作周期切换的微命令(对于具体的指令,后面的条件可以不写):
- 传送类指令(下面的指令流程都可以当例题做。注意写操作时间表的时候不要漏了时序切换的微命令)
- ST、DT、ET各工作周期的指令流程及微命令序列与操作数寻址方式有关
- ST周期(这里仅以源周期为例,传送类指令的目的周期只需要将目的地址送到MAR即可):
- (R)寄存器间址
- 如下图:
- (R)自减型寄存器间址
- 如下图:
- (R)+立即/自增型寄存器间址(立即寻址相当于指定Ri为PC寄存器,也就是说,模型机的立即数是存储在当前指令的下一个单元的)
- @(R)+直接/自增型双间址
- X(R)变址/相对寻址
- 综上,传送类指令(实际上所有的源周期都是这样的,因为都是把源操作数取出来放在暂存器C)源周期的指令流程如下(源周期所有的数都是送到暂存器C):
- DT周期:传送类指令目的周期只需要根据寻址方式得到目的地址送MAR
- 传送类指令目的周期的指令流程如下
- ET周期:
- 传送类指令执行周期的指令流程如下(实际上就是数据转移):
- 传送类指令例题
- 如下:
- 双操作数指令:跟传送类指令唯一的区别就是目的周期需要取目的操作数送暂存器D(注意这个时候目的操作数的地址还是在MAR内的,所以这个时候将结果存入主存就可以将结果存到目的地址),并且在执行周期的具体操作不太相同
- 执行周期的指令流程如下:
- 双操作数指令例题:
- 如下:
- 单操作数指令(在模型机中认为这个单操作数是目的操作数,所以单操作数指令是没有源周期的)
- 单操作数的指令流程
- 如下(单操作数指令也需要将目的操作数取出放到暂存器D):
- 单操作数指令例题
- 如下(取反的符号是上面加一根杠,也就是逻辑反):
- 转移/返回指令(共用操作码)
- JMP(跳转指令):执行周期(ET)获取转移地址(转移地址由寄存器或者立即数给出,也就是非PC型和PC型)
- 跳转指令有以下两种情况:
- JP:转移条件满足,转移
- 转移的情况又要分为以下两种:
- PC型:转移地址在当前指令下一单元(也就是由立即数给出转移地址)
- ¯PC型:转移地址不在当前指令下一单元(也就是由寄存器给出转移地址)
- NJP:转移条件不满足,不转移,顺序执行(这个时候如果是PC型跳转的话下一个单元是转移地址,所以PC还需要加一)
- RST(返回指令):执行周期获取返回地址(转移地址由SP寄存器给出,所以RST就相当于是JMP指令指定寄存器为SP)
- 转移/返回指令的指令流程如下:
- 转移/返回指令的例题
- 如下:
- 转子指令JSR(相当于跳转指令增加了一步将返回地址存入堆栈,,所以转子指令增加一个源周期用来取跳转地址并且分类跟跳转指令是一样的)
- JSR:转子条件满足
- ST(计算跳转地址是在源周期,并且也是只有是非寄存器寻址的时候才有这个源周期,要和单操作数指令区别开):入口地址->C (非R寻址)。这里是源周期而不是目的周期,是因为转子指令并不是一种单操作数指令,他提供的地址码中的数并不是用来操作的,而是用来提供地址信息的
- ET:返回地址压栈,然后将入口地址送PC、MAR
- NJSR:转子条件不满足,顺序执行
- PC型:需要跳过跳转地址
- ¯PC型:顺序执行
- 转子指令的例题如下
工作周期切换微命令,对一条具体指令,只有一个条件为真(也就是说需要转向的工作周期是固定的),只产生其中一个微命令
注意:所有在当前工作周期末尾的时钟周期的CPT都是在工作周期转换之后
注意执行周期执行完具体的指令操作之后,还需要准备下一条指令(也就是将PC送MAR,所以下一个取值周期可以直接从主存中读指令)
注意,跳转指令中虽然给出了一个操作数,但是并没有源周期或者目的周期,因为这个操作数并不是真正的操作数,而只是单纯的提供返回地址。JP情况下的PC型跳转(也就是立即数提供跳转地址)已经包含在自增型寄存器间址里面了。SKP指令就是跳过下一条指令,所以跟NJP的PC型是一样的
这里都是直接将跳转地址直接送PC和MAR了(组合逻辑控制器才能这样将一个值同时打到多个寄存器内)
这里最后一个相对寻址(PC提供基址,下一个单元提供形式地址)取形式地址之后不需要自增,原因如下:
因为指令本身的含义应该是期待PC是跳转指令的下一条指令的地址,所以PC不需要增加(想想相对寻址的题,PC就是下一条指令的地址)。如果为了跳过形式地址而将PC加一的话,PC就变成跳转指令的下两条指令的地址了
- 指令流程和操作时间表小结
- 指令流程小结
- 一条指令执行过程中,安排哪些机器周期(第一级时序),每个机器周期安排多少时钟周期(节拍)(第二级时序),与操作数寻址方式有关
- 每个时钟周期内(所以指令流程(微指令)对应的是时钟周期)具体操作是什么(寄存器传送级)
- 设计原则:不同寻址方式下,相同时序下(也就是在同一个工作周期的同一个时钟周期)的操作尽量相同(如将所有源周期的寄存器自增(所以是一个指令流程)都安排在第二个时钟周期),以便化简微命令时间条件,简化硬件设计(也就是后面的微命令的综合化简)
- 微命令(操作时间表就是微命令序列)小结
- 数据通路相关微命令:内部数据通路、访存操作
- 时序切换微命令:
- 每一时钟周期(节拍)结束时都发CPT,进行时钟周期切换
- 一个时钟周期结束时
- 若当前工作周期未结束,进行节拍计数:T+1
- 若当前工作周期结束,进行工作周期切换(如1->FT、CPFT等)
微命令综合与化简
实际上就是归纳所有指令执行过程所需微命令,列出微命令与输入信号之间的逻辑关系,并综合化简(就是提取所有指令的公共部分,然后使用同一套组合逻辑电路,这样就使得组合逻辑控制器的电路简化了)
示例如下:
上图就是找出了所有指令中的读写命令,然后如果当前指令处在后面的时序的话,就调用同一套控制读写命令的组合逻辑电路
- 优化思路
- 提取公共逻辑变量(就是去找到每一个指令中的共同部分),减少引线和元件数目,降低电路冗余;
- 减少逻辑门级数(就是逻辑门的嵌套深度),进而就能减少时延
- 电路实现
- 可直接用基本门电路(与、或、非)、复合门电路实现(与非、或非等),构成控制器的主要实体;
- 可用PLA(可编程逻辑阵列)实现
组合逻辑控制方式的优缺点
- 优点:控制信号产生速度快(因为直接是电信号)
- 缺点:
- 设计不规整:实现各微命令的门电路所需逻辑形态不规整(每个指令都需要不同的逻辑电路),核心电路繁琐,设计效率较低。
- 不易修改或扩展:设计结果用印制电路板固定下来以后,不便于修改或进行功能扩展。(也就是硬连逻辑不容易修改)
组合逻辑控制器小结
- 组合逻辑控制器:直接由硬连逻辑产生微命令
- 三级时序:工作周期、时钟周期(节拍)和工作脉冲
- 指令流程:每个时钟周期的具体操作(寄存器传送级,重点是传送类、双操作数指令)
- 操作时间表:每一步操作的微命令序列,及各微命令的产生条件
- 组合逻辑控制器的优缺点
模型机的微程序控制器
基本概念
- 微操作:计算机工作过程电路实现的最基本的操作,如:打开/关闭门电路等
- 微命令:构成控制信号序列的最小单位,又称微信号,用于控制微操作(对应组合逻辑控制器中的操作时间表)
- 微指令:执行一步操作所需的微命令序列,按一定编码方式构成微指令(对应组合逻辑控制器中的指令流程)
- 微程序:一系列相关微指令的有序集合称为微程序,用来解释执行一条机器指令
- 上述四个概念的对应关系如下:
也就是从上到下逐渐“变大”
- 微周期:读取一条微指令并执行相应的一步操作所需的时间,称为一个微指令周期(简称微周期),通常是一个时钟周期(因为在组合逻辑控制器中要一条微指令的执行就对应了一个时钟周期)
- 微程序控制基本思想
- 将控制器所需的微命令,以代码(微码)形式编成微指令,存入控制存储器(CM,CPU内,只读)——将存储逻辑引入CPU
- 将各种机器指令的操作分解为若干微操作序列,并编制一套完整的微程序——将程序技术引入CPU的构成级
微程序控制器组成
- 微程序控制器的硬件组成
- 如下图:
- 控制存储器CM:存放微程序,每一单元存放一条微指令(根据下面的知识可以知道是把一个微命令序列编程了一串二进制数,所以需要经过译码器才能产生微命令序列)。
- 微指令寄存器μIR(记忆:想想CPU中的指令寄存器IR):用于存放从CM读取的微指令
- 一条微指令由以下两个部分组成:
- 微操作控制字段(微命令字段):产生微命令的依据(用于控制一步操作);
- 顺序控制字段(微地址字段):产生后继微地址的依据(并不是给出下一条微指令的直接地址),用以控制微程序的连续执行。
- 微地址形成电路:生成下一条微指令的地址
- 微地址寄存器μAR(adress register):存放下一条微指令地址
微程序控制器也是一种控制器,所以输入应该是:IR(当前指令)、PSW(当前程序状态)、时序系统、IO请求(中断或者DMA)。这里是少写了一点
- 微程序控制器的工作过程:执行指令时,从控制存储器中找到相应的微程序段;从第一条微指令开始,逐条取出微指令,送微指令寄存器,译码后产生一步操作所需微命令(实际上根据上面的微程序控制器的基本硬件框图就能得出)
- 微程序控制器的时序系统(要跟组合逻辑控制器区分开):同步控制(CPU内普遍采用同步控制),用统一微指令周期(也就是CPU的时钟周期)控制各条微指令执行
- 微程序控制器有两级时序(少了工作周期,或者说机器周期)
- µI周期:对应组合逻辑控制器中的时钟周期(节拍)
- 工作脉冲:与组合逻辑控制器中的工作脉冲相同
微程序控制器的时序图如下:
首先先取出指令(脉冲信号),然后进行具体的指令操作(电平信号)。微指令执行结束之后获取下一条微指令的地址(脉冲信号。这里还将结果打入了目的地,想想组合逻辑控制器中的打入结果操作,那个就是在每一个时钟周期最后的工作脉冲的上升沿打入的),然后根据地址在CM中寻址(电平信号),最后在CM中找到下一条微指令的存储空间,准备在下一个时钟周期(微周期)开始的时候将其打入IR
模型机微指令格式
- 微指令的设计原则:按数据通路操作分段,同类操作中互斥的微命令(比如说多路选择器的输入选择。这个时候同类操作就是指多路选择器的输入选择,互斥操作就是指选择的输入是哪一个寄存器)在同一字段(类似机器指令的操作码的方式码)
- 如下图(最后面的SC就是用于产生后续微指令地址的部分):
下面以一个具体的指令为例:
由于取指流程是所有指令都有的,所以是放在CM的第一个位置。从取值周期的微指令中就可以理解为什么这两个指令流程可以同时进行了,因为他们互不干扰(在组合逻辑控制器中是因为没有占用相同的数据通路;而在微程序控制器中是因为没有占用同一个字段)
CM中的第二条微指令就是根据当前的机器指令跳转到对应的微程序了
微程序控制方式的优缺点
- 优点(也就是组合逻辑控制器的缺点)
- 设计规整,设计效率高
- 易于修改、扩展指令系统功能(只需要修改CM内的微指令即可,不用修改硬连逻辑)
- 系列机(就可以在原有的指令基础上进行扩展)的性价比高
- 缺点(组合逻辑控制器的优点)
- 速度慢:访存频繁(多次访问CM),转移较多(每一条指令都要跳转到对应的微程序上,而且并不是说一段微程序就是连续的,微程序控制器仍然进行了微指令的综合化简,提取了公共的部分。所以执行一段微程序的时候可能需要跳转很多次)
- 执行效率不高:未充分发挥数据通路本身具有的并行能力(使用组合逻辑控制器的时候就可以将结果同时打入多个寄存器,但是在使用微程序控制器的时候就认为这是一个同类操作中互斥的微命令,就无法同时将结果打入多个寄存器了)
微程序控制器小结
- 基本概念:微命令、微指令、微程序,及相互关系(从小到大)
- 机器指令与微程序的对应关系(一个机器指令对应一个微程序)
- 微程序控制器的基本组成(想想微程序控制器的框图)
- 微程序控制的工作过程(一样想想微程序控制器的框图,类比CPU的取指译码执行回写即可)
- 作者:Noah
- 链接:https://imnoah.top/article/CptStructure/Chapter3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。