当前位置: 首页 > news >正文

《计算机组成原理》(第3版)第10章 控制单元的设计 复习笔记

第10章 控制单元的设计

一、组合逻辑设计

(一)组合逻辑控制单元框图
简化的控制单元框图,如图10-1所示。
在这里插入图片描述
图10-1 带译码和节拍输入的控制单元框图

(二)微操作的节拍安排
安排微操作节拍时应注意以下3点:
①有些微操作的次序是不容改变的,故安排微操作节拍时必须注意微操作的先后顺序;
②凡是被控制对象不同的微操作,若能在一个节拍内执行,应尽可能安排在同一个节拍内,以节省时间;
③如果有些微操作所占的时间不长,应该将它们安排在一个节拍内完成,并且允许这些微操作有先后次序。

(三)组合逻辑设计步骤
1.列出微操作命令的操作时间表
表10-1列出了上述10条机器指令微操作命令的操作时间表。
表10-1 操作时间表
在这里插入图片描述
2.写出微操作命令的最简逻辑表达式
纵览表10-1便可列出每一个微操作命令的初始逻辑表达式,经化简、整理便可获得能用现成电路实现的微操作命令逻辑表达式。
3.画出微操作命令的逻辑图
对应每一个微操作命令的逻辑表达式都可画出一个逻辑图。例如,M(MAR)→MDR的逻辑表达式所对应的逻辑图如图10-2所示,图中未考虑门的扇入系数。
在这里插入图片描述
图10-2 产生M(MAR)→MDR命令的逻辑图

二、微程序设计

(一)微程序设计思想的产生
微程序设计思想是英国剑桥大学教授M.V.Wilkes在1951年首先提出的。微程序设计省去了组合逻辑设计过程中对逻辑表达式的化简步骤,无须考虑逻辑门级数和门的扇人系数,使设计更简便,而且由于控制信号是以二进制代码的形式出现的,因此只要修改微指令的代码,就可改变操作内容,便于调试、修改,甚至增删机器指令,有利于计算机仿真。

(二)微程序控制单元框图及工作原理
1.机器指令对应的微程序
采用微程序设计方法设计控制单元的过程就是编写每一条机器指令的微程序,它是按执行每条机器指令所需的微操作命令的先后顺序而编写的,因此,一条机器指令对应一个微程序,如图10-3所示。图中每一条机器指令都与一个以操作性质命名的微程序对应。
在这里插入图片描述
图10-3 不同机器指令所对应的微程序
2.微程序控制单元的基本框图
图10-4示意了微程序控制单元的基本组成。
在这里插入图片描述
图10-4 微程序控制单元的基本组成
3.工作原理
(1)取指阶段
①将取指周期微程序首地址M→CMAR;
②取微指令:
将对应控存M地址单元中的第一条微指令读到控存数据寄存器中,记作CM(CMAR)→CMDR。
③产生微操作命令:
第一条微指令的操作控制字段中为“1”的各位发出控制信号,如PC→MAR,1→R,命令主存接收程序首地址并进行读操作。
④形成下一条微指令的地址:
此微指令的顺序控制字段指出了下一条微指令的地址为M+1,将M+1送至CMAR,即 Ad(CMDR)→CMAR。
⑤取下一条微指令:
将对应控存M+1地址单元中的第二条微指令读到CMDR中,即CM(CMAR)→CMDR。
⑥产生微操作命令:
由第二条微指令的操作控制字段中对应“1”的各位发出控制信号,如M(MAR)→MDR使对应主存2000H地址单元中的第一条机器指令从主存中读出送至MDR中。
⑦形成下一条微指令的地址:
将第二条微指令下地址字段指出的地址M+2送至CMAR,即Ad(CMDR)→CMAR
以此类推,直到取出取指周期最后一条微指令,并发出微操作命令为止。此时第一条机器指令“LDA X”已存至指令寄存器IR中。
(2)执行阶段
①取数指令微程序首地址的形成:
当取数指令存入IR后,其操作码0P(IR)直接送到微地址形成部件,该部件的输出即为取数指令微程序的首地址P,且将P送至CMAR,记作OP(IR)→微地址形成部件→CMAR。
②取微指令:
将对应控存P地址单元中的微指令读到CMDR中,即CM(CMAR)→CMDR。
③产生微操作命令:
由微指令操作控制字段中对应“1”的各位发出控制信号,如Ad(IR)→MAR,1→R.命令主存读操作数。
④形成下一条微指令的地址:
将此条微指令下地址字段指出的P+1送至CMAR,即Ad(CMDR)→CMAR。
⑤取微指令,即CM(CMAR)→CMDR。
⑥产生微操作命令。

(三)微指令的编码方式
1.直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令。如图10-5所示。
在这里插入图片描述
图10-5 直接编码方式
2.字段直接编码方式
这种方式就是将微指令的操作控制字段分成若干段。将一组互斥的微操作命令放在一个字段内,通过对这个字段译码,便可对应每一个微命令,如图10-6所示。这种方式因靠字段直接译码发出微命令,故又有显式编码之称。
在这里插入图片描述
图10-6 字段直接编码方式
3.字段间接编码方式
这种方式一个字段的某些微命令还需由另一个字段中的某些微命令来解释,如图10-7所示。
在这里插入图片描述
图10-7 字段间接编码方式
4.混合编码
这种方法是把直接编码和字段编码(直接或间接)混合使用,以便能综合考虑微指令的字长、灵活性和执行微程序的速度等方面的要求。
5.其他
微指令中还可设置常数字段,用来提供常数、计数器初值等。

