• 控制器部分的内容算是让我对处理器有了更深一步的理解
  • 学到汇编其实还是有些抽象,为什么机器指令就可以直接被机器识别并执行呢?
  • 这才知道,机器指令之下还有微程序,细究起来最不可分的操作应当是微指令,多条微指令实现了一个指令的功能
  • 进一步把指令细分为很多阶段(称为周期,如取指周期、执行周期等)的话,那在微指令和指令层次之间,还有一个指令的分段的中间层次,即多条微指令实现指令的某个阶段(如取指、读取等等)的功能,指令的多个阶段的功能就组成了这条指令的功能,多条指令又组成了程序来运行
  • 一条微指令作为最基本的机器动作,按我理解就是,一条微指令就指明了哪些部件在这一步需要工作,哪些不需要工作。需要工作的就给“通上电”,不需要的就“断开”,部件通上了电也就会自己运行起来,电流就流通起来,像门电路这种就实现各种逻辑,最终完成一条微指令的操作
    • 比如取指周期的安排
节拍 动作
C1 MAR <- (PC), R <- 1
C2 MDR <- M(MAR)
C3 PC <- (PC)+1
C4 IR <- (MDR), CU <-OP(IR)
  • 节拍是时序的控制信号,所有的动作都在时序的严格控制下

    • C1节拍,PC的内容也就是下一条指令的地址送入MAR中,并置读信号为1有效
    • C2节拍按照MAR的地址指示从主存中读取数据到MDR中,读取的是一条指令
    • C3节拍PC自加1,指向下一条指令
    • C4节拍讲MDR的指令送入IR指令寄存器,并将IR指令的操作码部分送入CU控制器准备译码
  • 每一个“MAR <- (PC)”的小动作就由一个微指令来完成,只涉及少数几个部件。都是通过电信号来控制,那么按我的猜想,给PC的输出打开,给MAR的输入打开,电流自然流通,PC的内容也就传送到MAR中去了。不知道对不对,反正有电路控制下都可以实现。

组成与功能

  • 处理器的工作就是在控制器CU的指挥下,按照“取指令 - 分析指令 - 根据寻址方式计算操作数地址- 取源操作数 - 处理源操作数 - 写目的操作数”的顺序,周而复始地解释指令。
  • CU的功能就是,对指令进行分析(译码),按照一定时序,根据当前处理器状态,向计算机的各个部件发出控制信号/命令


时序系统

  • 操作有序的基础,即在时序的控制下。
  • 简单来讲就是规定时间间隔,每个时间段内完成能完成的任务,完不成就分配两个时间段等等,但时间总是时间段的整数倍。

  • 指令周期:处理器从主存取出一条指令并执行完该指令所需的时间

    • 然而不同指令所需的时间不同,且同一指令的时间也受环境的影响,为了简化控制,一般都设计成节拍的某个整数倍——基准周期
    • 基准周期称为机器周期或CPU周期,其长短取决于指令的基本操作和期间的工作速度
  • 对于单周期处理器,所有指令的指令周期都是相同的,都等于一个机器周期。
    • 为了保证适配所有的指令,所以指令周期就要选取最复杂指令所用的时间
  • 多周期处理器,把一条指令的周期分为好几个部分来细化,最简单的两周期就分为“取指周期”和“执行周期”
    • 多个周期之间总得有个基准,这个基准就是机器周期
    • 为了保证一个机器周期内至少可以完成一个指令的基本操作(细化后的一个部分),一般选取花费时间较长的一次访存的时间(访存依赖于总线,所以一次访存的时间也叫总线周期)
    • 一个标准的、同步总线的总线周期为4个节拍

