目录

  • 前言
  • 单周期数据通路
  • 算数逻辑指令(R 型指令)
    • 取指令阶段
    • 译码阶段
    • 执行阶段
    • 内存访问阶段
    • 写回阶段
    • 下一条指令
  • 内存访问指令
  • 分支跳转指令
  • 总结(重要⚠)

前言

昨天复(yu)习了:计组复习(一):乘法器,除法器与浮点加法器,巩固了硬件事如何实现运算操作的。

今天复习 cpu 数据通路,也是很复杂的图。一步一步来吧。


唔。。。。现在是凌晨 1:42,人快芜了,所以博客内容可能会出现一些纰漏 dbq 我爬 Orz

才不是打了一天 lol 导致没时间复习。还有,有没有懂哥知道男刀这版本怎么玩?出暗爪还是幕刃还是渴血?征服者 or 电刑?


编辑下:我的我的 还真漏了。。。

课本上的图有一个多路复用器 01 接口画反了,但是我所有图片都是按照课本的图描图画的,于是也反了,来不及改了,算了(摆烂

就是 Jump 控制信号对应的复用器:

Jump 为 1 时才使用 Jump 的跳转,否则使用 beq 或者 PC+4 作为下一条指令地址。

单周期数据通路

单周期即一个指令的执行,不包括流水线并行,是一种简单(雾)的数据通路。由之前的学习知晓 mips 的指令也分为几个阶段:

  1. 取指令 IF
  2. 译码 ID
  3. 执行 EX
  4. 访问内存 MEM
  5. 写回 WB

硬件正是根据这几个步骤进行设计的,且看 cpu 如何实现。

按照惯例先上图,尽管这个图非常吓人,但是待会我们一步一步来分析它。

单周期数据通路的硬件从左到右对应了 mips 的 5 个阶段:

  • 最左边首先是地址内存,对应取指令与译码阶段(IF / ID)
  • 随后是寄存器文件和 ALU,对应执行阶段(EX)
  • 再右边是数据内存,对应内存访问阶段(MEM)
  • 最后是写回(RW)。

同样的,数据按照从左到右的顺序进行通路遍历,来啦来看就知道了↓

这里以 R 型指令举例。

算数逻辑指令(R 型指令)

算数逻辑指令一般指 add,and 这些指令。他们都是 R 型指令

注:
R 型指令一般指有三个操作寄存器的指令:

这意味着我们需要从两个源寄存器(rs,rt)读取数据,同时将结果写回目的寄存器(rd)。接下来看各个阶段的数据通路:

取指令阶段

首先是取指令阶段,将指令取给控制单元,同时 PC+=4,如下图:

IF 阶段不需要任何的控制数据。

译码阶段

然后是译码阶段,这里需要用到 RegDst 控制信号,以确定目的寄存器是哪个。因为 R 型指令和数据存取指令有着不同的目的寄存器:

通过 RegDst 置 1 控制信号(下图黄色箭头)指挥多路复用器(mux),我们取 [15-11] 作为目的寄存器:

执行阶段

然后是执行(EX)阶段,首先从寄存器中读取两个操作数并且传入 ALU。

此外,需要额外的控制信号(对应下图黄色箭头)来决定数据源是来自寄存器还是由指令给出的立即数给出

值得注意的是,ALUOp 控制信号告诉 ALU 要执行何种运算,因为不同指令需要做不同的运算,比如 add 就是按位相加,and 就是按位与运算。

因为执行的是 R 型指令,这里 ALUSrc 置 0 来确保从寄存器中读取数据,而不是来自于立即数,如下图:

内存访问阶段

再然后是内存访问阶段(MEM),因为 R 型指令都是算数逻辑指令,不涉及内存访问,通过两个控制信号:

  1. MemRead,置 0,表示不需要从内存中读取数据
  2. MemWrite,置 0,表示不需要将数据写入内存

通过两个控制信号,直接跳过这个阶段(对应下图红色箭头绕路):

写回阶段

最后是写回阶段。这里需要两个控制信号:

  1. MemtoReg,置 0,表示写回到寄存器的数据不是从内存中来
  2. RegWrite,置 1,表示需要将结果写回寄存器

控制信号如下图黄色箭头所示:

下一条指令

最后需要完成指令的跳转,这里通过控制信号:

  1. Branch,置 0,表示不需要进行分支跳转
  2. Jump,置 0,表示这不是一条 j 指令,按照 beq 或者 PC+4 来跳转

注:图中 Jump 的复用器画反了。

于是 PC+4 的值被写回 PC,完成下一条指令的跳转,如下图:

注:
这不是 mips 流水线里面的一个阶段
这里单独写出来是因为不想把图画的太复杂,否则很难看清
事实上这应该发生在写回阶段,毕竟写 PC 也是一种写回(雾

内存访问指令

和上面的 R 型指令的推导过程类似,这里我就不画分解图了 dbp 我是懒狗我爬,但是大体思路都是一致的。

回想 mips 每一个阶段都需要 赣神魔 干什么,就能很快得出答案!


首先来看 lw 指令。lw 指令需要 4 个关键的控制信号置 1,他们分别是:

  1. MemRead:置 1,需要读取内存
  2. MemtoReg:置 1,需要将内存数据写回寄存器
  3. RegWrite:置 1,需要写寄存器
  4. ALUSrc:置 1,需要从指令立即数读取 ALU 运算数据

四个关键控制信号由黄色箭头标记,而红色箭头则表示了数据的流向,如下图:


再来看 sw 指令。sw 指令只需两个关键控制信号置 1 即可:

  1. ALUSrc:置 1,表示从立即数读取操作数
  2. MemWrite:置 1,表示要向内存中写数据

两个关键控制信号由黄色箭头标记,而红色箭头则表示了数据的流向,如下图:

分支跳转指令

分支跳转指令也需要两个关键控制信号,他们分别是:

  1. Branch:置 1,表示需要执行分支跳转
  2. Jump:置 0,表示这不是一条 j 指令,按照 beq 或者 PC+4 来跳转

注:图中 Jump 的复用器画反了。

看图:

一步一步来看,就是:

  • 首先根据立即数,计算分支指令跳转的目的地址(由上图蓝色箭头表示),此外注意地址计算乘以 4,因为一条指令占 4 字节
  • 然后 ALU 会判断读取的两个寄存器(rs,rt)是否相等
  • 如果相等,则给出一个控制信号(上图橙色箭头),并且和 Branch 控制信号进行与运算,决定最终是否执行分支
  • 执行 beq / PC+4,写回 PC

总结(重要⚠)

在了解了几种指令的数据通路概要之后,老师给出的真值表似乎不那么棘手了:

此外,附一张内鬼给的控制信号含义表:

主要记忆两个:
ALUSrc:为 0 表示第二个操作数来自寄存器 rt,为 1 表示来自立即数
RegDst:为 0 表示目的寄存器是 rt,为 1 表示目的寄存器号为 rd

此外,注意 ALUOp 是 2 bit 的控制信号,它告诉 ALU 该做什么运算,加 or 减:

控制信号真值表:

计组复习(二):单周期数据通路与控制信号相关推荐

  1. 计算机组成原理单周期mips,计算机组成原理CPU单周期数据通路(MIPS)

    计算机组成原理CPU单周期数据通路(MIPS) [计算机组成原理]CPU:单周期数据通路(MIPS) 寄存器传送语言RTL 1)R(r)表示寄存器r的内容 2)M(address)表示主存储器地址ad ...

  2. 【计算机组成原理】CPU:单周期数据通路(MIPS)

    寄存器传送语言RTL 1)R(r)表示寄存器r的内容 2)M(address)表示主存储器地址address的内容 3)传输方向"←"表示,从右向左传输 4)程序计数器PC的内容直 ...

  3. 计组复习(四):cache,虚拟内存,页表与TLB

    目录 前言 cache高速缓存 直接映射 全相连映射 组相连映射 多级 cache 的 CPI 计算 指令缓存与数据缓存 虚拟内存(重要⚠) 页表 缺页 替换 TLB 例题(重要⚠) FastMath ...

  4. 计算机各个部件配合完成加减乘除(计组学习二)

    大家好,我是贺贺. 计算机组成原理系列 计算机的五大组成部分(计组学习一) 计算机各个部件配合完成加减乘除(计组学习二) 预热一下 当我们了解了计算机的五大组成部分后,下面我来聊聊计算机的各个部件是怎 ...

  5. 【计组复习(二)指令】

    考点概述:1.指令设计原则:2.RISC.CISC:3.寻址方式(重点):4.子函数调用:5.链接. 存储程序概念:多种类型的指令和数据均以数字形式存储于存储器中. 硬件设计四条基本原则 1.简单源于 ...

  6. 计组复习-cache

    Cache的复习 Cache,又名高速缓存器,是为了协调CPU和主存的速度而出现的一种高速的,小的存储器. Cache主要由两部分组成,一部分是一个存储器,另一部分是一个地址变换与映射表,这个映射表完 ...

  7. 多思计组实验实验四、数据通路实验

    实验四.数据通路实验 一.实验目的: 1.理解总线的概念和作用. 2.连接运算器与存储器,理解计算机的数据通路. 3.理解微命令与微操作的概念. 二.预习要求: 1.读懂实验电路图. 2.在实验之前填 ...

  8. 计组复习(一):乘法器,除法器与浮点加法器

    目录 前言 乘法器 优化乘法器 除法器 优化除法器 浮点加法器(重要⚠) 对阶阶段 加法阶段 规格化阶段 舍入阶段 浮点加法小结 前言 zsbd Orz 乘法器 普通乘法器模拟竖式乘法的计算过程. 每 ...

  9. 单周期CPU设计与实现原理分析

    文章目录 单周期CPU设计与实现原理分析 一.单周期CPU的设计思路 二.单周期CPU的模块实现 ① Instruction Memory指令存储器的设计 ② ALU算术逻辑单元的设计 ③ PC程序计 ...

