MIPS异常和中断是如何工作的?

4
我正在开发一个类MIPS32的CPU,想了解MIPS32异常和中断处理的详细信息。MIPS32特权资源架构指南提供的信息不够充分。我有以下问题:
  1. 如果在异常或中断处理程序中发生异常或中断会发生什么?

  2. MIPS32在原因寄存器中有5个硬件中断和2个软件中断。软件中断是否属于异常?还是只是在异常代码值中显示异常?

  3. 中断和异常向量是否不同?

  4. 如果在清除自身异常之前,在流水线中触发了两个异常怎么办?例如,有一个溢出异常,后面跟着另一个异常和一个中断。会发生什么?

欢迎提供任何有用资源的链接。

这是关于硬件架构的问题 - 不太适合于与编程有关的问答网站。请仔细阅读常见问题解答,并予以尊重 - 谢谢! - marc_s
3
当然,在这里我发现了一些与计算机架构相关的内容,所以我认为可以在Stackoverflow上发布,因为没有专门针对计算机架构的Stack Exchange网站。由于这与编程有些相关,所以我认为这是可以接受的。 - Alex
4
这段话讲述了硬件和软件的互动关系,因此适合在stackoverflow上讨论。 - markgz
1个回答

2
  1. 异常处理程序在保存EPC、SR等之后再重新启用异常。
  2. 软件中断是异常。
  3. 一些MIPS CPU使用不同的中断和异常向量构建,但这并不是非常有用。
  4. MIPS具有精确的异常:即异常出现在指令序列中,而且流水线中的第一个异常才会被架构上可见。

查看MIPS Run Linux 是关于MIPS异常和MIPS PRA的最佳和最易读的参考资料。


1
如果在流水线中只有第一个异常(精确异常)可见,那么原因寄存器中应该只有一个软件中断位。另外感谢您的书籍建议。 - Alex
1
由于流水线中的指令(如溢出)引发的异常会在原因寄存器中设置ExCode字段,而不会设置cause.IPx位。通过写入原因寄存器来设置软件中断位(cause.IP0和IP1),它们与流水线异常完全无关。 - markgz
然后异常处理程序将不得不通过对ExCode字段进行测试来识别异常。还有最后一件事,中断优先于异常吗? - Alex
2
是的,中断优先于异常。请参阅MIPS PRA规范中的第6.2.1节。 - markgz
嗨,我想问另一件事情,我读了这本书,我想知道IPL是如何实现的。IPL只是5个硬件中断位吗?CPU是否有硬件来确定是否启用更高的中断位?还有,如果在未处理嵌套的较低优先级中断时从中断返回会发生什么? - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接