计算机组成原理课程设计

news2024/11/24 17:31:47

操作控制和顺序控制

  1. 操作控制就是由各种微命令来构成的
  2. 顺序控制就是由P测试后续微地址构成的

这就构成了整个微指令的三个部分

访存指令就是实现对主存中的数据进行访问或存储

一、 操作控制字段是由各种微命令来构成的,这些微命令怎么来设计?

  1. 一个萝卜一个坑,一个微命令占据一个二进制位,有多少个微命令操作控制字段占据多少位,这是什么方式?——直接表示——全水平型
  2. 但如果我们对那些相斥性的微命令采用译码器来进行选通,它可以缩短操作控制字段的长度,但是要注意译码器的选择,四个相斥性的微命令需要3—8译码器,因为2—4译码器只能译出3个相斥性的微命令,4—16的译码器只能译出15个相斥性的微命令,这时要增加译码器的选通,会增加微指令实现的成本和复杂度。因此建议采用水平型。

设计出来微指令之后,设计微指令格式就要来编写微指令,进而来设计我们的微程序控制器的各种器件,包括地址转移逻辑电路,微地址寄存器,微命令寄存器和操作控制器,这一部分就属于设计的操作控制器单元

旧教材

绘制总体的数据通路框图,是一个三总线的结构,

  1. 数据总线,指令总线,地址总线
  2. 地址寄存器连通数据cache有一个地址总线
  3. 程序计数器PC连通icache有一个地址总线

所以上图是一个三总线的结构。

上课的教材是一个单总线的结构,所有的器件都连在一根总线上,不分数据地址还是指令,一根指令有好处有坏处,好处就是简单,有一个设备占据了总线,别的设备就不能用了,所以这就导致了取指分成了4个T周期,数据不断流转,为了防止数据不出错,所以要分成不同的T周期来完成。

自加4是因为它这个通路中的内存条的数据单元,一个内存单元的长度是8位,开始MIPS指令是32位,所以一条指令要放在4个内存单元中,所以下一条指令取指是加4。

3总线的情况下

取指的行为不同

这里是双态的取指结构,

  1. ALU是算数逻辑运算单元,运算需要数据,数据来源于多路开关,
  2. 这个多路开关其实就是X,Y这两个暂存器,这两个暂存器的数据来源于各种寄存器的值,
  3. 但寄存器有R0,R1,R2,R3,因为有四个寄存器,所以在选择的时候需要2-4译码器,然后进行多路运算
  4. 源寄存器的内容还可以输出,有一个Rs_B三态门保证结果输出到总线,左边这一堆就是运算器所需要的东西。

右边,这个图构造了一个双态取指结构,

  1. 数据Cache用来保存地址或者是操作数本身,
  2. 指令Cache用来保存指令,类似于RAM和ROM,做课设的时候就是改成了RAM,ROM
  1. AR放的是地址寄存器,取的是操作数或者是操作数的有效地址,因此AR寄存器连通数据Cache;
  2. PC放的是下一条指令的地址,所以PC连通的是指令Cache,PC的内容打入到指令Cache就可以把这条指令取出来;
  1. 取出来的指令放在指令寄存器IR中,
  2. IR中的形式地址A可以经过ADDR_B三态门送到数据总线;(MOV传送指令)
  3. 取出的指令还要结果指令译码器来进行译码从而来决定取出来的到底是一条什么指令,是加法还是减法;
  4. 然后要再时序产生器中产生各种操作,去控制各个芯片的引脚是开还是关,从而完成本次指令的功能,这就构成了一个非常简单的数据通路。

数据总线是最繁忙的,连接的器件也是最多的,比如ALU的输出,寄存器的输出,形式地址A的输出……这些都要连接数据总线。一个周期内数据总线上只能有一个数据在上面流转,所以这些所有连接到数据总线上的器件都增加了一个三态门,用来控制开关,打开三态门,数据就可以流通到数据总线。

