第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

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J