三级时序

  • 节拍

    • 时钟脉冲,由一个频率相当精确和稳定的脉冲信号发生器按一定电压幅度,一定时间间隔连续发出的脉冲信号。其频率在CPU设计的时候就确定下来,作为最基础的时序控制。
  • 机器周期
    • CPU的基准时间,设计的长度可以保证至少能完成一个指令的基本操作,简化了控制。
    • 设计成节拍的某个整数倍
    • 一个标准的、同步总线的机器周期为4个节拍
  • 指令周期

    • 一条指令执行所需要的时间
    • 分为单周期处理器和多周期处理器
      • 单周期:所有指令的指令周期一样长。既然一样长就干脆设置成为一个机器周期的长度好了,更简化了控制。只不过这个时候机器周期是不是一般而言的4个节拍,那就不好说了。万一某条指令非常复杂需要的时间超过了4个节拍呢?那就得机器周期了呗,至少得大于等于最复杂指令的执行时间吧。
      • 多周期:指令被分为好几个部分执行,每个部分需要的时间规定为一个机器周期,这样机器周期才是设计为保证至少完成一个基本操作。
      • 指令周期的例子
  • 三级时序系统

    • 即最底层的节拍、节拍之上作为基准的基准周期(也叫机器周期,一般设置和总线周期相同,但和总线周期不是一个概念)、再在这个基准之上在组间我们的指令周期

控制方式

  • 一般都是多周期处理器。单周期虽然设计简单,但太浪费了。好好的CPU时间大部分都闲着
  • 但是多周期的话,就要考虑不同的指令其指令周期必然不同,而对指令划分的每个部分,其也不一定会相同
    • 虽然我们用一次访存的时间来作为机器周期,目的是为了保证在一个机器周期内能完成一个基本操作,比如取指、间址、执行、中断查询这四个部分的话,就要保证一个机器周期内能完成一个部分的操作
    • 但是对于复杂的运算,比如乘法、除法,其执行周期很可能就大于一次访存的时间,也就是在一个机器周期内完成不了执行周期所需的完成的操作
    • 这就尴尬了
  • 所以我们需要控制
    • 同步控制:和单周期处理器的思想差不多,既然把指令划分了,那就以最长的一个部分的操作时间作为基准

      • 假设乘除最长且需要在两个机器周期内完成,那么对于取指、间址等其他部分,也分配两个机器周期的时间
      • 但是对于大部分的操作,两个机器周期太长了,这就会导致CPU经常处于空闲的状态。浪费浪费
      • 作为一种在同步控制之下的弥补手段,人们又设计了不等长的机器周期。简单的操作就采用3个节拍的机器周期,复杂的操作采用5个节拍的机器周期。不过在此之上由需要一层控制在分配机器周期
    • 异步控制
      • 即采用“握手/应答”的方式来确定机器周期的长短。当进入一个机器周期的时候,将相应的某个“指令执行阶段标志”置为1,当最后一个微操作结束的时候,向控制器发出一个信号,控制器再发出一个信号来将“指令执行阶段标志”置为0。这样才算一个机器周期结束
      • 如此一来机器周期的长短也无法实现规定
    • 联合控制
      • 两种办法相结合呗
      • 比如在部件(如ALU)的内部采用同步,部件之间采用异步
      • 在比如,固定机器周期的长度,但是根据指令复杂度的不同,每个指令分配的机器周期的数量也不等。这属于联合控制,异步中有同步(机器周期固定长度),同步中有异步(不同指令周期有不同数量的机器周期)

硬布线与微程序

  • 终于到了微指令的部分了。
  • 说,一条指令被控制器翻译成多条微指令(亦称微操作,不过微指令的“指令”层面的概念尤其对应微程序,因为硬布线实在牵扯不到“指令”层面上),而一条指令本身又是可划分的,可以被划分为多个部分,那么每个部分同样对应着多条微指令

硬布线

  • 原理

    • 把每个微操作所对应的需要用到的部件、信号都用逻辑电路连接起来,等合适的信号来了就自动启动了对应了部件(通上电…开关打开…之类的)…
  • 比如对于取指周期,一般给安排一个机器周期的时间就够用,通常的机器周期是4个节拍,也就是4个节拍要完成取指这个操作

节拍 动作
C1 MAR <- (PC), R <- 1
C2 MDR <- M(MAR)
C3 PC <- (PC)+1
C4 IR <- (MDR), CU <-OP(IR)
  • 对于每个微操作,列出其所在的指令的哪个周期、哪个节拍、哪些指令需要用到
