计算机组成原理(9)----硬布线控制器

控制单元CU若想发出对应的控制信号,则需要以下信息:指令操作码,目前的机器周期,节拍信号,机器状态条件,根据这些信息,CU就能确定在这个节拍下应该发出哪些"微命令",也就是这个节拍下应该进行哪些"微操作"。

对于指令操作数,控制单元CU通过操作码译码器输出的哪一个信号有效,判断当前执行的指令是哪一条指令。

对于目前机器周期,CPU可以根据当前触发器的状态判断该指令目前处于哪一个机器周期

对于节拍信号,节拍发生器接收到时钟部件发来的脉冲信号后,会选择某一根输出线导通,控制单元就可以通过导通的信号判断当前属于机器周期的第几个节拍

对于机器状态条件,机器状态条件也称为标志,可能来自运算器的PSW、ACC的符号位等;也可能来自I/O设备、主存。例如PSW的是否溢出,是正是负等信息,可能会影响到微操作序列的执行流。

CU的每个输出的控制信号对应一个微命令,也就是对应一个微操作。如,要让C1对应微操作为(PC)--->MAR,则将其接到 PCout、MARin即可。

若所有指令的取指周期、T0节拍下一定要完成(PC)--->MAR,则可知C1=FE*T0,那么我们就可以把以下的电路设计在CU控制单元中。若FE=1,T0=1,C1就处于高电平,那么CU就会发出(PC)-->MAR这一"微操作"对应的"微命令"。

所以如果能够得出某个“微命令”对应的逻辑表达式,那么就能设计出这一“微命令”对应的电路。

但对于某些"微操作",在不同的指令周期都会被使用到,例如M(MAR)--->MDR,这类微操作对应的微命令的逻辑表达式又应该如何确定?

我们试着分析以下例子:

FE*T1:FE表示这是在取指周期,取指周期需要进行的微操作如下:

T0:(PC)--->MAR

T1:M(MAR)--->MDR

所以FE*T1表示:若处于取指阶段的T1节拍,那么就需要发出"M(MAR)--->MDR"对应的微命令。

EX*T1(ADD+LDA):EX表示指令处于执行阶段,T1表示执行阶段的T1节拍,ADD表示加法

指令,LDA是取数指令(将数据从主存取到ACC寄存器中)。

所以这整条指令可以翻译为:

若此时处于加法指令的执行阶段,并且处于T1节拍,那么就需要发出"M(MAR)--->MDR"对应的微命令。或者,

若此时处于取数指令的执行阶段,并且处于T1节拍,那么就需要发出"M(MAR)--->MDR"对应的微命令。

看了上面的例子,进一步分析,如何通过微操作得到对应的电路?

设计步骤:

1.分析每个阶段的微操作序列(取值、间址、执行、中断四个阶段)。
2.选择CPU的控制方式,也就是采用定长机器周期还是不定长机器周期?每个机器周期安排几个节拍?
3.安排微操作时序,也就是哪些微操作可以在同一个节拍执行,哪些微操作先执行,哪些微操作后执行?
4.电路设计,确定每个微命令对应的逻辑表达式,并用电路实现。

对于步骤1,2:

假设采用同步控制方式(定长机器周期)一个机器周期内安排3个节拍。

对于各条指令,取值周期的微操作相同:

PC--->MAR

1--->R

M(MAR)--->MDR

MDR-->IR

OP(IR)--->ID(Instruction Decoder,指令译码器)

(PC)+1--->PC

由于一个机器周期有三个节拍,也就是说这些微操作需要在3个节拍内完成,那么某些微操作肯定需要并行完成。

对于各条指令,间址周期的微操作也相同:

Ad(IR)--->MAR

1--->R

M(MAR)--->MDR

MDR--->Ad(IR)

对于各条指令,执行周期的微操作各不相同:

对于CLA指令,就是将ACC中的数据清零:
0--->AC(很多教材中把ACC写为AC)

对于LDA X,这是一个取数指令,取出主存的数据放到ACC中。

Ad (IR)--->MAR,把地址码放到MAR中。

1--->R,控制信号设置为读信号

M(MAR)--->MDR,把主存相应地址的数据放到MDR中

MDR-->AC,把MDR的数据放到ACC中

对于JMP X,就是把该指令的地址码部分(X),放到PC中

Ad(IR)--->PC

对于BAN X,这是条件转移指令,当ACC为负时转移

A0*Ad(IR)+\overline{A0}\cdot (PC)--->PC 

A0是ACC累加寄存器中的符号位,当ACC为负时,A0=1,所以这个指令可以翻译为:

当ACC中的值为负时,就会将指令的地址部分送到PC,当ACC中的值为正时,就会把(PC)-->PC,即不进行条件转移。

所以这里执行的微操作会根据ACC的状态而改变。

这里只罗列了几条,但是需要罗列出所有指令在各个阶段的微操作序列,才总结出在什么情况下需要使用这个微操作。

