AIA - 新增的CSR
本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。
1 Machine-level CSRs
AIA框架,新增的M模式CSR寄存器,如下:
由于AIA将interrupt cause,从原有的16个扩展到48个,因此:
- 已有的CSR:mie、mip、mideleg需要扩展到64bit,以支持最多64个interrupt cause;
- 对于RV32,增加midelegh、mieh、mvienh、mviph、miph存放高32bit。
miselect和mireg,作为新增的两个CSR寄存器,提供一种途径,可以实现间接的方式访问多个寄存器(非CSR):
- miselect,表示欲访问寄存器的地址;
- mireg,表示欲访问寄存器的值。
miselect表示的寄存器地址范围定义,如下所示:
- 目前 0x00~0x2F 和 0x40~0x6F 是未指定,保留,故不慎使用到会引发 illegal instruction exception。
- 0x30-0x3f这个地址段是最基本的支持,无论是否支持IMSIC均可访问。
- 0x70-0xff作为IMSIC interrupt file的映射地址,只有当hart支持IMSIC时,才可以通过miselect和mireg访问这些寄存器;否则会触发 illegal instruction exception。
- 0xFF之后的地址,可以由使用者自定义使用。
mtopei,仅在实现IMSIC时才存在,用于记录当前最高优先级的外部中断号(即外部中断的minor identity),由IMSIC负责维护。
mtopi,用于记录当前最高优先级的pending和enable位都置位的中断号。
2 Supervisor-level CSRs
AIA框架,新增的S模式CSR寄存器,如下:
与Machine level类似,S态下也新增了如下4个CSR:siselect、sireg、stopei和stopi,以及扩展了pending和enable寄存器:sieh和siph。
siselect表示的寄存器地址范围定义,如下所示:
siselect&sireg功能,与miselect&mireg功能类似,不再赘述。
软件可以通过siselect和sireg访问S level下的IMSIC interrupt file。
3 Hypervisor and VS CSRs
省略。
4 Virtual instruction exceptions
省略。
5 Access control by the state-enable CSRs
省略。
参考链接:
- 《RISCV AIA (三) AIA架构下新增的CSR》