(四)微指令序列地址的形成
1.直接由微指令的下地址字段指出
微指令的下地址字段直接指出了后续微指令的地址。这种方式又称为断定方式。
2.根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。
3.增量计数器法
仔细分析发现,在很多情况下,后续微指令的地址是连续的,因此对于顺序地址,微指令可采用增量计数法,即(CMAR)+1→CMAR来形成后续微指令的地址。
4.分支转移
当遇到条件转移指令时,微指令出现了分支,必须根据各种标志来决定下一条微指令的地址。微指令的格式如下:
在这里插入图片描述
5.通过测试网络形成
微指令的地址还可通过测试网络形成,如图10-8所示。
在这里插入图片描述
图10-8 通过测试网络形成微指令地址
6.由硬件产生微程序入口地址
当电源加电后,第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向CMAR输入微指令的地址,这个地址即为取指周期微程序的入口地址。

(五)微指令格式
1.水平型微指令
水平型微指令的特点是一次能定义并执行多个并行操作的微命令。
2.垂直型微指令
垂直型微指令的特点是采用类似机器指令操作码的方式,在微指令字中,设置微操作码字段,由微操作码规定微指令的功能。表10-2列出了一种垂直型微指令的格式。
表10-2 垂直型微指令示例
在这里插入图片描述
3.两种微指令格式的比较
(1)水平型微指令比垂直型微指令并行操作能力强、效率高、灵活性强。
(2)水平型微指令执行一条机器指令所需的微指令数目少,因此速度比垂直型微指令的速度快。
(3)水平型微指令用较短的微程序结构换取较长的微指令结构,垂直型微指令正相反,它以较长的微程序结构换取较短的微指令结构。
(4)水平型微指令与机器指令差别较大,垂直型微指令与机器指令相似。

(六)静态微程序设计和动态微程序设计
1.通常指令系统是固定的,对应每一条机器指令的微程序是计算机设计者事先编好的,因此一般微程序无须改变,这种微程序设计技术即称为静态微程序设计。
2.如果采用EPROM作为控制存储器,人们可以通过改变微指令和微程序来改变机器的指令系统,这种微程序设计技术称为动态微程序设计。

(七)毫微程序设计
微程序可看做是解释机器指令的,毫微程序可看做是解释微程序的,而组成毫微程序的毫微指令则是用来解释微指令的。

(八)串行微程序控制和并行微程序控制
与机器指令一样,完成一条微指令也分两个阶段:取微指令和执行微指令。如果这两个阶段按图10-9(a)所示的方式运行,则为串行微程序控制。由于取微指令和执行微指令的操作是在两个完全不同的部件中完成的,因此可将这两部分操作并行进行,以缩短微指令周期,这就是并行微程序控制,如图10-9(b)所示,与指令二级流水相似。
在这里插入图片描述
图10-9 串行微程序和并行微程序控制方式

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 聊聊JS中的WebSocket
  • 2024年8月9号(frp)
  • Verilog基础:模块端口(port)定义的语法(2001标准)
  • C++基础编程100题-040 OpenJudge-1.5-01 求平均年龄
  • 大语言模型的简易可扩展增量预训练策略
  • 代码随想录算法训练营day43 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 水库大坝安全监测:筑起水坝安全防线
  • 搜索最新全国工商信息的软件
  • 【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)
  • 代码随想录算法训练营第十六天
  • android13 禁用wifi
  • 【单片机】51单片机入门教程(一):深入理解普通IO口与外部中断
  • 哪些平台和市场备受大卖们青睐?今年第二季度热门平台排行
  • C语言的结构体在内存中是如何存放的?
  • [Spring] Spring事务与事务的传播
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 2018一半小结一波
  • canvas 高仿 Apple Watch 表盘
  • CentOS 7 修改主机名
  • CSS居中完全指南——构建CSS居中决策树
  • flask接收请求并推入栈
  • JAVA 学习IO流
  • JavaScript设计模式与开发实践系列之策略模式
  • JS题目及答案整理
  • leetcode讲解--894. All Possible Full Binary Trees
  • redis学习笔记(三):列表、集合、有序集合
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 复习Javascript专题(四):js中的深浅拷贝
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 软件开发学习的5大技巧,你知道吗?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • k8s使用glusterfs实现动态持久化存储
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​比特币大跌的 2 个原因
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (六)DockerCompose安装与配置
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十八)SpringBoot之发送QQ邮件
  • (四)stm32之通信协议
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)nsfocus-绿盟科技笔试题目
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Linux 多线程条件变量同步
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .mysql secret在哪_MySQL如何使用索引
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET NPOI导出Excel详解
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET企业级应用架构设计系列之结尾篇