对于步骤3:

安排微操作时序的原则如下

原则一:微操作的先后顺序不得随意更改

原则二:被控对象不同 的微操作,尽量安排在 一个节拍内完成

原则三:占用 时间较短 的微操作,尽量 安排在 一个节拍内完成,并允许有先后顺序

以取指周期需要用到的微操作为例:

(1)PC--->MAR

(2)1--->R

(3)M(MAR)--->MDR

(4)MDR-->IR

(5)OP(IR)--->ID(Instruction Decoder,指令译码器)

(6)(PC)+1--->PC

将以上微操作分配到3个节拍内

•(1)微操作的对象是CPU中的寄存器,(2)微操作的对象为主存,被控对象不同,符合原则二,可以安排在一个节拍内。

•(1)(3)(4)(5)指令的顺序不得随意更改

•对于(6)微操作,只需要将其放在(1)微操作之后的任意位置即可。

安排微操作时序如下:

(1)(2)被控对象不同,可以安排在同一个节拍下,(3)(6)没有前后依赖的关系,可以安排在一个节拍下完成,(4)(5)即使有先后关系,但是占用时间较短,所以也可以安排在同一节拍完成。

为什么(4)(5)占用时间短呢?

因为MDR→IR 是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成 OP(IR)→ID。也就是可以一次同时发出两个微命令。

那为什么(3)(4)不能放在同一节拍完成呢?

因为在(3)微操作:M(MAR)--->MDR,从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成。

以间址周期为例:

(1)Ad(IR)--->MAR

(2)1--->R

(3)M(MAR)--->MDR

(4)MDR--->Ad(IR)

(1)(2)的被控对象不同,所以可以安排在一个节拍下完成,(3)操作涉及到访存,所以放到一个节拍下,(4)操作再占用一个节拍即可。

以执行周期为例:

(1)非访存指令

① CLA

由于其只有0--->AC这一个微操作,所以可以安排其在末尾的节拍内完成

其他例子同理,可以参考:

(2)访存指令

(3)转移指令

对于步骤4,电路的设计,可以分为以下几个步骤:

1.列出操作时间表,列出在取指、间址、执行、中断周期,T0、T1、T2节拍内有可能用到的所有微操作
2.写出微操作命令的最简表达式
3.画出逻辑图

1.列出操作时间表

取指阶段的操作时间表

对于公共操作,所有指令必须执行:

提示:

IND是 是否处于间址周期 的触发器,如果指令的地址码采用了间接寻址,那么CU还需要完成1-->IND中,也就是接下来会进入间址周期

若没有IND这一特征位,那么1--->EX,也就是接下来直接进入执行周期。

对于非访存指令,一定没有间址周期,而对于访存指令,可能会用到间接寻址,若这些访存指令没有用到间接寻址,也会直接进入到执行周期。

•间址阶段的操作时间表

对于非访存指令,间址周期的微操作肯定都不会执行:

提示:

当进行间接寻址时,可能是多级间接寻址,所以只有等\overline{IND}=0时,才表示此时已经完成了最后一级的间接寻址,此时才可以进入到执行周期,即1--->EX(执行周期)

•执行阶段的操作时间表

将所有指令在T0,T1...节拍中的执行的微操作都记录下来,也就是做了整合,如图所示:

2.写出微操作命令的最简表达式

将微操作综合起来,就是将这一微操作在哪些阶段应用于哪些指令全部罗列出来

根据上图就可得出以下逻辑表达式:

简化后得到:

3.画出逻辑图

根据逻辑表达式就能画出对应的电路图了

把这一电路集成到CU内部,再把信号接到电路相应的接口,就可以通过硬件完成对微操作信号的管理。

硬布线控制器的特点:
指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)

如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。

由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL注入:使用预编译防御SQL注入时产生的问题

目录 前言 模拟预编译 真正的预编译 预编译中存在的SQL注入 宽字节 没有进行参数绑定 无法预编译的位置 前言 相信学习过SQL注入的小伙伴都知道防御SQL注入最好的方法,就是使用预编译也就是PDO是可以非常好的防御SQL注入的,但是如果错误的设置了…

计算机设计大赛 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

Python自动化UI测试之Selenium基础实操

1. Selenium简介 Selenium 是一个用于 Web 应用程序测试的工具。最初是为网站自动化测试而开发的,可以直接运行在浏览器上,支持的浏览器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Googl…

SVN忽略已提交的文件(ignore,移出版本控制)

本文适用于已安装TortoiseSVN客户端的同学。 1、右键点击要忽略的文件夹或文件,鼠标移到“TortoiseSVN”,找到“Unversion and add to ignore list”,选择文件夹,弹出提示框确认忽略。 2、设置完忽略文件后,还需要做…

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab实现GRU-MATT门控循环单元融…

【Maven】介绍、下载及安装、集成IDEA