周期 节拍 微指令 SHL LDAM STAM JMP X JZ X ADD M COM
FE C1 MAR <- (PC) 1 1 1 1 1 1 1
FE C1 R <- 1 1 1 1 1 1 1 1
FE C2 MDR <- M(MAR) 1 1 1 1 1 1 1
FE C3 PC <- (PC)+1 1 1 1 1 1 1 1
FE C4 IR <- (MDR) 1 1 1 1 1 1 1
FE C4 CU <- OP(IR) 1 1 1 1 1 1 1
EXE C1 MAR <-AD(IR) 0 1 0 0 0 1 0
EXE C2 MDR <- M(MAR) 0 1 0 0 0 1 0
  • 太长我就不写了
  • 以“MDR<-M(MAR)”为例,也就是一次读取主存内容的微操作
    • 从表格可以看出,在取指周期FE的C2节拍安排了这个微操作,在执行周期EXE的C2节拍也有这个操作
    • 因为取指周期必然的(所有的指令都用到了),就是说只要到了取指周期的C2节拍,那么这个微操作就必然要启动执行
    • 执行周期不一样,有些指令需要从主存取数、而有些指令则不需要,但只要需要,就安排在了C2节拍里。也就是说,到了执行周期的C2节拍,如果是需要从主存取数的指令,那么这个微操作也会被启动执行
  • 所以对于所有的微操作,都是提前安排好了,你你你在哪个周期哪个节拍,他又在哪个周期的哪个节拍,从指令转换成微操作序列,也需要符合这个表格所规定的微操作的先后顺序
    • 只不过这里使用最简单的两周期来举例
  • 在设计组合电路之前,还要写出微操作所对应的逻辑表达式
    • 如“MDR<-M(MAR)”
    • FE · C2 · (SHL + LDA M + STA M + JMP X + JZ X + COM) + EXE · C2 · (LDA M)
    • = FE · C2 + EXE · C2 · (LDA M)
    • = C2 · [ FE + EXE · ( LDA M ) ]
    • 注:逻辑加和逻辑乘

  • FE、C2均是当前的状态信号,现在是哪个周期、哪个节拍
  • 对于LDA M信号,那自然就是ID指令译码器所要发出的信号了,就是判断当前的指令是哪条指令
  • 这个时候的输出还只是我要启动“MDR<-M(MAR)”这个微操作,相当于把当前指令根据时序翻译成了微操作序列
  • 然后这条输出就对应到了相应的控制信号,同样也是通过逻辑电路来对应的。
  • 按我的理(猜)解(想),每个微操作对应多个部件,那么要实现这个微操作就需要对每个对应的部件就要发出一个控制信号,这个控制信号被称为微命令。差不多是很底层的命令了。不过应该还可以被相应的部件继续翻译(应该是吧),比如发给ALU的信号就是要告诉它进行什么运算,是加还是减还是移位等等,ALU收到信号翻译后听懂了就进行相应的动作。

  • 从百度百科盗图一张

