首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mips 5级流水线cpu如何处理异常和软中断?

mips 5级流水线cpu如何处理异常和软中断?
EN

Stack Overflow用户
提问于 2018-08-09 03:27:28
回答 1查看 773关注 0票数 0

我正在用verilog编写一个mips32 5级流水线cpu,但我不知道如何处理异常和软中断。我读过几本mips32手册,但我仍然有一些问题。

  1. 当状态寄存器exl位为1且出现新异常时,是否仍然需要处理此异常?如果我必须这样做,是否应该更新cp0寄存器,如epc、状态、原因和badvaddr?
  2. 埃雷特指令需要清除cp0状态寄存器的exl位吗?
  3. 我在手册中看到了“同步异常”和“异步中断”。同步和异步意味着什么?
  4. 如何处理软中断更合适?我的cpu有5个阶段: Ifetch、Decode、Exe、Mem、Wb,我应该总是检测cp0状态寄存器来确定何时处理软中断吗?谢谢!
EN

回答 1

Stack Overflow用户

发布于 2018-08-18 23:08:02

你的问题太宽泛了,不能仅用一条评论来回答。从我看来,你需要修改计算机架构的基本原理,所以我建议你阅读圣经,A.K.A.计算机架构-一个定量的方法(Hennessy & Patterson)。无论如何,尽管涉及到许多事情,但以下是关于您的问题的总结:

异常可分为同步异常和异步异常;

  • 同步异常是由程序代码产生的异常,是执行给定指令的结果,它们必须按顺序处理。因此,您可以将生成该异常的原因归咎于指令。根据系统的构建方式,它可以处理异常并恢复正常执行。这类例外包括TLB失误,陷阱,错误指令.
  • 异步异常不是当前正在执行的程序的产物,因此,没有指令可对此负责,因此系统可以决定何时处理此类异常。这类异常的一个明显例子是中断。它们可以被无序处理。

底线是,在出现同步异常时必须处理它们,并且必须丢弃以下指令并重新执行(如果可能的话)。但是,系统可以在方便的时候处理异步异常,例如中断是挂起的,并且存在缓存缺失,那么cpu就可以确定这是一个为中断服务的好时机。

现在,关于你的问题,你需要决定什么时候指令是可见的,你的国家何时更新。Ofc你有5个阶段,而通常的事情是,指令在WB阶段是可见的,在那个阶段处理异常,IFF上的指令导致了异常。但是,您不能仅仅在这个阶段做出反应,因为您的管道中还有4条必须失效的指令。同时,在指令导致异常的时刻,它也需要失效(内存也是体系结构状态,因此如果有异常,就不能修改它)。

您可以选择您喜欢的失效机制,也许可以选择一个额外的位,因为管道中的控制信息可以帮助您:P,但这取决于您。至于何时处理中断,这也是你的决定,你可以等待,你可以直接为它服务。这就是实现之间的区别所在。

当出现异常时,您的CPU中的执行流程应该如下:在阶段m导致异常,在时间之前执行指令,因此阶段m+1.必须完成,指示在及时和在,因此阶段m和m-1.必须是无效的,并且不能有任何结构改变产品的这些指示。当In变得可见时,您的逻辑必须修改控制寄存器,以便保存上下文,PC指向将处理异常的服务子例程,其余的控制寄存器包含有关异常的信息。需要注意的是,如果管道中已经有异常,那么就不再需要考虑异常了,因为您需要按顺序服务异常,所以第一个异常将使后续的任何异常失效。

在处理异常后(假定子例程将由OS提供),它将执行eret指令,该指令将恢复以前的上下文,清除异常位,然后安全地恢复执行。注意,根据异常情况,将继续执行导致该异常的指令(例如,TLB失败)或程序将被终止(例如,坏指令)。

正如我在一开始所说,有更多的事情要考虑,但我希望这能澄清一点你的问题。有一些概念,如上下文、虚拟内存等。我不能在这里解释,所以请参考我提到的那本书,因为那是一本很好的书。所有的东西都在那里解释,它会对你有很大的帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51758377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档