文章目录
- 第五章 中央处理器
-
- 知识点回顾
- 中央处理器--CPU功能和基本结构
- 中央处理器-指令执行过程
- 中央处理器-数据通路的功能 单总线结构
- 中央处理器-数据通路 专用通路结构
- 设计硬布线控制器
- 微程序控制器的基本原理
- 设计微指令
- 设计微程序控制单元
- 中央处理器指令本概念性能指标
- 中央处理器-指令流水线影响因素分类
- 五段指令流水线
- 第六章 总线
-
- 总线概述
- 总线性能指标
- 总线仲裁
- 总线操作及定时
- 总线标准
第五章 中央处理器
知识点回顾
现代计算机结构
- CPU主要由运算器和控制器组成
运算器的基本组成 控制器的基本组成 计算机工作过程(经典图)
- 控制单前要执行的指令,控制单元完成下一步要完成的小步骤
问题思考
- 控制单元控制数据流,CU如何确定每一步如何行动
中央处理器–CPU功能和基本结构
以前学的知识为基础CPU补充功能和基本结构
CPU的功能
- 操作控制:每个指令的功能需要各种微操作信号的组合
- 时间控制:每个微操作都有相应的控制信号,需要按一定的顺序逐一发出,以确保微操作按顺序执行
- 中断处理:CPU正常情况下,如遇紧急情况,如单击鼠标操作,按顺序逐一执行指令,此时,CPU暂停正在执行的程序,记录执行的指令,然后执行中断处理程序。中断处理程序也由一系列指令组成(以下是处理鼠标单击的程序)。在执行中断处理程序后,返回原始程序,继续执行指令;如果没有中断设计,则意味着CPU只有在处理完当前程序后,才能执行另一个程度,中间点击鼠标操作不会有任何反应
操作员和控制器的功能
- 分析说明:操作代码翻译,值得读取操作代码,得到相应的操作;读取操作数量的有效地址,是上一章根据形式地址获得真实操作数量的存储地址
- 执行指令:每个指令的执行需要多个微操作。不同的微操作需要不同的控制信号控制。执行指令的过程是形成操作信号控制序列的过程,然后逐一发送这些操作信号来控制后续操作
- 中断处理:每执行完一条指令,CPU检查是否有中断信号需要处理,控制器需要对总线和输入输出设备做出响应;除外部操作外,内部异常也会导致中断处理,如0
运算器的基本结构
- 为了保存即将到来的数据,我们准备了通用寄存器组,如AX,BX等等,图中的AH和AL其实是AX高低部分(x86架构CPU对于通用寄存器的命名规则),跟随R0 R1表示都一样
- SP是堆栈寄存器,保存堆栈指针,指向堆栈顶部,有些教材会SP它被归类为通用寄存器,有些是单独计算的特殊寄存器
运算器的基本结构–特殊数据通路方式
- 每个通用寄存器都应该有两组传输数据的线路取决于实际情况),一组传输数据A,一个传给B,
- 特殊数据通路方式:图中就是这样,这意味着随着寄存器的增加,电路设计越来越复杂,工艺成本也越来越高
- ALU如何连接多个寄存器,如何控制哪个寄存器输入信号
- 根据控制信号选择多路选择器输出
- 使用三态门,每个三态门有三个接口、输入、输出和控制接口。只有控制接口接收信号,才能导致三态门的输入和输出。在图中,我们命名三态门R0out
- 特殊数据通路方式:基本不会发生数据冲突,但结构复杂,硬件量大,难以实现
运算器的基本结构–CPU内部单总线模式
- 所有寄存器都连接到内部总线,可以将信号输出到总线,也可以从内部总线接收信号
- 用三态门控制(蓝色)使用三态门控制(蓝色),数据从总线进入寄存器也由输入控制信号控制(绿色)
- 结构加单容易实现,但数据传输存在冲突,性能低
- ALU如果两个数据同时传输到接收数据的内部总线ALU的A和B,也会在总线上产生冲突
- 您可以在a的前面添加一个临时存储寄存器。首先,通过总线将给a的数据放入临时存储寄存器中,然后将另一个存储器导通并将数据输出到B端ALU可以同时从AB读取数据
- 从主存读取的数据也会放入临时存储器,而不是通用存储器,因为它会破坏原始内容
- ALU计算结果也将通过总线保存到通用寄存器中。ALU因此,接收输入可能不稳定,会导致计算结果错误ALU输出位置加临时存储器,连接三态门,ALU计算结果首先保存临时存储器,等待ALU输入信号稳定,正确的计算结果保存在临时存储器中,三态门打开,将结果通过内部总线保存到对应的通用寄存器
- 为实现某些功能,ALU输出端连接的临时存储器也可以增加一些功能,增加移位功能和累加功能,或者单独准备一个存储器,例如ACC用于存储一些中间结果
- 还有程序状态字寄存器PSW,前一章介绍了(减法操作),CPU在进行微操作之前,除了判断当前指令的操作代码是什么,还要了解PSW状态信息,然后决定下一步操作
- 用于控制乘除操作步数的计数器 控制器的基本结构
- 控制器用于取指令、分析指令、执行指令
- 程序计数器:PC,在主存中指明下一个指令的地址,PC一些计算机可以通过加法自我增加来实现
- 指令寄存器:IR,保存正在执行的指令,包括操作代码Ad地址码指示操作数的地址,需要输出到内部总线,操作码OP向控制器提供特定的操作信号,即微操作信号发生器
- 微操作根据IR指令内容,PSW状态信息和时间序列系统产生所需的各种控制信号指令对应许多控制信号,需要有序执行
- 时间序列系统产生时间序列信号,为微操作产生节拍。微操作信号发生器根据节拍有序有节奏地产生控制信号
- 图中的绿色表示寄存器的输入信号,蓝色表示寄存器的输出信号,微操作信号发生器控制每个寄存器的输入和输出是否有效
- MAR地址寄存器,接收总线的地址信息,并将其交给地址总线。内存通过外部地址总线的地址信息找到相应的存储单元。主存在通过外部数据总线将数据交给MDR数据寄存器
- 图中寄存器的输入输出控制,黄色加E,表示信号控制和外部总线的输入输出
- CPU内部总线指CPU内部公共道路用于控制各部件之间的数据传输,外部总线是指CPU公共部分与其他部件之间的数据传输
CPU的基本结构
- 用户可以看到一些寄存器,即用户可以通过汇编语言进行修改,并在图中用黄色标记
- 哪些寄存器对用户透明,哪些不透明,也是选择题高频考点
- 本章重点讨论CU
知识点小结
中央处理器–指令执行过程
指令周期
- CPU从主存中取出并执行指令的全部时间
- 指令周期可分为指令周期和执行周期
- 在某些地方,分析指令的过程被单独视为一部分。在这里,它被划分为指取周期。由于指取需要访问和存储,下一个分析指令将非常快,因此它被划分为指取周期
- 执行指令过程,有些访存,有些不访存,因此不同的指令对应的执行周期可能相差很大
- 这里的值周期和执行周期是两个机器周期,指令周期通常有几个机器周期,也称为CPU周期
- 一个机器周期包含几个时钟周期(节拍,T周期,CPU时钟周期)他是CPU最基本的操作单位
- 以上名称容易混淆,注意区分
- 图中CLK方波是节拍,CPU主频是指一秒钟发出多少节拍
- 我们之前说过,执行指令的过程需要几个微操作来完成,一个微操作对应于一个节拍
- 如果指令中所有机器周期对应的节拍相同,则为固定机器周期CPU;事实上,一个指令周期中的机器周期是不同的,即机器周期不长CPU
- 不同的指令包含的机器周期数量可能不同,每个机器周期内的节拍数也可以不同
指令周期实际举例
- 空指令只取指令,然后什么也不做,继续执行下一条指令
- 乘法指令在执行指令期间,需要多次加法或移位
- 间接寻址的指令,取指得到主存地址,还要根据主存中保存的地址信息,再进行访存得到操作数,这就是间址周期,
- 带有终端指令的中断周期,正常每一条指令快要结束时都会留一段时间作为中断周期,除非CPU关中断
- 因此不同的指令,执行过程是不同的
指令周期流程
- 如何区分CPU处在哪一个阶段?使用触发器用来标识当前CPU处在哪个机器周期上
- 四个阶段都可能访存,只是访存的目的不同
指令周期的数据流–取指周期
- 主存可以提供两个接口,分别控制读和写,比如,R和W
- 注意这里的PC+1带双引号
- 取指周期完成时,主存中保存的指令经由数据总线,MDR,保存到IR中
指令周期的数据流–间址周期
- 如果当前指令采用间接寻址的方式,还要有间址周期
- 在间址周期之前,从主存读取到指令保存在MDR中,又传递到IR中,因此第一步中,既可以从IR中取出地址也可以从MDR中取出地址,再送入到MAR中,通过地址总线,传送给主存
- CU通过控制总线命令主存执行读操作,读书的数据经由数据总线保存到MDR中,此时MDR中存放的是操作数的有效地址EA
- 可以将MDR中的EA直接送给MAR中,也可以将EA拼接到IR的形式地址上,再执行IR的指令
- 将MAR所指的主存中的数据经由数据总线送入到MDR,此时MDR保存的就是操作数
指令周期的数据流–执行周期
- 不同的指令执行周期不同,本节先不做讨论
指令周期的数据流–中断周期
- 中断:当前程序有多条指令,执行完一条指令后,如果检测到中断程序,暂停当前程序,转而去执行中断处理程序的指令,需要保存断点
- 中断处理程序可能也包含很多条指令,执行完中断处理程序,再回到之前的程序,继续往下执行指令
- 一般用堆栈保存断点,程序运行时,操作系统会给进程开辟主存空间保存当前进程的运行堆栈,堆栈里保存的就是指令地址,SP指向当前这个堆栈的栈顶元素
- 实际的情况中,栈顶一般在低地址方向
- 第一步,执行中断,SP-1,SP中的地址送给MAR,因为接下来需要将PC保存的指令地址写入堆栈,所以需要把新的堆栈顶的地址给MAR;SP-1并传给MAR是CU控制的,有的教材也会写成CU直接指向MAR
- 第二步,CU通过控制总线,对主存发出写信号,此时MAR也已经指明了需要写的地址
- 第三步,PC数据复制到MDR,通过数据总线,写入到主存
- 以上操作,实现当前程序的指令的PC值压入了栈顶,完成保存断点
- 第四步,CU将PC的值修改为中断处理程序的第一条指令的地址,这里的向量地址第六章再解释
- 当中断处理程序执行结束,SP又会指向栈顶,栈顶元素就是上一个程序保存的指令地址,将这个元素出栈,传给PC,实现了对上一个程序的恢复
指令执行方案
- 当我们需要执行多条指令时有哪些执行方案
- 单指令周期:不同的指令执行不同,但是我们将他们统一成相同的周期,短周期的指令执行完也继续等待周期结束;可以使控制电路设计简单,会降低整个系统的运行速度,而且只能串行执行,即一条接着一条的执行
- 多指令周期:还是各条指令串行执行,不同的指令设置不同的时钟周期数,减少无用的等待时间,需要更复杂的电路设计
- 流水线方案:详细情况最后一章讲解,这里简单了解
- 一条指令在不同的阶段使用部件不同,当第一条指令完成第一阶段,进入第二阶段,可以执行其他指令进入到第一阶段,以此类推
- 这样尽量使每个部件都有处在不同阶段的指令使用,提高利用效率,使得指令之间并行执行
知识点小结
中央处理器–数据通路的功能 单总线结构
指令周期的数据流
- 一条指令包含不同的阶段,每个阶段的数据流走向不相同
- 总体来书,数据的流动有三类,寄存器之间,寄存器与主存之间,寄存器与ALU之间
数据通路
- 对于各种寄存器来说,控制信号有两种,控制输入信号,控制输出信号,
- 图中所有的控制信号in/out都是由微操作发生器发出的,微操作发生器发出不一样的控制信号,使得各个寄存器之间数据流动,为了不让线太乱,省略了in/out和微操作发生器之间的连线
- 数据通路的基本结构
- CPU内部单总线方式,CPU内部多总线方式,专用数据通路方式
- 单总线意味着同一时刻只能两个部件之间独占总线,因此为了解决这个问题,有些CPU设计为内部多总线方式
- 专用数据通路方式,就是只要两个寄存器之间有数据流动就在这两个部件之间建立专门的数据通路
- 本小节介绍以CPU内部单总线的方式如何实现信息流动
CPU内部单总线方式
- 内部总线和系统总线
- 图中bus表示总线,解题时,回答数据的流动方向,还要标明哪些控制信号是有效的,也有些教材把一些数据流动的步骤合二为一,但我们也要注明哪些控制信号有效
- 微操作信号发生器如何控制数据流动,归根到底为,输出控制信号,让需要输入信号的部件和需要输出信号的部件有效即可;
- 所以解决问题的关键是,清楚的理解,一条指令的各个阶段,各个微操作的数据走向,知道了数据应该如何走,就知道该给出什么控制信号
寄存器之间的数据传送 主存与CPU之间的数据传送
- 图中从MAR指向地址线的地方画的不全,应该有一根控制总线,CU通过控制总线给主存发出读信号,再给MAR发出一个out的控制信号,MAR左侧还应该有一个三态门作为MAR的输出控制;其他寄存器同理自行不全一下
- 图中MDR既可以由外部的数据总线流入,也可以由内部总线流入数据,这其实由不同的控制信号控制,图中只给了一个内部的MDRin不严谨,应该再加一个MDRinE表示从外部总线流入数据的控制信号
- 实际的考试中不会出现这样的失误
- 答题时不要忘掉CU向主存发出的读写信号,这里时1→R
执行算术逻辑运算
- 执行加法指令,其中一个操作数已经存放在ACC累加寄存器中了
- 根据IR中的指令执行加法操作,需要根据指令中的操作数地址到主存进行取数
- 因此需要将操作数地址传给MAR,这个操作数地址可以从IR传,也可以由MDR传,因为上一阶段的取指令,MDR中还保存着这个加法操作的指令,指令中就包含操作数地址
- 从注主存中读取操作数保存到MDR,这时已经将旧的数据(加法指令)覆盖了
- ALU无法同时从内部总线获取两个寄存器送来的输入信号,因此MDR数据先通过内部总线进入暂存寄存器Y,累加寄存器ACC保存的另一个操作通过内部总线传给ALU,这样ALU同时接收两个端口信号,实现加法
- 需要注意的是暂存寄存器Y到ALU,ALU到暂存寄存器Z(或移位寄存器等等),使用的是专用数据通路,不占内部总线
- 如果CPU内部是双总线或多总线,就可以不设置暂存寄存器,两个操作直接从两个总线传给ALU
- 单总线可以降低成本,多总线可以提高数据传送效率,考试一般考单总线
- 每个微操作至少消耗一个时钟周期,每个时钟周期CPU释放一组控制信号,比如一个寄存器输入和另一个寄存器输出
CPU内部单总线方式–例题
- 主存的MemR表示读操作,MemW表示主存的写操作
- 正确理解这个加法指令,最右侧的是源操作数R1,说明R1寄存器里保存的就是操作数本身,中间的是目的操作数,写成(R0)说明,R0寄存器中保存的是操作数的地址,需要进行一次间接寻址,
- 这两个数的加法操作结果还要放回目的操作数的位置,即R0中保存的主存地址的位置
- 按照指令周期中的各个阶段来分析答题
- 答题时,如果某一个微操作的某些控制信号题中没有注明,可以不写
- 关于间址周期的理解,不同的教材有不同的理解,有的理解为,把间接地址转为有效地址即可,有的理解为,需把间接地址所对应的时机的操作数读入CPU,题中的理解属于后者
- 考试中不会有这种歧义
- 这一部分出过两年答题,题型相对比较固定,熟悉套路就好
知识点小结
- 计组答题高频考点,给指令,让分析微操作,根据微操作给出控制信号
中央处理器–数据通路 专用通路结构
专用数据通路方式
- 在需要建立联系的两个部件之间建立专用的数据通路
- 图中的C表示控制信号
专用数据通路方式–例题
- 题干分析:状态寄存器就是PSW,也叫标志寄存器
- 第一问:能自动+1的一定是PC,PC保存的是指令地址,因此PC直接指向的一定是MAR,能直接指向微操作发生器的一定是指令寄存器IR,能与主存相连的只有MAR和MDR,只有MDR是双向的
- 第二问:本地的重点在于考察数据通路,题干也没给控制信号,因此答题时只写数据通路即可
- 第三问:题中给的是运算器和主存之间的数据通路,实际上ALU不是寄存器没有存储功能,ALU的结果会送到ACC,问的其实是ACC与主存之间存取访问的数据同路;MDR拿到数据,没有直接的通路指向ACC,其实MDR的数据可以直接通过ALU,然后保存在ACC中,只是这个过程ALU不坐任何计算,或者理解为+0;这里的给出的答案,读取的时候假设读取地址已经提前放在MAR中了,同样保存时,也是假设保存地址已经存储在MAR中
- 第456问连在一起理解,从主存地址X取数存在ACC,在从主存地址Y取数,与ACC执行加法,结果保存在ACC,在保存结果到主存地址Z中
- 第四问:这么写,直接给出指令,表明默认指令已经在IR中了,
- 第五问:ACC里的(x)与MDR保存的(y)同时输入到ALU完成加法运算,结果保存ACC,这里ALU没有接暂存寄存器,严格以上已经接一个,等输出稳定,才能把暂存寄存器的值输出
- 第六问:上一步ACC保存的结果传入MDR,再保存到主存地址Z中
知识点小结
- 建立专用数据通路虽然成本更高,但是多个数据通路可以独立执行,降低单总线方式带来的不变,提高执行效率
- 寄存器采用了专用数据通路,意味着寄存器可能会有多个输入,如何选择哪个输入,可以采用多路选择器或者三态门,再通过CU控制哪个通路有效
- 这一部分考题都是给出指令,让我们描述各个阶段的微操作序列,数据流向,已经对应的控制信号,出题相对固定
- 不能只看,一定要动手自己做,才能理解巩固其中的技巧
硬布线控制器的设计
内容回顾
- 每个指令周期有若干个机器周期,每个机器周期有若干个时钟周期,每个时钟周期可以执行一个或多个微命令
- CU每发出一个微命令,就会有对应的微操作,当部件不冲突,通路不冲突是,有些微操作可以并行运行
- 因此一个时钟周期内,可以并行多个微操作
- 图中给出的是定长机器周期的策略,每个机器周期节拍数相同,因此有的机器周期即使执行微操作用不了那么多,也要凑足节拍数
- 本节的以定长机器周期的策略,可以使电路设计更简单
- 已知指令操作码,可以确定所需的机器周期,每个周期的微命令,我们再对每个机器周期的微命令进行合理的编排,分到对应的节拍上,这样根据节拍信号,机器状态信号(FE IND EX INT),可以确定当前节拍应该发出哪些微命令
硬布线控制器
- CU控制单元采用硬布线的方式设计,称为硬布线控制器
- 图中的不同颜色,就代表了控制单元获取各个信息的来源
- 节拍发生器伸出m+1根线,对应了一个机器周期内m+1个节拍,CU可以根据哪根线发来的节拍,判断当前处在机器周期内的哪个节拍上,由于是定长机器周期,每个机器周期的节拍数相同
- 通过图中的几个条件,设计出逻辑表达式,可以确保只有在特定的条件下CU才会产生特定的微操作信号,即相应的in/out控制信号,有了逻辑表达式,也就得到了对应的电路
微操作命令逻辑表达式
- 考试不会考这么复杂的,这里举例是为了理解原理,这里的乘法和加法对应了逻辑表达式中的与和或
- 这是一个取指的指令,从MAR中保存的主存地址中取出数据,保存到MDR中
- 这个表达式由三部分组成,意思就是这个微操作命令可能在三种情况下被使用
- 分别是,FE阶段的T1节拍,IND阶段的T1节拍,EX阶段的T1节拍
- 括号内就是对应的具体指令,这个指令就是IR读出操作码经过译码器得出指令信号,即图中蓝色指令,就是由上一个图中的操作码译码器发出的,不同的指令对应不同的译码器输出线
- 接下来讨论如何得到这样的逻辑表达式
硬布线控制器的设计
- 考试不考具体设计,但是理解这个设计过程,有助于理解工作原理
步骤一:分析每个阶段的微操作序列
- 这个过程需要把所有的指令都分析一遍,因此一个指令集的指令越多,这一阶段越长
- 取指周期和间址周期,所有的指令其实都一样,而执行周期,每个指令各不相同,需要各个指令单独分析
- 这些微操作,有些是可以并行运行的,这里的ID是指令译码器
- 图中标红的是取数的微操作,可以看出,取数在这三个阶段都有可能会使用
步骤二:选择CPU的控制方式
- 这里已经明确
步骤三:安排微操作时序
- 安排微操作时序需要遵循以下原则
- 原则一,比如只有PC将地址传给MAR,才能有后续从主存指定的地址中取数,并保存到MDR
- 原则二,被控对象不同的微操作,说明他们在并行执行时是不会相互影响的
- 原则三,结合实际举例
- 图中给出的是取指周期对应的微命令,和按照安排原则进行编排后的效果
取指周期
- 4和5虽然有依赖关系,4和5对应的部件都是CPU内部的部件,他们都在CPU内部实现,操作时间很短,也可以安排在同一个节拍内;数据可以快速的从MDR到IR,IR到ID
- 3和4也有前后依赖关系,是否可以安排在一个节拍内?不可以,3操作从主存读数据,耗时较长,必须用一个节拍保证充足的时间读到数据,否则可能会来不及给4执行
间址周期 执行周期
- 如果一个微操作的时间很短,在不违反顺序的情况,尽量安排在一个机器周期的末尾阶段执行,如CLA放在了T2上
- 这里不用纠结每条指令的具体含义,但是要理解每个指令必须清楚的安排在具体的哪个节拍上执行
- 图中列出非访存指令和访存指令的安排情况,便于对比理解
- 需要注意的是,访存指令有可能导致后续进入到间址周期
步骤四:电路设计
- 电路设计又分为三个步骤
- 王道书5.1图有所有指令操作时间表
- 写出微操作命令的最简表达式,简化有助于电路设计更简洁
- 画出逻辑图
组合逻辑设计–列出操作时间表
- 图中标1表示这个指令需要对应的微操作,比如,ADD在取指阶段的T0周期,需要PC→MAR和1→R这两个微操作
- 状态条件的含义,描述间接址特征,因为取值结束时需要判断是否要进入到间址周期
- 如果是间接寻址I,1→IDN,接下来进入到间接寻址阶段
- 如果没有间接寻址特征位I,则1→EX,表示进入到执行阶段
- 非访存指令不涉及访存,一定会直接进入到执行指令阶段,所以没有给1;访存指令和跳转指令是有可能进入到间址阶段的,所以给1;最后的进入到执行指令阶段1→EX,是表中所有指令都有可能进入到的,因此都给1
取指阶段 间址阶段
- 同上,非访存指令不会进入到间址阶段,其他指令有可能进入到间址阶段
- 状态条件,由于存在多级间接寻址,只有个当IND为0时,表名完成了最后一级的间接寻址,如果IND为1,还要进入下一个间址阶段;注意,刚进入到间址阶段的时候IND是为1的
执行阶段
- 注意,这里是把每个节拍内所有可能用的微操作放在了一起,并不是这一个节拍要执行这么多的微操作
- 指令太多,图中只列出了部分
- 中断周期的指令不再列举
微操作信号综合
- 逐一分析每条微操作都在哪些情况下被使用,比如这里的M(MAR)→MDR
- 得出当前微操作命令的逻辑表达式,即这个微操作在什么周期,什么节拍,哪些指令的情况下被用到
- 得到的逻辑表达式可进一步化简
画出逻辑图 硬布线控制器的设计小结
- 硬布线控制器适合RISC精简指令集,因为RISC涉及的指令条数不会特别多
- CISC涉及的指令很多,如果单纯的用硬布线设计,会非常困难
- 硬布线控制器如果扩充指令,就要电路大改,很多设计的电路都要作废,扩充指令困哪
- 硬件执行速度会很快,
微程序控制器的基本原理
微程序的考察频率比硬布线更高一些,甚至可能出大题
微程序控制器的设计思路
- 把一个时序之内,可以同时进行的微操作用一个微指令来指明,比如微指令a会导致微操作1和2的执行
- 由整个一系列微指令构成了一个微程序,一个微程序就对应一个指令
- 不同的指令对应的微指令序列不同
- 指令是程序执行步骤的描述,微指令是对指令执行步骤的描述
- CPU出厂前,将所有指令的微程序存入控制器存储器中
- 注意区分概念,微命令就是微操作,微指令中可能包含多个微命令
- 微指令基本格式:操作控制和顺序控制
- 操作控制指明这个微指令对应哪些微操作
- 顺序控制指明下一条微指令的地址
微程序控制器的基本结构
- 类比从主存中读取指令执行指令的过程,理解微指令的读取和执行过程
- 控制存储器CM的引文缩写出现频率很高
- CM采用ROM的好处,读取比RAM更快,非易失性,断电不丢失数据
- 每个指令对应的微指令序列由CPU厂商设计并写入CM
- CMAR又叫μPC,微地址寄存器,功能相当于PC和MAR的结合体,接收微地址形成部件送来的微指令的地址,为CM读取微指令做准备
- CMAR中的地址码经过地址译码器转为存储单元的控制信号,因为CM根据这个控制信号读取对应的地址的微指令序列
- 从CM中读出的微指令先存入CMDR微指令寄存器中,CMDR又叫μIR,CMDR位数与微指令字长相同
- CU外面的IR得到机器指令后,微地址形成部件根据IR中的操作码确定所对应的微程序的起始地址,
- 顺序逻辑用于控制微指令的执行顺序
- CMDR收到微指令后,下地址传给顺序逻辑,明确下一个微指令的执行地址,操作控制部分发出控制信号,对应具体微操作
微程序控制器的工作原理
- 所有指令的取指周期,间址周期,中断周期对应的微指令序列都是一样,可以共享,他们在CM中分别只用一个微程序保存
- 执行指令阶段,每个指令不同,因此每个指令对应的微程序分别保存在CM中
- 取值周期完成后,下地址指向3,3对应间址周期,有些指令其实不需要间址周期;
- 顺序逻辑根据下地址,指令地址码的寻址特征,判断是否要跳过间址周期
- 如果要跳过间址周期,进入执行周期,微地址形成部件可以将具体执行周期的微程序首地址传给顺序逻辑,相当于从微指令的执行位置从3跳到了某一执行周期的首地址,比如13
- 执行周期结束,如果没有中断周期,又会进入到下一个指令的阶段,跳回0的取指周期首地址
- 间址周期的最后,有转执行周期,含义是可以在顺序逻辑的控制下,直接转到对应的指令的执行周期的首地址,开启执行周期
- 中断周期的转取指周期,就是中断周期结束,会跳回取指周期的起始地址
注意的点
- N条机器指令对应微程序至少n+1,因为包含一个共用的取指周期微程序
- 为什么没有算上间址周期和中断周期,早期的CPU可以不包含这两个周期,选择题高频考点
- 有的选择题中,不认为取指周期的微程序和执行周期的微程序是两个微程序,而是认为他们在逻辑上是一个整体(也包括间址周期,中断周期),因此认为一条指令就对应一个微程序,这种说法也对
- 这又跟绿色的文字产生了冲突,因为绿色认为取指周期对应单独的微程序,改造一下,CM中微程序段的个数至少n+1
知识点小结
微指令的设计
接上节
- CMDR得到微指令后,如何根据操作控制发出对应的控制信号?
- 一个微指令可能对应多个微命令(微操作),一个微命令对应一个输出线(这一根输出线再根据具体情况开分支,结合门电路去控制多个in/out)
微指令的格式
- 相容性微命令:可以并行完成的微命令;互斥性微命令,不能并行完成的微命令
- 格式分类:水平型微指令,垂直型微指令,混合型微指令
- 水平型微指令
- 一条微指令可以定义多个可并行微指令
- 对应的操作控制码比较长,看起来胖胖的,因为需要有能力控制多个微操作的执行
- 纵向看起来比较短
- 垂直型微指令
- 一条微指令只能定义一个微命令,微操作码字段规定具体功能
- 微操作码长度可以略短一些,纵向看瘦瘦的,想要实现同样的功能就要纵向上有更多的微指令
- 混合型微指令(大概了解就好)
- 在垂直型的基础上增加一些不太复杂的并行操作,相当于前两种的综合
- 考试常考水平型和垂直型
水平型微指令编码方式(高频考点)
- 如何用微指令的操作控制位来表示控制信号,尽可能保证速度,尽可能缩短微指令字长
- 直接编码方式:每一位代表一个微操作命令
- 字段直接编码方式:将微指令的控制字段分成若干个段,每个段经过译码后发出控制信号
- 分段遵循原则
- 字段间接编码方式:一个字段经过译码得出信号,与其他字段译码得出的信号,再进行译码得出控制信号,了解就好
- 考试主要考前两种
微指令的地址形成方式
- 1.断定方式:微指令中的下地址字段直接指明了后继微指令的地址,比如0地址的微指令下地址为1
- 2.根据操作码形成:机器指令到IR后,操作码经过微地址形成部件生成微指令地址
- 3.增量计数法:类似于PC+1,CMAR地址也会+1
- 4.分支转移:根据转移方式进行条件判断,转移成功后调到转移地址
- 5.通过测试网络:即顺序逻辑或接收一些标志信息,结合当前指令的信息,决定下一条微指令地址
- 图中标红的断定方式和增量计数器法常考
- 6.有硬件产生微程序入口地址:取指周期和中断周期的微指令是所有微指令共用的,因此可以用专门用硬件记录
知识点小结
微程序控制单元的设计
微程序控制单元设计步骤
- 1.分析每个阶段的微操作序列,与硬布线基本相同
- 最后一步不同,硬布线方式IR得到指令后,将操作码传给ID操作码译码器;微程序方式IR得到指令后,将操作码传给微地址形成部件
2.写出对应机器指令的微操作命令即节拍安排
- 以取指周期为例,对微操作序列进行编排,补充
- 还需要考虑如何读出微指令,以及如何转入下一个机器周期
- 这里我们简化流程,不考虑间址周期和中断周期,因此取指周期结束直接进入到执行周期
- 取指周期内,除了最后一个微指令,其他微指令执行完,都要再安排一个节拍读取下一个微指令地址(第一个微指令地址由硬件提供了)
- 取指周期最后一个微指令结束,还要再有一个节拍用于微地址形成部件将执行周期的第一个微指令地址传给CMAR
- 王道书里,将IR到微地址形成部件,微地址形成部件到CMAR都归到了最后一个节拍,也对
- 显然微程序控制器速度比硬布线控制器速度更慢,因为节拍更多 设计步骤
- 考试为了简化,通常取指周期结束,直接进入执行周期
- 取指周期的最后一个节拍指明了执行周期的第一条微指令地址
- 执行周期除了最后一个微指令,其余微指令执行结束也要有一个节拍负责将下一条微指令传入MAR
- 执行周期最后一个微指令结束,需要一个节拍指明取指周期的第一条指令首地址,进入下一个指令周期
3.确定微指令格式
- 上小节已经详细探讨
- 何种编码方式:直接,字段直接,字段间接
- 确定控制字段位数
- 根据CM中微指令总数,确定下地址位数
- 确定微指令字长
4.编写微指令码点
- 就是根据已经选择好的编码方式,给每个微指令进行编码,每一个微指令对应一个控制字段的编码,对应相应的控制信号
微程序设计分类
- 静态微程序设计和动态微程序设计:动态的有利于优化,使用可擦除的ROM,Intel用的就是动态的
- 毫微程序设计:用来解释微程序的,了解就好
硬布线与微程序的比较 知识点小结
- 红框是考试重点
中央处理器–指令流水线基本概念性能指标
指令流水的定义
- 这里的举例都不是绝对的,是为了辅助理解流线的含义
- 传统的冯诺依曼机就是采用顺序执行方式,又称串行执行方式
- 一次重叠,二次重叠
- 这里给出的情况只是最理想情况下,各个阶段时间相同,各阶段硬件使用不冲突,实际上不可能这么完美
- 理论上,指令分三阶段的话,同一时间最多会有三条指令在执行;理想条件下,指令分几个阶段,同一时间就可以同时执行几条指令;考试场考分五个阶段的
流水线的表示方法
- 指令执行过程图,横向看,表示一条指令,纵向看表示多条指令并行
- 时空图,纵向斜着看,表示一条指令,纵向看表示多条指令并行
流水线的性能指标:吞吐率,加速比,效率
吞吐率
- 对于指令流水线,大多数情况下,吞吐率指的就是单位时间内完成的指令条数
- 吞吐率,这里δ取了一个时钟周期,其实也是理想情况,一个阶段一个节拍
- 装入时间,排空时间
加速比 效率
- 图中红框内面积比整体蓝框面积
知识点小结
中央处理器–指令流水线影响因素分类
上小节给出的理论都是基于理想情况下的结构,实际情况无法做到这么完美,有很多因素影响指令流水线
机器周期的设置
- 这里以经典的五段式指令流水线为例,由MIPS架构提出(第一个精简指令集系统),考试最常考的模式
- IF取指令,ID指令译码,EX指令执行,M访存,WB写回
- 在MIPS架构下,所有指令都安排五段式结构,即使某些阶段某些指令无需执行,也要经历这些阶段
- 为了方便设计,这里设定每个阶段耗时一样,以最长耗时为准100ns
- 由于各个阶段的实际耗时不一样,执行阶段快的需要人为的等待至标准时间,刚好赶在规定时间的时候把数据流出
- 需要再各个阶段的中间添加缓冲寄存器,也叫锁存器,用于上一阶段准备好下一阶段需要用的数据
各阶段分析
- 重点:这个图王道书里没有,但是非常重要,考试有很多大题一定要理解这个过程
- IF阶段:取指令
- 根据PC中的地址,原本应该到主存中取指令,然而大多数时候我们可以直接从Instruction Cache中找到指令,不用访存
- M阶段:访问缓存
- 我们需要访问指令具体操作的某些数据,大多情况下可以直接从Cache中直接命中这个数据,因此称为Data Cache
- 因此存储指令和数据用的是不同的Cache,他们可以并行运行的
- 如果没有命中Cache怎么办?指令流水线会出现断流,必须访存,这种情况以后后面再讨论
- ID阶段:指令译码
- 完成指令译码,并且从通用寄存器Registers中取出操作数,再存放到锁存器里(这里是A和B)
- 我们之前将操作数来自主存,但是在RISC下,操作数不可能来自主存,一定是先放到通用寄存器内,才能取数
- Imm锁存器用于存储立即数,有些指令使用的立即寻址,地址码保存的就是立即数
- EX阶段:执行指令
- ALU从上一步的锁存器中取数,进行运算,输出结果到锁存器(ALU紧挨着右侧的)
- M阶段:访存阶段
- 来自上一部锁存器保存的ALU运算结果,可能需要写回主存,也可能不需要写主存,而是写到下一步的一个寄存器中(Data Cache正下方的没名的寄存器),并通过最后一步WB写回到通用寄存器Registers
- WB阶段:写回
- 运算结果有可能需要写回到通用寄存器Registers中,用于下一步的计算使用
- 分析,可以看出,通用寄存器Registers有可能被读,也有可能被写,因此可能会产生一些问题
影响流水线的因素
- 1.结构相关(资源冲突),就是之前提到的互斥问题
- 2.数据相关(数据冲突),就是之前提到的同步问题
- 3.控制相关(控制冲突)
结构相关(资源冲突)
- 多条指令同一时间,争夺同一资源
- 结合五段式指令流水线理解,图中的Mem是主存,Reg是通用寄存器,IF取值如果不用寄存器的话就要访问主存
- 颜色相同的部分就是同一时间多条指令争夺同一资源
- 图1,Load指令要对Mem访问保存数据,对Reg进行写回数据;Instr3要对Mem取指,从Reg取操作数
- 解决办法:后一个相关指令暂停一个周期;资源重复配置,数据和指令分开存储,即第二个图的蓝框部分
数据相关(数据冲突)
- 数据相关是最常考的,小题大题都有
- 图1,对Reg的使用产生了冲突,因为Reg保存着r1
- add要对r2 r3求和存到r1
- sub要对r1 r3减法存到r4
- and要对r1 r7求与存到r6
- or要对r1 r9求或存到r8
- xor不会和add产生冲突,因为r1已经写回Reg了
- 正常逻辑下,要想使用r1,应该等上一步的结果写回到r1之后,才能进行下一步的取数操作,这样对于现有的完美的指令流水线就出现了问题
解决办法1:等待
- 图1,用硬件实现几个气泡bubble,执行空拍子,直到相关指令不冲突,再执行,具体实现不用深究
- 图2,软件实现空指令NOP,编译器发现有冲突,为我们插入几条空指令,空指令也会经历完整的五段式,再启动相关指令,具体插几条由机器语言程序员或汇编语言程序员决定 解决办法2:数据旁路技术
- 实际上add中r2 r3的结果在ALU出来就了,可以直接送回ALU,供sub指令使用
- 其他指令同理
解决办法3:编译优化
- 如果后续有些指令不涉及r1这样的数据冲突,可以提前到sub前面执行,执行完已经过了冲突周期,再执行sub指令
- 与空操作是一样的效果,但是这样操作没有浪费时间,执行效率更高
控制相关(控制冲突)
- 如图中,第一条是条件转移指令,如果Mem得出的结果不满足转移条件,正常顺序执行,如果满足条件,会直接跳转1000的位置
- 发生跳转以后,红框的指令已经开始执行了,并产生断流
- 解决办法1:转移指令分支预测
- 简单预测
- 动态预测,
- 解决办法2:预取指令
- 提前取出转移成功和不成功的指令,需要增加硬件,比如指令寄存器
- 解决办法3
- 加法器中进位加法器是一个一个传递的,我们可以改造电路提前产生进位信息
- 这里的加快和提前形成条件码也是同理
- 解决办法4:提高转移方向猜准率。其实就是对第一个方法的优化,提高预测的成功率
影响流水线的因素小结 流水线的分类
- 部件功能级,处理机级,处理机间级流水线
- 部件功能级流水:对复杂算术逻辑运算在分阶段,榨干部件的性能
- 处理机级流水:就是我们学的指令流水线
- 处理机间流水:每个CPU处理专门任务,多个处理机形成一个组合,处理多个流水
- 单功能流水线和多功能流水线
- 单功能流水线:比如某一条流水线就是专门处理浮点加法操作
- 多功能流水线:可以实现多功能的流水线,指令流水线就是多功能流水线
- 动态流水线和静态流水线
- 静态流水线:同一时间,一个流水线的部件只能处理同一种功能,比如浮点加法
- 动态流水线:同一时间,一个流水线的不同部件可能在处理不同种类的运算,比如浮点加法,定点数假发
- 线性流水线和非线性流水线
- 线性流水线:从输入到输出,每个功能只允许经过一次,不存在反馈电路
- 非线性流水线:存在反馈电路,比如前面为了解决数据冲突,ALU的输出结果从新进入到输入端;适合现行递归运算的含义,比如ALU只能加法,如果需要乘法运算,就要在执行阶段数次流过流水线
流水线的多发技术
超标量技术
- 一个周期内同时发出多条指令
- 需要确保同时发出的这几条指令不会冲突,因此需要配置多个功能部件,如寄存器,ALU等
- 经过编译后,得到了最终机器指令序列,不能再调整指令顺序(有些CPU可能支持乱序发射,即可以调整顺序)
- 需要编译优化技术,把可以并行执行的指令搭配起来
- 相当于空间复用技术
超流水技术
- 一个时钟周期再分段,每个部件在一个周期内使用多次
- 这里所谓的一个时钟周期可以理解为机器周期,可以对其再细分
- 指令顺序有编译器决定,也不能调整执行顺序,除非优化编译技术
- 相当于时分复用技术
超长指令字
- 多条指令如果在执行阶段用的部件不一样,可以整合成一条,其他阶段都统一执行的,到了EX阶段,由多个功能部件同时执行
- 具有多个操作码,组成超长指令字
- 也需要多个独立的功能部件,确保可以同时执行
知识点小结
- 红框重点,影响因素尤其是数据相关是高频考点,熟悉指令流程图和时空图画法
五段式指令流水线
本节是补充考点
重点介绍考试中常见的五类指令(基于五段式流水线)
- 运算类指令,LOAD指令,STORE指令,条件转移指令,无条件转移指令
运算类指令
- Rs是源操作数,Rd是目的操作数,箭头所指就是结果保存的位置,一般是Rd,#加数字表示立即数
- 包括两个寄存器相加,寄存器与立即数相加,算数左移指令
- IF阶段:从指令Cache取指令,存放到IF阶段的锁存器
- ID阶段:对指令操作码译码;将操作数存放到ID阶段的锁存器,有三个可供选择,Imm用于存放立即数
- EX阶段:ALU根据上一阶段给的操作数计算,将结果保存到锁存器
- M阶段:之前将会保存主存。但是RISC中,运算类指令取操作数一定是来自于寄存器(或立即数),保存也是放到寄存器,不可以随意访问主存;因此这一阶段是空段,数据由上一阶段的锁存器,保存到M阶段锁存器;时间正常消耗
- WB阶段:M阶段锁存器的数据,进入到这里,被写回到通用寄存器Registers
LOAD指令
- LOAD指令用于从内存中取数,放到寄存器中
- 在Rs地址的基础上,加上一个偏移量,在基于新的地址值,到主存中取出数据,存放到Rd中
- 这么做的用途,访问一个进程的变量,通常采用基址寻址,Rs指明了进程的起始地址,加上偏移量就是要找的数据
- 也有的简写为(mem)→Rd
- IF阶段:根据PC指示,从指令Cache中取指令到IF段的锁存器
- ID阶段:指令译码,还要将LOAD中指明的Rs(基址寄存器的值)放到锁存器A,把偏移量,这里是立即数996放到Imm里
- EX阶段:ALU完成基址地址+偏移量,结果输出到锁存器,得到有效地址EA
- M阶段:根据EA从DataCache数据缓存中,得到数据,放到DataCache右侧的锁存器中
- WB阶段:将上一阶段的锁存器里的数据,写回到寄存器中Registers中
- 注意点:EX阶段也要计算,因为数据的存放地址有偏移量,M阶段,正常可以访主存,但是有较大概率会被DataCache命中,没命中才会访问主存,当然如果访问主存,一个时钟周期也是不够的
- RISC处理器,只有取数LOAD和存数STORE指令才能访问主存,可以使指令集设计更加简单
STORE指令
- 保存数据到主存中
- 图中表示,将Rs中的操作数保存到996(Rd)中,996(Rd)表示Rd保存的地址加上偏移量996才是真正要保存数据的主存地址
- 也可以写成Rs→(mem)
- IF阶段:根据PC从指令Cache取指令,保存到IF段的锁存器
- ID阶段:指令译码器,还要将基地址寄存器的地址保存到锁存器A,偏移量存放到Imm;此时要操作的数已经保存在Resgister中,将操作数保存到锁存器B中,
- EX阶段:基地址+偏移量求出EA,要保存的操作数从锁存器B转移到锁存器store中
- M阶段:根据有效地址EA,将数据写入主存,当然,大概率会命中,因此图中是写入DataCache
- WB阶段:空段,已经保存主存或DataCache,无需写回
条件转移指令
- 转移类指令都会采用相对寻址,即相对于PC的偏移量来寻址
- 第一条指令:beq表示branch equal,两个寄存器里的数值相等,才会转移,转移多少。根据给出的偏移量,PC,指令字长算出
- 当前PC指向的是当前指令的起始地址,偏移是相对于下一条指令的偏移,因此偏移量指的是从下一条指令的起始位置开始偏移
- 如果如果条件满足,则按照偏移来跳转,如果不满足,则PC+1,通常PC+1会在取指令结束后自动完成
- 第二条指令:bne表示branch not equal,如果两个寄存器的数值不相等,则满足条件,否不满足,跳转和beq类似
- IF阶段:从指令Cache取指令,保存到当前阶段的锁存器,
- ID阶段:从Reg中取出需要的两个操作数,分别存到锁存器A和B,偏移量存放Imm
- EX阶段:两个操作数进行运算,比较结果存放到当前阶段锁存器
- M阶段:跳转指令无需访存;但是这里要修改PC的值并写回PC,图中没画全
- WB阶段:空段,这里一般只进行Reg的写回
- 很多教材将写回PC的功能段称为WrPC段,耗时比M阶段端,可以安排在M阶段时间内完成,所以效果上和图中是一样的
无条件转移指令
- 采用相对寻址,无需条件判断,直接相对于PC进行偏移,PC是当前的指令位置,偏移量是相对于下一条指令的偏移,因此公式里有一个+指令字长
- IF阶段:同上
- ID阶段:同上
- EX阶段:无需判断,拿到Imm里的偏移量直接写回PC,因此WrPC段发生在EX阶段,图中没有画全
- M阶段:空段
- WB阶段:空段
- 尽早修改PC值,可以尽早避免控制冲突,因为转移类指令往往跳跃一段距离,因此面对流水线指令,原本按顺序将要执行的指令就会和跳转后的指令形成控制冲突,因此尽早修改PC可以尽量避,也有个别CPU放在WB阶段写回
真题讲解
- 只分析其中一部分
- 分析各条指令的作用,绿色文字
- I3指令中ID阶段被阻塞的原因
- I3的ID阶段取数,必须等到I1 I2指令进行到WB,即完成写回操作,I3的ID才能进行
- I4指令的IF阶段被阻塞的原因
- I3的IF段锁存器得到指令地址后,由于阻塞一直拖着没有进入ID阶段
- 如果I4的IF早于I3的ID执行,就会提前修改IF阶段的锁存器,因此必须等到I3进入到ID阶段,释放锁存器
知识点小结
- 本节书上没有,但是考察大题的几率非常高,并且大题的难度较大
第六章 总线
本章以选择题为主,不难,逻辑链路清晰不深,记忆偏多
总线概述
总线的物理实现
- 说是一根,其实可能包含多跟
- 同一时刻,只能一个部件发数据,多个可以接收
本章概览 总线的定义 总线的特性
- 传输方向,比如CPU可以用地址总线传给主存或硬盘,而不能有主存或硬盘传给CPU,数据总线CPU则可以主存互相传输
总线的分类 串行总线与并行总线
- 串行每次只能传一位,并行每次可以传多位
- CPU与主存之间的数据总线就是并行总线,USB规范就是串行总线
- 串行总线抗干扰能力强,适合长距离传输,发送频率可以做的很高
- 并行总线信号线多,信息之间可能会干扰,造成电平跳变,因此工作频率不能过高
- 因此并行总线不一定就比串行总线快
按总线的功能分类
- 片内总线
- 系统总线又分地址总线,数据总线,控制总线
- 数据总线,传递方向为双向,总线个数需要参考机器字长,存储字长;比如,总线个数是CPU机器字长的一般,则CPU需要两次从数据总线读取或存储数据,同理总线个数与存储字长的关系
- 地址总线,总线个数与主存地址空间和设备数量有关,一个输入或输出设备需要一个地址,信息传递传递单向,由CPU发送到总线
- 控制总线,有多个控制线,每个控制线控制一个信号,对于单根线是单向的,有CPU发出的,也有部件反馈给CPU的,对于控制总线整体来说,控制总线是双向的
- 区分数据通路与数据总线,数据通路是逻辑上的描述,数据总线是承载的物理媒介
- 通信总线,计算机系统之间的,网线就是一种通信总线
- 本章重点探讨系统总线
系统总线的结构
- 单总线,双总线,三总线
- 这里的总线指包含了地址,数据,控制的总线的统称
单总线结构
- 可能会导致多个部件争用总线,因此带宽低
- 不支持并发操作表示的其实是不能并行,即同一时刻只能一组部件传递信息,
- 传输速度不匹配,CPU和主存比较快,外部设备传输比较慢,容易导致快速的设备性能浪费
双总线结构
- 通道可以理解为阉割版的CPU,专门用来管理IO设备
- 通道和主存总线设计的快一些,I/O总线设计的慢一些
- 缓和快速设备和慢速设备之间的矛盾
- 运行通道也需要响应的代码,也保存在主存里
- 支持突发,CPU指明主存的一个地址信息,可以对主存的多个连续地址进行访问,比如一个指令序列
三总线结构
- 主存总线,I/O总线,DMA总线
- CPU通过主存总线,主存,DMA总线与高速外设传递数据,比如磁盘机
- CPU通过I/O总线与慢速设备传递数据,打印机,键盘等
- 由于慢速的I/O设备可以直接与CPU连接,可以更快速的响应CPU发出的命