取指怎么取呢?

  1. 指令的地址一定放在PC中,把PC的内容打入到指令的地址总线,根据地址访问指令Cache,然后将指令Cache中的对应的单元中的内容取出来经由指令总线送到指令寄存器IR中,然后对IR的OP字段译码,确定是什么指令,从而产生相应的操作控制信号,PC+1,本次取指操作完成。
  2. 我们会发现在这样的一种状态图中,取指guo'ch过程是很流畅的,不需要分时间,这一过程没有任何的时间冲突,所以把它放在了一个周期中,一个CUP周期。
  3. 对于三总线的结构而言,之前的取值周期的四步内容就可以在一个周期完成,因为它没有任何的冲突,称这个周期是一个CPU周期。

三总线和单总线是有区别的,在取指周期,计算或者是执行周期上都有区别,它的冲突比单总线要少,花费的时间也要少

三态门在选择的时候怎么选择?

在编程的时候我们要设计一个多路选择器,选谁就把谁选通,不同于译码器,在电子教材中有说明。

这个逻辑结构图很稳定,

(微指令的三个部分:各种微命令,P测试和后续微地址)

控制存储器里面放微指令,所有的微指令都放在控制存储器里面;

微地址寄存器用来保存下一条微指令的地址

微命令寄存器用来存放P字段控制字段

地址转移逻辑电路用来形成下一条有效的微地址(后续微地址?)

四个器件构成。

怎么协调工作呢?

  • 刚开始,一开机,因为微地址寄存器中RAM来构成,都是触发器来构成的,一断电就没了,一开机重启了,相当于是0开始,所以所有控制寄存器都要从0开始取,一开机微地址寄存器中的内容就是0,所以我们一定要把取指指令的地址设置为00H,这样保证一开机就能把指令取出来。

怎么取指令?

  • 刚开始是00,把00打入到控制存储器的地址译码电路中,然后找到0号地址单元,将第一条微指令取出来,微指令包括三部分(操作控制字段,P字段,后续微地址字段),所以取出的这条微指令的后续微地址部分就送到微地址寄存器中,P字段操作控制字段送到微命令寄存器中,送进去之后因为这条微指令要实现特定功能,所以操作控制字段中的各个微命令的值就要生成微命令信号,去控制对应的芯片的引脚,来完成本条微指令的功能。

下一条微指令怎么取出来?

  •  如果当前微命令寄存器的P字段显示是没有P测试的,就说明微指令的执行是顺序方式,说明刚才取出来的放在微地址寄存器的后续微地址就是下一条微指令的绝对地址,直接再送到控制寄存器中取指即可。(顺序执行:不是0地址取完取1地址的意思,如果0的后续微地址是3,下一次到3去取,这就是顺序)
  • 存在P测试,微指令的执行方式是跳转的,首先,P测试有两种,一种是对操作码来进行P测试的,来进行转移的;另一种是对各种条件来进行判断的,比如说ZF(是否为0),SF(判断正负),CF(判断有没有进位),通过这些状态推荐来进行测试。当存在P测试时,要将它送入到地址转移逻辑电路中,来强行修改微地址中某几位的值,从而生成一个全新的地址,根据这个全新的地址来取指,这就完成了跳转。比如取出来的后续微地址时00H,P测试修改的是微地址中的第5位,所以微地址被强行修改为了10H,10H送到控制寄存器,根据10H取指。(自动执行的核心!自动取指,自动定位,跳转——>全靠P测试)

一般来说,在T4周期内,要形成微指令的微地址,在T2周期的上升沿到来的时候将读出的微指令打入微指令寄存器,这样就保证在不同的节拍上做不同的事,

先设计汇编指令格式,再把它手工翻译成机器指令,

课程设计用到的所有汇编指令的集合就构成一个指令系统。

设计多少汇编指令取决于选择的题目,用到多少种汇编指令就设计多少条。

