注意:个人学习笔记,后续会进行修改完善,目前还在初步学习阶段。参考gitee上《从零开始写RISC-V处理器》。
中断(中断返回)本质上也是一种跳转,只不过还需要附加一些读写CSR寄存器的操作。
RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。
对于中断模块设计,一种简单的方法就是当检测到中断(中断返回)信号时,先暂停整条流水线,设置跳转地址为中断入口地址,然后读、写必要的CSR寄存器(mstatus、mepc、mcause等),等读写完这些CSR寄存器后取消流水线暂停,这样处理器就可以从中断入口地址开始取指,进入中断服务程序。
输入输出信号列表如下:
序号 | 信号名 | 输入/输出 | 位宽(bits) | 说明 |
---|---|---|---|---|
1 | clk | 输入 | 1 | 时钟信号 |
2 | rst | 输入 | 1 | 复位信号 |
3 | int_flag_i | 输入 | 8 | 外设中断信号 |
4 | inst_i | 输入 | 32 | 指令内容 |
5 | inst_addr_i | 输入 | 32 | 指令地址 |
6 | hold_flag_i | 输入 | 1< |