第10章 协处理器访问指令的实现

2024-03-12 19:08

本文主要是介绍第10章 协处理器访问指令的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

10.1 协处理器介绍

协处理器通常表示处理器的一个可选部件,负者处理指令集的某个扩展,具有与处理器核独立的寄存器。MIPS32架构提供了最多4个协处理器,分别是CP0~CP3,作用:
在这里插入图片描述

  • CP1、CP3用作浮点处理单元,CP2保留,除CP0外的协处理器都是可选的,OpenMIPS没有实现浮点运算,所以CP1,CP3不用实现,CP2也没有作用,而CP0是必须实现的。
  • 截至本章,我们的OpenMIPS处理器实现了很多指令,但是这些指令都是用来运算的,实际的处理器还要支持其他广泛的操作,例如:中断处理,提供可选的配置,观察并控制系统缓存或时钟,地址转换等。MIPS32架构定义的协处理器CP0的作用就是协助实现上述的广泛操作。主要负责工作如下:
  1. 配置cpu工作状态:符合MIPS32架构的硬件通常是很灵活的,可以童国读写一个或一些内部寄存器来改变一些根本的CPU特性(如:将字节次序从MSB变为LSB)
  2. 高速缓存控制:控制读写缓存
  3. 异常控制:异常发生时的检测核处理都由CP0中的一些控制寄存器来定义和控制
  4. 存储管理单元控制:对系统的存储区域进行合理控制、管理和分配,主要是对MMU、TLB的一些配置,管理、访问
  5. 其他:当要把额外的功能集成在CPU中,但又不方便当做外设访问时,常常在CP0中增加一些模块以实现这些功能例如:时钟,时间计数器,奇偶校验等

10.2 协处理器CP0中的寄存器

在这里插入图片描述
在这里插入图片描述
从表中可以发现很多寄存器都是与缓存、MMU、TLB、调试有关的,而OpenMIPS的设计目标是一个轻量级的处理器,并不打算实现缓存,MMU,TLB等复杂功能,所以相关寄存器都可以不用实现,本章主要实现以下7个寄存器:

  1. Count寄存器(标号9)
    在这里插入图片描述
    Count寄存器是一个不停计数的32位寄存器,技术频率一般与CPU时钟频率相同,当计数达到32位无符号的上限时,会从0开始重新计数。Count寄存器可读可写,其字段如表10-3所示:
    在这里插入图片描述
  2. Compare寄存器(标号11)
    Compare寄存器是一个32位的寄存器,与Count寄存器一起完成定时中断功能。当Count寄存器中的计数值与Compare寄存器中的值一样时,会产生定时中断。这个中断会一直保持,知道有数据被写入Compare寄存器。Compare寄存器可读可写。其字段如表10-4所示:
    在这里插入图片描述
  3. Status寄存器(标号12)
    Status寄存器也是一个32位可读可写的寄存器,用来控制处理器的操作模式、中断使能以及诊断状态。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. Cause 寄存器(标号13)
    用于记录最近一次异常发生的原因,也控制软件中断请求。Cause寄存器的各字段如表10-6所示,除了IP,IV和WP,其余字段都是只读的。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
5. EPC寄存器(标号14)
异常程序计数器,存储异常返回地址
6. PRId寄存器(标号15)
处理器标志寄存器,包含:制造商信息,处理器类型以及处理器版本等。
在这里插入图片描述
7. Config寄存器
包含与处理器有关的各种配置和功能信息,大部分子弹由硬件在重启时进行初始化,或定为常量。
在这里插入图片描述
在这里插入图片描述
10.3 协处理器CP0的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.4 协处理器访问指令说明

要实现CP0的控制功能,需要对CP0中的有关寄存器进行设置,这设计对CP0中寄存器的访问,需要使用处理器访问指令。MIPS32指令集架构中定义了2条协处理器访问指令:mtc0.mfc0,前者实现修改CP0中的寄存器,后者实现读取CP0中的寄存器。指令如图所示:
在这里插入图片描述
在这里插入图片描述

10.5 协处理器 访问指令实现思路

10.5.1 实现思路

与HI、LO寄存器的访问一样,对CP0中所有寄存器的写操作也都放在回写阶段。

  1. mtc0实现思路
    在这里插入图片描述
    在这里插入图片描述
  2. mfc0实现思路
    在这里插入图片描述

10.5.2 数据流图的修改

在这里插入图片描述

10.5.3 系统结构的修改

在这里插入图片描述

在这里插入图片描述

10.6 修改OpenMIPS以实现协处理器访问指令

10.6.1 修改译码阶段

10.6.2 修改执行阶段

  1. 修改EX模块
  2. 修改EX/MEM模块

修改访存阶段

  1. 修改MEM模块
  2. 修改MEM/WB模块

10.6.4 修改OpenMIPS模块

10.7 测试程序

这篇关于第10章 协处理器访问指令的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802284

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的