x86的汇编格式和ARM不一样,这样的指令格式都叫汇编指令(有自己的助记符,有自己的地址码)

一定要写指令功能说明

Rd目的寄存器

Rs源寄存器

STO访存指令

STOI间接访存指令

P测试就是和有条件的转移来结合的(JNZ,结果不为零就跳转,所有有两个分支,怎么判断结果是不是0呢?这里缺失了一条指令)

  1. JNZ有条件的转移,结果不为零就跳转,怎样判断结果是否为0呢?要增加一条指令CMP比较指令,R1和R2比较,其实是做差,R1-R2(0),关注点是状态,判断结果是否为0,就保留ZF,在JNZ前使用CMP指令,如果ZF=1,说明结果为0,不跳转,做P2测试,如果ZF=0,跳转到一个全新的地址的值,=1,微地址的值不变,JNZ就有两个分支,是P测试。
  1. 如果是JB,小于,关注的就是SF=1,做差为负数,又因为是小于不是小于等于,所以ZF=0。
  2. JEB,小于等于,SF=1

汇编指令怎么翻译成机器指令呢?

因为不翻译成机器指令就没有办法写进内存条,看上图可知指令是16位的,

  • 其中操作码设计成了4位(因为范例中的指令只有11条,操作码编码是采用译码器实现的,所以占4位,最多可以设计16条指令),最好不要超过16条,不然不好借鉴。
  • 11,12位是源寄存器的内容
  • 9,8位是目的寄存器的内容(源寄存器,目的寄存器占两位,可供选择的寄存器有4个,2^2=4,选择2-4译码器)(源寄存器,目的寄存器的位置可以换,但要统一)
  • 立即数im8位,如果是有效地址addr也是8位。
  • XXXX内容无所谓,写成几都没有关系。

最后在运行的时候,把机器指令写入到ROM(指令Cache)中

所有的CPU都是定长的,4个T周期构成

时序产生器说白了就是计数器,每来一个时钟周期就计数一次,对相应的输出值设置为1

00,01,10,11

整个逻辑电路图实际上是3层,

最高这一层就是最终的这个总体框架图

但是在这个控存中还有两层

地址转移逻辑还有一层

总共是3层

在这个模型上设计的汇编指令和机器指令

这些机器指令对应的指令周期图应该怎么写呢?

每一个方框代表一个CPU周期,课本上的每一个方框代表应该时钟周期,这个的区别不重要,重要的是方框里的内容。

第一个周期一定是取指周期,PC送到指令的地址总线上,read 指令Cache(ROM),把读到的指令内容经由指令总线送到IR中,PC+1,再经过一次译码操作完成取指。

这条指令取出来译码了,那要进行什么操作也就清楚了,如果是IN输入指令,就转向IN的那条流程。

P测试有两种

  • P(1):一种是对操作码来进行P测试的,来进行转移的;
  • P(2):另一种是对各种条件来进行判断的,比如说ZF(是否为0),SF(判断正负),CF(判断有没有进位),通过这些状态推荐来进行测试。
  • 当存在P测试时,要将它送入到地址转移逻辑电路中,来强行修改微地址中某几位的值,从而生成一个全新的地址,根据这个全新的地址来取指,这就完成了跳转。

取指方框末尾的00表示设置后续微地址的值是00,根据P(1)测试来修改后续微地址,从而控制执行哪一个指令。

这里取指后有一个P(1)测试,根据取出来的指令的操作码,来修改对应的后续微地址中的某几位的值,然后来转向对应的内容,比如取出来的指令是IN1,就要把后续微地址从00改为01,如果取出来的指令是JNZ,P(1)测试就要做到把后续微地址从00改为07,这样才能取出谁执行谁。

JNZ指令里有一个P(2)测试,是有条件的转移。