最新文章

  1. python apriori_python apriori算法代码怎么实现
  2. vueinput里只能输入数字_大佬们,vue里面 限制input只能输入数字怎么做啊?
  3. 求一个连通图的割点(去掉一个点后图不再连通)
  4. python官方的扩展索引_Python列表操作与深浅拷贝(6)——列表索引、查询、修改、扩展...
  5. IDEA : 配置checkstyle
  6. 创建你的第一个游戏Pong——概览
  7. 智能图形开发板SmartGLCD
  8. java 客户端调用 Tuxedo中间件
  9. 【从零开始学架构-李运华】01|架构到底是指什么?
  10. 从零开始的FPGA学习5-同步复位D触发器、异步复位D触发器
  11. Python课第3周:平方根格式化
  12. Mac finder 文件剪切方法 怎么剪切/移动 剪切快捷键
  13. 【转】IOS数据库操作SQLite3使用详解
  14. Adobe Flash player 过期
  15. 《算法笔记》总结及练习
  16. 对文件夹下图片重命名
  17. MySQL—Apache+PHP+MySQL实现网上社区
  18. JS中的ele.style.left 和ele.offsetLeft
  19. 计算机的键盘怎么画,【1人回答】怎么用CAD画出电脑的键盘??-3D溜溜网
  20. 条形码编码数据区分及使用建议

热门文章

  1. Unity -- 按钮的使用
  2. 计算机win7安装打印机,win7打印机安装不上的三种解决方法(图文)
  3. 什么是java包?java包作用是什么?
  4. 最近一段时间的面试总结
  5. access 报表隔行底纹_access报表每隔多条记录添加一行空白行
  6. day3-基础数据类型(int、bool、str)
  7. LabVIEW数据采集程序打包中遇到的问题
  8. Teamcenter XML菜单配置
  9. 有哪些简单、免费、适合中小型企业的 CRM 软件?
  10. C# - 使用自定义控件实现名单修改的比较功能