【计算机组成 课程笔记】5.2 处理器的设计步骤(2)

news2024/11/20 1:38:17

课程链接:

计算机组成_北京大学_中国大学MOOC(慕课)

5 - 3 - 503-运算指令的控制信号(14-'58-'-')_哔哩哔哩_bilibili

【计算机组成 课程笔记】5.1 处理器的设计步骤-CSDN博客 中介绍了处理器的设计步骤中的前三步,接下来我们继续介绍控制信号相关的逻辑。

4. 确定控制信号

1. 运算指令的控制信号

以加法指令为例。加法指令的操作可以分为三个步骤,首先从指令寄存器中取回指令;然后将rs和rt指定的寄存器的内容相加,运算结果保存在rd寄存器中;最后是计算下一条指令的地址,由于加法指令是顺序执行的,所以PC=PC+4。

那我们依次来看这些步骤。

对于第一步来说,并不是加法指令特有的,所有指令都有这个步骤。这个操作是在取指部件IFU中完成的。在t0时钟上升沿之后很短的时间,PC寄存器的输出已经稳定,它的输出就是当前要取回的这条指令的地址,这个信号会连接到指令存储器的地址输入端,那经过一小段访问时间之后,指令寄存器就会将这个地址所指定的存储单元中的内容放在其输出端,也就是我们要取回的指令的二进制编码。

第二步我们要执行加法运算。不过运算前我们还要从寄存器中取操作数,寄存器的地址是在刚才取回的指令编码中的,根据R型指令的位域分布,我们可以从32位指令中选取对应的部分,例如25-21位组成rs,20-16位组成rt,15-11位组成rd。这三个信号就会被连接到寄存器堆的输入端,这样rs所对应的寄存器的内容就会输出到busA端,rt所对应的寄存器的内容会输出到busB端。

接下来对这些数要做哪些操作,就由标成红色的控制信号们来决定了。下图给出了加法运算所需要的控制信号的值。

最后一步,更新PC寄存器的内容。除了分支指令以外,其他指令都是顺序执行,因此PC=PC+4。当时钟上升沿t1来临时,PC寄存器就会更新会PC+4。

我们再来看另一类指令,运算指令中I型格式的指令,以逻辑或指令为例。这条指令同样也分为三步,其中第一步和第三步和之前的加法指令一致。第二步是rs寄存器中的内容和16位立即数进行零扩展以后的32位数进行或运算,结果保存到rt寄存器中。

由于I型指令的15-0位是立即数,因此和刚才加法指令IFU的输出不同的是,我们要再加一组信号,表示低16位的立即数。这个信号也会连接到数据通路上,只是连接的位置有所不同,连接到了扩展功能部件。

那根据这条指令,控制信号又该如何设置呢?如下图所示。

2. 访存指令的控制信号

对于LOAD指令,第一步和第三步与运算指令都是一样的。在这里我们只讲解第二步相关的操作。

这是我们的数据通路,如果当前IFU取得的是一条LOAD指令,这些控制信号会如何设置呢?

然后我们来看STORE指令,STORE指令我们也只看第二步相关的操作。

3. 分支指令的控制信号

分支指令是一类特殊的指令,它能够改变程序的流向。beq指令的操作同样可以分为三步,第一步同样是取指令;第二步是判断rs和rt两个寄存器的内容是否相等,可以通过一个减法来进行判断;第三步是更新PC寄存器,对于beq指令来说,所谓的分支就是如何改写PC寄存器,所以它的重点在于第三步。当第二步的转移条件不成立时,和其他指令一样,顺序执行,则PC=PC+4。而如果转移条件成立,则需要跳转到PC+4+立即数的符号扩展*4,也就是说beq指令中所携带的这个立即数表示的是转移目标地址和下一条指令地址之间的差值,而且这个差值是以4个字节也就是32位为单位的。这个规则是在指定MIPS指令系统时约定的。

接下来我们看一下如何实现相应的控制信号。我们直接来看第二步。这一步包括从寄存器中取出两个操作数进行减法运算,这个部分和之前的减法指令是一样的,因此现有的结构不需要修改就可以完成减法的功能。但是对于==0的判断是之前没有的,判断一个数是否等于0对于ALU来说是很容易的,所以我们在ALU中增加一个输出,叫做zero,如果运算结果为0,zero信号会被置为1。

然后来看第三步。现在对于IFU来说,它有了两个输入的信号,一个是之前就有的nPC_sel,还有一个是刚增加的zero。对于nPC_sel信号来说,如何选择呢?不妨把输入列一个表,当nPC_sel=0时,PC=PC+4,当nPC_sel=1(branch)时,zero=0,则PC=PC+4,zero=1, 则PC=Target Address。所以可以看出这里可以用一个与门来实现。

那基于这样的分析,我们就可以对IFU进行改造,从而满足beq指令的需求。另外对于Target Address如何得到,也需要进行一定的扩展:首先需要进行符号扩展,其次将其左移两位,也就是完成*4的操作,最后再+PC+4,得到跳转的地址。

5. 集成控制信号

现在我们已经知道对于每一条指令,每一个控制信号应该赋予什么样的值,但这些信号的值是如何自动产生的呢?

我们把之前的控制信号都集合在一起,可以知道控制整个数据通路运转的控制信号一共有8个。我们已知的指令编码中除了之前提到的数据位域以外,还有两个位域,opcode和func,之前未提及,但是它们和控制信号有着密切的关系。

具体是什么关系呢?我们列一个表,不同的func和opcode域和控制信号的值之间,存在着某种联系。

以RegDst信号为例,只有当前是加法或减法操作时,这个控制信号才需要为1,其他时候都为0就可以了。那加法和减法又是如何判断呢?对于加法来说,首先它是一条R型指令,同时它的func域的第5位为1,其他位都为0,因此我们可以把add信号表示成以下的公式。用类似的方法也可以得到sub信号。有了这个表达式,我们就可以用与门和非门画出产生这个控制信号的电路图来,这样对于这个控制信号来说,它的控制逻辑就能够自动产生了。

用同样的方法还可以得到其他控制信号的逻辑表达式。

然后我们可以画出一个控制器的实现示意图来。我们把opcode域和func域接到一组由与门和非门构成的逻辑电路中,这个逻辑电路就实现了add,sub,rtype,ori,lw,sw,beq的计算,从而产生了一组中间信号,再将这组信号接入由或门组成的逻辑电路,最后就产生了我们想要的所有的控制信号,这样就有了控制器的实现。

有了这个控制器,处理器就能一条接一条地取回指令,并自动地执行下去。

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

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

相关文章

一文了解大模型工作原理——以ChatGPT为例

文章目录 写在前面1.Tansformer架构模型2.ChatGPT原理3.提示学习与大模型能力的涌现3.1 提示学习3.2 上下文学习3.3 思维链 4.行业参考建议4.1 拥抱变化4.2 定位清晰4.3 合规可控4.4 经验沉淀 写在前面 2022年11月30日,ChatGPT模型问世后,立刻在全球范围…

模电课程设计

主要内容跟本科实验关系很大,可以用来借鉴。 包含文件有:实验报告、Multisim仿真文件,资料很全,有问题可以私信 目录 1、模电课设:用Multisim简单了解二极管 2、模电课设:用Multisim简析三极管与场效应…

Python基础语法练习

输出欢迎信息 方法一: 定义变量赋值并输出,用将变量和字符拼接 username "EMT" print("Welcome,” username)方法二: 用format函数格式化输出变量,并替换{}中的内容 username "EMT" print("welcom…

vue3_动态添加路由,以及路由刷新后页面丢失问题

首先,是要将权限数据本地持久化存储 接着在router文件夹index.js中引入store中的权限数据,并导出一个方法,判断权限当中的数据,并跟roleEnum路由规则匹配,匹配上之后则addRoute() 在登录之后调用这个方法,动…

django添加数据库字段进行数据迁移

1.修改view.py里面的变量 2.在model.py新增字段 3.打开terminal并将环境切到项目所在环境,切换方式为 4.执行命令 python manage.py makemigrations backend python manage.py migrate

CSP 201403-1 相反数

答题 用两个优先队列,一个记录正数升序排序,一个记录负数降序排序,然后在两个队列都不为空的情况下取二者top相加与0比较大小,如果等于0,那么相反数的数目增加一对并同时弹出队列,如果小于0,那…

智能称重解决方案

智能称重解决方案 在现代制造业中,确保产品质量是至关重要的。尤其是在装配产线中,经常面临着漏装、少装等装箱异常问题,这可能导致产品不合格、客户投诉以及损失。为了应对这一挑战,我们需要开发一套智能监控系统,采…

PostgreSQL Page结构

Page结构 在数据文件(堆表、索引、自由空间映射和可见性映射)内部,它被划分为固定长度的page(或block),默认为 8192 字节(8 KB)。每个文件中的页面从 0 开始顺序编号,这…

管理类联考——数学——汇总篇——知识点突破——应用题——线性规划

⛲️ 一、考点讲解 线性规划特征 线性规划是运筹学中辅助人们进行科学管理的一种数学方法。线性规划所研究的是:在一定条件下,合理安排人力物力等资源,使经济效果达到最好。一般地,求线性目标函数在线性约束条件下的最大值或最小…

Shell编程之sort

sort 命令将文件的每一行作为比较对象,通过将不同行进行相互比较,从而得到最终结果。从首字符开始,依次按ASCII码值进行比较,最后将结果按升序输出。 基本语法 sort (选项)(参数) 常用选项 常用选项 -n根据字符串的数字比较-r…

多功能批量剪辑软件一天剪辑1000条原创视频

下面一个视频用了呆头鹅批量剪辑软件播放量竟然能达到100多万。 他是怎么做到的呢?下面我给大家详细的说一下 ​ 在短视频平台开展业务,需具备批量制作视频的能力,为了超越同行,需大量更新作品,争取更多曝光。素…

pycharm打开远程宿主机或远程docker文件夹目录方法,以及设置代码同步

pycharm打开远程宿主机或远程docker文件夹目录方法,以及设置代码同步_pycharm怎么查看服务器目录_Sisyphus~~的博客-CSDN博客1.如何显示远程的文件夹目录2.如何设置代码同步_pycharm怎么查看服务器目录https://blog.csdn.net/weixin_62321285/article/details/12740…

机器学习入门教学——梯度下降、梯度上升

1、简介 梯度表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(梯度的方向)变化最快,变化率(梯度的模)最大,可理解为导数。梯度上升和梯度下降是优化算法中常用的…

兵工七子,学硕爆冷!公平,可不考英语!

一、学校及专业介绍 沈阳理工大学(Shenyang Ligong University),位于辽宁省沈阳市。东北老牌工科院校,始建于1948年,是我军为培养新中国急需的兵工专门人才在东北地区创建的第一所本科军工高等学校,是共和…

【C++】构造函数与析构函数用途 ( 代码示例 - 构造函数与析构函数用途 )

文章目录 一、构造函数与析构函数二、代码示例 - 构造函数与析构函数用途 一、构造函数与析构函数 在 C 语言中 , " 构造函数 " 和 " 析构函数 " 都是 C 类中的 特殊函数 , 分别用于 初始化对象销毁对象 ; C 类 在创建 实例对象 时自动调用 构造函数 这个…

打造高效的私密论坛网站:Cpolar内网穿透+HadSky轻量级搭建指南

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置)2.4 公网访问测试 总结 前言 经过多年的基础…

Kubernetes (K8s) 解读:微服务与容器编排的未来

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

怎样做思维导图?教你这样轻松制作

怎样做思维导图?思维导图是一种非常有用的工具,它可以帮助你更好地组织和展示你的想法。无论是个人使用还是团队协作,思维导图都是一个非常好的选择。在制作思维导图时,有很多工具可以使用,那么今天就给大家来介绍一下…

JVM的双亲委派模型

定义与本质: 类加载器用来把类文件加载到JVM内存中。从JDK1.2开始,类加载过程采用双亲委派模型,保证Java平台安全。 父类委托的定义: 一个类加载器在接到加载类请求的时候,首先不会去加载这个类,而是把这个…

基于SSM的毕业论文管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…