前面有一个空指令,前面讲过每一个方框图代表一个T周期/CPU周期(看教材编写),但是P测试不会独立存在,P测试只能紧跟在上一条微指令中,而且同一条微指令只能做一种P测试,要么做P1),要么做P2,所以如果没有这条空指令,会发现P(2)和P(1)都挂载在了取指指令上,发生了冲突,所有为了保证P(2),P(1)分开,一定要加一个空指令,这个空指令的作用就是挂载P(2)测试。

JNZ指令是根据结果是否为0来决定是否跳转,需要判断ZF的值,跳转就是把指令中的形式地址A送到PC中,出现两路分支。

这里的P(2)测试,结果只能是1或0,所以有且仅有两路。

P(1)测试是对操作码的判断,操作码是四位的,所以分支最多有16种。

(第二节课重点讲!!!!!!!!!!!!!!!!!!)

根据设计框图的内容来设计微指令(包括操作控制字段,顺序控制字段)

  • 操作控制就是由各种微命令来构成的
  • 顺序控制就是由P测试和后续微地址构成的
  • 这就构成了整个微指令的三个部分

设计出微指令格式后,再根据刚才的指令周期图有多少个方框就要编写多少个微指令(即赋值),注意,微命令中有一些是1有效,有一些是0有效。

汇编代码->机器指令->微指令

软件层面完成。

硬件层面:(地址转移逻辑电路)

逆时针旋转90°其实就是之前的总体的数据通路框图。直接借鉴这个图,但要注意看跳转指令是否相同。有好几层。不难。最好一次性画完,一气呵成。

ROM中放的就是编写好的机器指令,要把它初始化进去。

控制存储器里面就要把微指令写进去。

两个都初始化进去后,这张图就可以开始运行了。

通过OUT来输出结果,如果结果错了,就调试,看看之前的错了没有。

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

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

相关文章

全新贝锐蒲公英客户端6.0:如何实现快速部署、高效异地组网?

贝锐蒲公英客户端6.0版本进行了全新的升级,此次升级对原有企业版、个人版和个人管理端进行了深度整合,不同身份的用户现在可以统一登录,大大简化了异地组网的流程,同时提升了效率。那么贝锐蒲公英客户端6.0,做了哪些深…

Cortex-M3/M4之SVC和PendSV异常

一、SVC异常 SVC(系统服务调用,亦简称系统调用)用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它…

更新至2022年上市公司ESG评级评分数据合集(含华证、盟浪、wind、彭博、润灵环球、商道融绿、和讯网、富时罗素数据)

更新至2022年ESG评级评分数据合集(含华证、盟浪、wind、彭博、润灵环球、商道融绿、和讯网、富时罗素及世界各国ESG数据) 1、来源:整理自wind和csmar 2、具体时间: 华证:2009-2022年、盟浪:2018-2022年、…

Python实现猎人猎物优化算法(HPO)优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

【教学类-35-02】学号+姓名+班级(小2班)学号字帖(A4横版2份)

图片展示: 背景需求: 突然接到通知,明天下午临时去带小2班。 小班刚入园的孩子,能给他们提供什么样的可操作的学具呢? 思来想去,还是让生成一份学号字帖,让幼儿熟悉自己的学号,让我也熟悉幼儿的名字和学…

苹果手表 Series 6 拆解

步骤 1 苹果手表 Series 6 拆解 Series 6(右)与具有一年历史的姐妹(左)的外部比较仅显示出细微的差异,但这就是拆卸的目的。我们已经知道这些细节: LTPO OLED Retina 显示屏针对常亮功能进行了优化——这次…

Nginx浏览器缓存

浏览器缓存 配置浏览器缓存可以加速静态资源的访问,浏览器对用户访问的资源进⾏存储,下次访问,不⽤再去向服务器寻求资料,直接本地显示,加速访问体验,节省⽹络资源,提⾼效率。Nginx通过 expires…

基于YOLOv8模型的头盔行人检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的头盔行人检测系统可用于日常生活中检测与定位头盔与行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练…

安全测试之w3af 安装

