热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

【五级流水线CPU】——4.移动操作指令(6条)

文章目录1.分析1.1指令1.2数据通路图和系统结构图的改变2.代码修改2.1HI、LO寄存器的实现2.2修改译码阶段—ID模块2.3修改执行阶段—EX模块、EXMEM模块2.4修


文章目录

    • 1. 分析
      • 1.1 指令
      • 1.2 数据通路图和系统结构图的改变
    • 2. 代码修改
      • 2.1 HI、LO寄存器的实现
      • 2.2 修改译码阶段—ID模块
      • 2.3 修改执行阶段—EX模块、EX/MEM模块
      • 2.4 修改访存阶段—MEM模块、MEM/WB模块
    • 3. 测试5 移动操作指令


1. 分析


1.1 指令

在这里插入图片描述


  • movn、movz指令
    译码阶段新增:依据读取地址rt的值是否为0,判断是否写入目的寄存器
  • mthi、mtlo指令
    • 译码阶段,给出运算类型 alusel_o 、 运算子类型 aluop_o 的值 , 同时读出 rs 的值 。 由于 mthi 、 mtlo 不写通用寄存器 , 所以 wreg_o 为 WriteDisable ,wd_o为0 。
    • 执行阶段,确定要写 HI 、 LO 寄存器的情况 , 以及要写入的值 , 并将这些信息传递到访存阶段 。
    • 访存阶段,将这些信息再传递到回写阶段 。
    • 回写阶段,依据这些信息修改 HI 、 LO 寄存器的值 (进行写操作)
  • mfhi、mflo指令
    需要读寄存器HI、LO,设计为在执行阶段读

1.2 数据通路图和系统结构图的改变

image-20210619173156174

数据通路图主要有三个变化:
(1)增加了HILO寄存器模块,并且该模块放在回写阶段(红色方框)
(2)将HI、LO寄存器的值传递到执行阶段,在执行阶段增加了一个选择模块,用于选择要参与运算的数据,如果是mfhi、mfo指令,那么就会选择传递过来的HI、LO寄存器的值(红色线)
(3)数据转发(蓝色线)

图6.5 👇对于系统结构图的修改:

image-20210619174501554


2. 代码修改


2.1 HI、LO寄存器的实现

两个寄存器的接口👇

在这里插入图片描述


2.2 修改译码阶段—ID模块

根据指令确定操作类型👇,只需根据功能码op3确定即可

image-20210619175724361


2.3 修改执行阶段—EX模块、EX/MEM模块

基本都是新增接口

EX模块新增接口👇
在这里插入图片描述

EX/MEM模块新增接口👇

在这里插入图片描述


2.4 修改访存阶段—MEM模块、MEM/WB模块

MEM模块新增接口


image-20210619211543146

MEM/WB模块新增接口


image-20210619211618422

3. 测试5 移动操作指令

测试下面的指令,主要看寄存器$4和HI、LO寄存器的值,仿真验证正确

在这里插入图片描述

✔$4寄存器的值从 0x0 变为 0xffff0000 , 并保持两个时钟周期 , 然后变为0x05050000

image-20210619213715261

✔HI寄存器的值,hi_o,从0x0变为0xffff0000,最终变为0x05050000
✔LO寄存器的值,从0x05050000变为0xffff0000,最终变为0x0

image-20210619214045812


推荐阅读
  • 本文探讨了如何在线程中等待事务完成后再执行特定操作,特别是在发送校验短信时确保数据库操作已提交。 ... [详细]
  • 最近购买了惠普ENVY 15 X360笔记本,配备了10代酷睿处理器、8GB内存和512GB SSD,以及MX330独立显卡。这款二合一设备使用体验极佳,但硬盘容量稍显不足。本文将详细介绍如何将其升级至1TB SSD并成功迁移系统。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 探讨如何在Go语言中高效地处理大规模切片的去重操作,特别是针对百万级数据量的场景。 ... [详细]
  • 本文介绍了 .NET 中用于线程间通信的工具 WaitHandle 及其子类 ManualResetEvent 和 AutoResetEvent,并详细解释了线程池的概念及其在优化资源利用方面的优势。 ... [详细]
  • 本文介绍了Java中的com.sun.codemodel.JBlock._continue()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • TDP(热设计功率)是衡量CPU在满载运行时的热量散发标准,但并非其实际功耗。TDP主要对散热系统提出了具体要求,确保散热装置能够有效散出CPU产生的热量。同时,CPU的实际功耗还取决于主板提供的电压和电流,这对主板的设计和性能也提出了相应的要求。 ... [详细]
  • 如何拆解联想C4030一体机并安装额外内存条?
    收到一台朋友赠送的联想C4030一体机,这是一款面向家庭用户的入门级设备。其配置包括Intel i3处理器、4GB内存和500GB硬盘,整体性能较为有限。尽管如此,该机配备了一块1920x1080分辨率的高清IPS屏幕,显示效果尚可。为了提升性能,计划拆解机器并加装额外的内存条。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
author-avatar
lantian2502889907
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有