这次翻译有点差错,后续会更新这个翻译,所以有错误的话还请不吝赐教
Ref:
http://t.csdnimg.cn/eqCKk RISC-V SoC内核——中断 代码讲解 作者:小wang的IC自习室
http://t.csdnimg.cn/VzPc3 RISCV——指令集spec阅读笔记——特权级 作者:KGback
代码来源:GitHub - liangkangnan/tinyriscv: A very simple and easy to understand RISC-V core.
作者:liangkangnan
`include "defines.v"
// core local interruptor module
module clint(
input wire clk,
input wire rst,
// from core
input wire[`INT_BUS] int_flag_i, // 来自于if-id模块,外围设备送来的中断信号,经由if-id模块打一拍发送过来
// from id
input wire[`InstBus] inst_i, // 来自于id 发出的指令输入,这个指令其实是来自于PC计数器以及rib总线发送过来的计数器,一级一级流水打拍打过来的
input wire[`InstAddrBus] inst_addr_i, // 来自于id一拍一拍流过来的,主要源头是PC寄存器
// from ex
input wire jump_flag_i,
input wire[`InstAddrBus] jump_addr_i,
input wire div_started_i,
// from ctrl
input wire[`Hold_Flag_Bus] hold_flag_i, //Ctrl接收过jmp / hld 相关信号之后根据逻辑处理得出来的暂停
// from csr_reg
input wire[`RegBus] data_i, // CSR寄存器送数据来的
input wire[`RegBus] csr_mtvec, // mtvec,保存发生异常时处理器需要跳转的地址(用来设置中断和异常的入口)。中断和异常需要跳转的基地址不同。
input wire[`RegBus] csr_mepc, // mepc 保存发生异常指令的地址(中断返回的地址)。
input wire[`RegBus] csr_mstatus, // mstatus 全局中断使能和其他状态信息。
input wire global_int_en_i, // 译码阶段会提前译出CSR系列指令,然后会提前准备好数据,然后打给ex模块,ex模块确认是csr之后将输出接上输入最后再打给CSR寄存器,CSR寄存器最后再打给clint
// to ctrl
output wire hold_flag_o, // 流水线暂停标志
// to csr_reg
outp