背景: 学习安全测试时,离不开一些安全扫描工具,在类目众多的工具中,w3af是个绕不开的集成工具。由于没有linux环境,故在windows下利用wsl进行部署。亦可通过其它虚拟机安装亦可。 借鉴:Win10下安装w3af_Da…

kali linux多版本java共存并自由切换 update-alternatives

Kali Linux通过apt和dpkg安装的Java不是一样的。 它们安装的Java版本和管理方式可能不同。 1. **apt 安装 Java:** 当您使用apt包管理器在Kali Linux上安装Java时,您实际上是安装了由Kali Linux官方仓库提供的Java版本。 这个版本通常是经过Kali Linux团…

万字总结HTML超文本标记语言

一、前言:什么是网页? 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视频等元素组成。通常…

MySQL 中的索引

文章目录 一、索引的创建二、聚簇索引与非聚簇索引三、B 树索引 一、索引的创建 创建索引的方式包括两种: 隐式创建:数据库一般会在创建 PRIMARY KEY 和 UNIQUE 约束列时自动创建索引。显示创建:使用 CREAT INDEX 语句创建,建立…

Java流式编程的使用

流式编程的使用步骤 使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式。 使用filter方法实现过滤条件 例子为下&#xff08;查询年龄大于18的用户&#xff09;: Testpublic void streamTest1() {List<Student> students Arrays.asList(ne…

【Java 基础篇】Java Function 接口详解

在 Java 编程中&#xff0c;Function 接口是一个非常重要的函数式接口&#xff0c;它允许你定义一个接受一个参数并产生结果的函数。Function 接口通常在各种数据处理和转换操作中使用&#xff0c;例如集合处理、流处理以及函数式编程。 本文将详细介绍 Function 接口的使用方…

基于蚁群算法的航线规划

一、背景 二、代码 main.m clear;clc; r21; %21*21 c21; intau20; xstart1; ystart3; %起点 xend20; yend18; %终点 gd1; xt[5,11,8,16,12,15,17,19]; %障碍物 yt[9,15,7,3,12,8,15,12];threat8; NCmax200; %迭代次数%初始化数据 Gamma_A0.9; Rho_A0.2; Alpha_A1; Beta_A3;…

SpringBoot集成easypoi实现execl导出

<!--easypoi依赖&#xff0c;excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency>通过Exce注解设置标头名字和单…

RocketMQ源码解析(下 )

一、Producer发送消息过程 1、普通发送消息过程 一般发送消息都是new一个DefaultMQProducer&#xff0c;所以先找到DefaultMQProducer类 先进行DefaultMQProducerImpl的初始化&#xff0c;所有Producer的启动过程&#xff0c;最终都会调用到DefaultMQProducerImpl#start方法…

Llama2-Chinese项目:2.3-预训练使用QA还是Text数据集?

Llama2-Chinese项目给出pretrain的data为QA数据格式&#xff0c;可能会有疑问pretrain不应该是Text数据格式吗&#xff1f;而在Chinese-LLaMA-Alpaca-2和open-llama2预训练使用的LoRA技术&#xff0c;给出pretrain的data为Text数据格式。所以推测应该pretrain时QA和Text数据格式…

C++11 - 右值引用

临时空间 临时空间具有常性&#xff0c;什么时候会产生临时空间呢&#xff1f; 1、函数传值返回 把aa拷贝给临时空间&#xff0c;如果是很大的对象并且进行深拷贝&#xff0c;消耗会很大 证明&#xff1a; 这是list模拟实现迭代器的和&#xff01;重载时&#xff0c;while( it…

Secrets

文章目录 主要内容一.命令行创建1.命令行创建代码如下&#xff08;示例&#xff09;: 2.解释 二.环境变量secret1.使用刚才创建的密码&#xff0c;创建Pod并进行尝试。代码如下&#xff08;示例&#xff09;: 2.解释 总结 主要内容 命令行创建环境变量secret 预备知识 Secrets…