微程序

  • 原理

    • 既然每条微指令需要发出的控制信号都是相同的,那么就存储下来,用到的时候直接拿出来用不就可以了嘛。机智!
    • 相比于硬布线,其硬件的复杂度大大降低了,只不过还需要从存微指令的地方取出来,所以花费的时间肯定要比直接采用逻辑电路的硬布线要慢
    • 对于RISC还是采取硬布线的方式比较合算,因为RISC本身的指令就不多,硬件复杂度也不会高到哪去
  • 历史
    • 其实早在1951年这个想法就被英国剑桥大学的计算机教授Wilkes提出来了,所以“微程序控制”也被称为“Wilkes模型”
    • 然而,当时的存储器太慢太慢了,,,,,,,,,,,,
  • 设计
    • 同样是先根据周期、节拍来规定好每个微指令在何时才能执行
    • 把微指令编制成微程序
    • 把所有的微程序存入控制器内部的一个ROM——控制存储器CM(Control Memory,简称控存)
    • 机器运行的时候,控制器根据当前指令、状态(节拍)取出对应的微指令,按照规定好的节拍一条一条送入控存数据寄存器CMDR
    • 由CMDR发出微命令(即控制信号)来通知相应的部件开始干活

  • 微程序控制器组成

    • 原本控制器的IR、PC依旧保存,其余的见上图
    • 微地址形成逻辑代替了实现了指令译码器的功能
    • 微指令寄存器存放当前的微指令
    • 控制存储器存储所有的微指令,以微程序的形式
    • 微指令地址寄存器(uAR)存放微指令的地址,也称为CMAR
  • 微程序和微指令
    • 微程序

      • 通常微程序可以完成一个基础操作,比如取指操作可以编制成一个微程序。而想这种公共操作可以只存储一份,基本上就是取指、间址、中断判断这三个公共的部分
      • 对于其他每个指令,其执行部分的微指令必然是不同的,每条指令就需要对应一个执行部分的微程序
      • 一般来说,N条指令,就需要编制N+3个微程序
    • 微指令
      • 由“操作控制字段”和“顺序控制字段”组成
      • “操作控制字段”记录着所需要发出的微命令,因为是提前编制好的,这些微命令就可以完成这条微指令的操作
      • “顺序控制字段”用来确定下一条微指令的地址,如果当前的微程序没有执行完,一般就是顺序加1指向下一条微指令。如果执行完了,则相当于告诉微地址形成逻辑,我当前的微程序执行完了,应该选择下一个微程序执行了。一般是通过设置相应的标志位。于是就根据当前的指令操作码、时序来确定下一个微程序是哪个。取指的微程序执行完了,如果当前指令需要间址则跳到间址的微程序,不需要就直接跳到当前指令的执行部分的微程序

  • 细说微指令

    • 操作控制字段:记录要发出的控制信号,有不同的编码方式

      • 直接表示法

        • 每一位对应一个控制信号,如果该位为1则表示要发出这个控制信号,为0不发出
        • 但是控制信号太他妈多了啊。轻轻松松上百个。一条指令都舍不得占几位,一个微指令就要占几百位。No Way!
      • 编码表示法
        • 所以就编码表示了呗
        • 但是只有互斥(不能同时发出)的控制信号才可以被编码
        • 有编码自然也有译码
        • 字段直接编码
        • 字段间接编码
    • 顺序控制字段
      • 也叫“下地址”
      • 并不是所有时候都需要用到该微指令的下地址
        • 开机后,第一条微指令的地址由专门的电路生成
        • 某条指令的最后一条微指令结束,那么下一条必然为取指周期的微程序,也有专门的电路生成
        • 一般由取指周期微程序的最后一条微指令来置“间址标志IND”为1,表示下一步要进入该指令的间址周期,由于间址是公共操作,所以也有专门的电路生成
        • 若有条微指令置了“执行标志EXE”为1,表示要进入执行周期,则下地址由微地址形成逻辑根据指令操作码形成。由于存储在CM的微程序的位置都是固定的,可以在另外设置一个ROM来存储每个微程序的首地址,并且每个指令操作码对应的微程序首地址在该ROM存储的地址为这个指令操作码,就是说直接把指令操作码(是一个二进制编码)当作地址(所有的指令操作码均不相同)去访问该ROM就可以快速得到这个指令操作码所对应微程序在CM中的地址~
      • 给出下地址的方法
        • 直接给出:当前为A,下地址通常为B,除非当前微程序执行结束,则无条件转移到B。如执行结束必然要进入中断,则可以直接给出
        • 增量计数:将uAR赋予自动加1的特点,这样可以满足所有的顺序微指令,对于分支/跳转,就需要改进顺序控制字段,分为“转移控制字段BCF”和“转移地址字段BAF”,若条件满足则直接用BAF来改写uAR
        • 断定法:顺序控制字段分为“非测试字段”和“测试字段”
          • “非测试字段”直接构成下地址的高位
          • “测试字段”和“非测试字段”以及状态(时序等)、指令操作码等等送入“测试网络”来生成下地址的地位
          • 这样就支持多路转移,转移的路数由“测试字段”的位数决定(n位则有2^n路)

  • 这周应校选课要求,读了一本书叫《世界是平的》,虽然已出版很久了,不过仍然值得一读。

