《自己动手写CPU》第十一章-学习笔记

第十一章:异常相关指令的实现

本章是实现教学版OpenMIPS处理器的最后一步,将实现异常相关指令。

11.1MIPS32架构中定义的异常类型

在MIPS32架构中,有一些事件要倒短程序的正常执行流程,这些时间有中断陷阱、系统调用以及其他任何可以打断程序正常执行流程的情况,统称为异常。《自己动手写CPU》第十一章-学习笔记_第1张图片《自己动手写CPU》第十一章-学习笔记_第2张图片

《自己动手写CPU》第十一章-学习笔记_第3张图片

 11.2精确异常

在MIPS32的文档中经常会读到“精确异常”这个术语,OpenMIPS的实现蓝图中也设计为实现精确异常,本节将介绍精确异常的相关概念。

当一个异常发生后,系统的顺序执行会被打断,此时有若干条指令处于流水线上的不同阶段,处理器会转移到异常处理议程,异常处理结束后返回原程序继续执行,因为不希望异常处理例程破坏原程序的正常执行,所以对于异常发生时,流水线上没有执行完的指令,必须记住它处于流水线的哪一个阶段,以便异常处理结束后能恢复执行,这便是精确异常。

对于一个实现精确异常的处理器,在异常发生时,都会有一个被异常打断的指令,称为异常受害者,也可称为发生异常的指令,该指令前面的所有指令都要被执行到流水线的最后一个阶段,也就是正常执行完成,但是该指令及该指令之后的指令都要被取消,就像从来没有执行过一样。为了实现精确异常,必须要求异常发生的顺序与指令的顺序相同,在非流水线的处理器上,这一点是显然的,但是对于拥有流水线的处理器,就会有些复杂。在流水线处理器上,异常会在流水线的不同阶段发生,带来潜在的问题。

在流水线处理器中,异常发生的顺序与指令的顺序不一定相同。为了避免这一情况,先发生的异常并不立即处理,异常事件只是被标记,并继续运行流水线。在大多数处理器中,会设计一个特殊的流水线阶段,专门用于处理异常。如果某一条指令的异常事件捣打料流水线的这个阶段,那么就会进行异常处理,并且当前处于流水线其余阶段的指令的异常事件都会被忽略。

11.3异常处理过程

《自己动手写CPU》第十一章-学习笔记_第4张图片

 《自己动手写CPU》第十一章-学习笔记_第5张图片

《自己动手写CPU》第十一章-学习笔记_第6张图片

 《自己动手写CPU》第十一章-学习笔记_第7张图片

《自己动手写CPU》第十一章-学习笔记_第8张图片

 11.4异常相关指令介绍

11.4.1自陷指令

   自陷指令有12条,按照指令中是否包含立即数、可以分为两类

1.不包含立即数的自陷指令

《自己动手写CPU》第十一章-学习笔记_第9张图片

 《自己动手写CPU》第十一章-学习笔记_第10张图片

 《自己动手写CPU》第十一章-学习笔记_第11张图片

2.包含立即数的自陷指令 

《自己动手写CPU》第十一章-学习笔记_第12张图片

《自己动手写CPU》第十一章-学习笔记_第13张图片

 《自己动手写CPU》第十一章-学习笔记_第14张图片

 11.4.2系统调用指令syscall

《自己动手写CPU》第十一章-学习笔记_第15张图片

 11.4.3异常返回指令eret

《自己动手写CPU》第十一章-学习笔记_第16张图片

 11.5异常处理实现思路

《自己动手写CPU》第十一章-学习笔记_第17张图片

 11.5.1实现思路

OpenMIPS异常处理的实现思路是:在流水线的各个阶段收集异常信息,并传递到流水线访存阶段,在访存阶段统一处理异常信息。流水线各个阶段需要收集的异常信息如下。

--在流水线译码阶段判断是否有系统调用异常,是否是返回指令、无效指令。

--在流水线执行阶段判断是否有自陷异常、溢出异常

--在流水线访存阶段检查是否有中断发生。

《自己动手写CPU》第十一章-学习笔记_第18张图片

 11.5.2修改数据流图

在访存阶段增加了异常判断模块,主要作用是依据从译码、执行阶段传递过来的信息,以及CP0中寄存器的值,判断是否要处理异常,如果要处理异常,那么按照异常类型给出新的指令地址送入PC。

《自己动手写CPU》第十一章-学习笔记_第19张图片

 11.5.3修改系统结构

添加部分接口。

《自己动手写CPU》第十一章-学习笔记_第20张图片

 11.6修改OpenMIPS以实现异常处理

11.6.1修改取指阶段

1.修改PC模块

《自己动手写CPU》第十一章-学习笔记_第21张图片

 2.修改IF/ID模块

《自己动手写CPU》第十一章-学习笔记_第22张图片

 《自己动手写CPU》第十一章-学习笔记_第23张图片

 11.6.2修改译码阶段《自己动手写CPU》第十一章-学习笔记_第24张图片

 《自己动手写CPU》第十一章-学习笔记_第25张图片

 《自己动手写CPU》第十一章-学习笔记_第26张图片

你可能感兴趣的:(fpga开发)