目录 一、什么是Maven Maven的作用 Maven模型 Maven仓库 二、下载及安装 三、IDEA集成Maven 1、POM配置详解 2、配置Maven环境 局部配置 全局设置 四、创建Maven项目 五、Maven坐标详解 六、导入Maven项目 方式1:使用Maven面板,快速导入项目 …

React Native框架开发介绍,以及其优点

大家好,我是咕噜铁蛋,在今天的文章中,我通过科技手段和大家一起探讨一下React Native框架的开发介绍以及其优点。我深知选择合适的开发工具对于项目的成功至关重要。而React Native作为一款流行的跨平台移动应用开发框架,其独特之…

【服务器数据恢复】FreeNAS+ESXi虚拟机数据恢复案例

服务器数据恢复环境: 一台服务器通过FreeNAS(本案例使用的是UFS2文件系统)实现iSCSI存储,整个UFS2文件系统作为一个文件挂载到ESXi虚拟化系统(安装在另外2台服务器上)上。该虚拟化系统一共有5台虚拟机&…

2024水科技大会暨技术装备成果展览会——高品质供水和饮用水水源安全保障论坛

供水与饮水安全直接关系到人民群众的生活与健康,切实做好城市供水与饮水安全保障工作,是把以人为本真正落到实处的一项紧迫任务。近年来,中央和地方加大了城乡供水与饮水安全保障工作的力度,对标最优质供水城市建设要求&#xff0…

[Angular 基础] - service 服务

[Angular 基础] - service 服务 之前的笔记就列举三个好了……没想到 Angular 东西这么多(ー ー;)……全加感觉越来越凑字数了 [Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 [Angular 基础] - 生命周期函数 [Angular 基础] - 自…

请简述你对SpringMVC的理解

SpringMVC是一种基于Java语言开发,实现了WebMVC设计模式,请求驱动类型 的轻量级Web框架。 采用了MVC架构模式的思想,通过把Model,View,Controller分离,将Web层进 行职责解耦,从而把复杂的Web应…

STM32控制数码管从0显示到99

首先 先画电路图吧!打开proteus,导入相关器件,绘制电路图。如下:(记得要保存啊!发现模拟一遍程序就自动退出了,有bug,我是解决不了,所以就是要及时保存,自己重…

计算机组成原理(10)----微程序控制器

目录 1.微程序控制器的设计思想 2.微指令的基本格式 3.微程序控制器的基本结构 (1)控制存储器CM (2)CMAR (3)地址译码 (4)CMDR (5)微地址形成部件 &…

31.云原生Istio可观测性之官网Bookinfo应用实战演示

云原生专栏大纲 文章目录 可观测性kiali介绍Overview(概观)Application(应用维度)workloads(负载维度)Services(服务维度)Istio Config(配置维度) Kiali部署…

音频声波的主观感受

一、响度 声压是“客观”的,响度是“主观”的。 响度又称音量。人耳感受到的声音强弱,它是人对声音大小的一个主观感觉量。响度的大小决定于声音接收处的波幅,就同一声源来说,波幅传播的愈远,响度愈小…

React18原理: React核心对象之Update、UpdateQueue、Hook、Task对象

Update 与 UpdateQueue 对象 1 ) 概述 在fiber对象中有一个属性 fiber.updateQueue是一个链式队列(即使用链表实现的队列存储结构)是和页面更新有关的 2 )Update对象相关的数据结构 // https://github.com/facebook/react/blob/v18.2.0/pa…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活动文件‘ terminated with exit code -1

更改tasks.json文件里面的type为shell 选择g 选择g,然后点回到text.c,按下F5. 得到结果。 文中内容参考: 从零开始手把手教你配置属于你的VS Code_哔哩哔哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

【EasyV】QGIS转换至EasyV

QGIS转换至EasyV 第一步:导入QGIS第二步 坐标系转换第三步 集合修正第四步 重命名字段第五步 导出WGS geojson坐标第六步 导入EasyV 第一步:导入QGIS 第二步 坐标系转换 第三步 集合修正 第四步 重命名字段 第五步 导出WGS geojson坐标 第六步 导入EasyV…

【vue vue-seamless-scroll】解决vue-seamless-scroll鼠标悬浮才滚动或者只滚动一次就失效的问题

解决问题:使用vue-seamless-scroll发现只有鼠标悬浮上去才滚动,而且滚动一次停止了 目标效果: 解决方案: 最后发现是因为数据需要在页面挂载好就赋值,否则页面在加载完成后,数据无法自动滚动。但因为数据…

c++:蓝桥杯的基础算法2(构造,模拟)+练习巩固

目录 构造 构造的基础概念: 模拟 练习1:扫雷 练习2:灌溉 练习3:回文日期 构造 构造的基础概念: 构造算法是一种用于解决特定问题的算法设计方法。在C语言中,构造算法通常涉及到创建一个函数或类来实…