计算机组成.机器需要控制.控制器CU相关推荐

  1. 计算机控制系统的模拟控制器,导 读 利用计算机代替常规的模拟控制器,使它成为控制系统的一个组成部分,这种有计算机参加控制的系统简称为计算机控制系统。...

    导 读 利用计算机代替常规的模拟控制器,使它成为控制系统的一个组成部分,这种有计算机参加控制的系统简称为计算机控制系统. View 59 Download 0 Embed Size (px) 344 ...

  2. 计算机组成原理实验四 微程序控制器实验报告

    我班算是几乎最后一个做实验的班级了,报告参考了一些朋友提供的数据加上一些自己的主观拙见,本人水平有限加之制作仓促难免有错误,望大家批评指正. 4.1 微程序控制器实验 一.实验目的 (1) 掌握微程序 ...

  3. 冯诺依曼计算机程序及其执行,第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析...

    第4章冯.诺依曼计算机:机器级程序与其执行练习题答案解析 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 第 4 章 冯.诺依曼计算 ...

  4. 宅男程序员给老婆的计算机课程之8:控制器

    设计模式再"高级"一点,便是所谓的"框架"了. 从事Web开发,一般都会接触到MVC框架这个概念. M:也就是Model,直接跟网站数据库相关. V:也就是Vi ...

  5. 计算机组成原理——机器字长、指令字长、存储字长

    计算机组成原理--机器字长.指令字长.存储字长 字长: 字长: 一个字中的二进制位的位数,是计算机系统结构中的一个重要特性.字长在计算机结构和操作的多个方面均有体现.计算机中大多数寄存器的大小是一个字 ...

  6. 计算机实验原理word,完整word版计算机组成原理实验报告 微控制器

    <完整word版计算机组成原理实验报告 微控制器>由会员分享,可在线阅读,更多相关<完整word版计算机组成原理实验报告 微控制器(13页珍藏版)>请在人人文库网上搜索. 1. ...

  7. 运算器和控制器在计算机的作用,运算器和控制器合称为什么

    在计算机中,运算器和控制器合称为"中央处理器".中央处理器(CPU)是计算机中负责读取指令,对指令译码并执行指令的核心部件:其主要包括两个部分,即控制器.运算器,其中还包括高速缓冲 ...

  8. 6_树莓派机载计算机通过串口指令控制无人机自主飞行教程

    typora-root-url: img 6_树莓派机载计算机通过串口指令控制无人机自主飞行教程 电赛飞行器赛题的前世今生 飞行器赛题至出现以来.从大体趋势上来看参赛学生的主流飞控路线主要经历了以下四 ...

  9. 简述计算机控制系统调试和运行的过程,简述计算机控制系统的一般控制过程

    <简述计算机控制系统的一般控制过程>由会员分享,可在线阅读,更多相关<简述计算机控制系统的一般控制过程(2页珍藏版)>请在人人文库网上搜索. 1.1. 简述计算机控制系统的一般 ...

最新文章

  1. ICCV 2021 | R-MSFM: 用于单目深度估计的循环多尺度特征调制
  2. [BZOJ1984] 月下“毛景树”
  3. javascript 控制弹出窗口
  4. 宜昌宝塔河项目_宜昌城区首个垃圾分类定时定点投放点启用 厨余垃圾破袋投放...
  5. Vim批量注释、替换和缩进
  6. LeetCode344反转字符串
  7. [转]HTTP消息格式
  8. 手机电脑自适应导航源码php,自适应各终端懒人网址导航源码 v2.4
  9. linux python-3.10.4 安装
  10. C++ trivial和non-trivial构造函数及POD类型
  11. Typec手机有线网卡网线转网口转接口快充方案
  12. 计算机兼容,兼容条件
  13. 关于什么是大数据智能决策!摘自《大数据智能决策》自动化学报
  14. 电商o2o系统开发原理和解决方案你get了吗?
  15. Hang Detect 问题分析案例
  16. 效果超好的自制美白面膜大汇总 - 健康程序员,至尚生活!
  17. 126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货
  18. VS快捷键-多行注释
  19. mysql设某个值为empty_oracle 修改某字段小数位精度 需要字段未empty的解决办法
  20. 2021-02-22 adb调试工具安装成功(Win7+Vivo)

热门文章

  1. KeyError: ‘label‘
  2. BZOJ4379: [POI2015]Modernizacja autostrady
  3. matlab 怎么使用mathtype,教你怎样在Authorea里面使用MathType
  4. 自然语言处理总复习(九)—— 机器翻译
  5. win10无法打开 巫师3 等steam游戏
  6. 有关ddos详解及软件和方式
  7. 警告 Invalid cookie header: Set-Cookie:
  8. LoopBack 出现Handshake inactivity timeout问题
  9. 当Facebook、谷歌等成为数据泄露大头时,它们如何改变?(上)
  10. Linux 中的分区魔术师-parted magic