RISV-V下OpenXiangShan和NutShell开源处理器CSR部分差异初探

OpenXiangShan和NutShell是当前较为热门且开源的RISC-V处理器,NutShell整体较为简单,为UCAS一生一芯项目的作品,本文的主要目的是分析NutShell和OpenXiangShan的CSR部分的区别。

主要分析和使用的是:

  • The RISC-V Instruction Set Manual Volume I: Unprivileged ISA Document Version 20191213
  • The RISC-V Instruction Set Manual Volume II: Privileged Architecture Document Version 20211203


ZiCSR指令全部实现。当然这也是必须的。

支持的CSR寄存器

NutShell

NutShell 默认支持以下的 CSR 寄存器:

1
2
3
4
5
6
7
8
9
10
11
12
# U 模式(实际未实现)
1. Ustatus 2. Uie 3. Utvec 4. Uscratch
5. Uepc 6. Ucause 7. Utval 8. Uip
# S 模式
1. Sstatus 2. Sedeleg 3. Sideleg 4. Sie
5. Stvec 6. Scounteren 7. Sscratch 8. Sepc
9. Scause 10. Stval 11. Sip 12. Satp
# M 模式
1. Mvendorid 2. Marchid 3. Mimpid 4. Mhartid
5. Mstatus 6. Misa 7. Medeleg 8.Mideleg 9. Mie 10. Mtvec 11. Mcounteren
12. Mscratch 13. Mepc 14. Mcause 15. Mtval
16. Mip

其中U模式在The RISC-V Instruction Set Manual Volume I: Unprivileged ISA Document Version 20190608-Base-Ratified中仍存在,在最新20211203已不存在。
且NutShell中并未实际实现。

OpenXiangShan

LJW:香山的CSR就是多了一些自定义的寄存器,手册要求必须实现的部分是一样的,要是图简单的话就在nutshell上搞就可以。

OpenXiangShan中期待实现的寄存器:

1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# S 模式 
1. Sstatus 2. Sedeleg(X) 3. Sideleg(X) 4. Sie
5. Stvec 6. Scounteren 7. Sscratch 8. Sepc
9. Scause 10. Stval 11. Sip 12. Satp
//1 ~ 12 Supervisor Trap
// For DeBUG not found in RISC-V
Sbpctl, Spfctl, Slvpredctl, Smblockctl, Srnctl, Scachebase, Sfetchctl, Sdsid
# M 模式 (Nearly the same as NutShell)
// Machine Information Registers
1. Mvendorid 2. Marchid 3. Mimpid 4. Mhartid 5. Mconfigptr(New)
// Machine Trap Setup
6. Mstatus 7. Misa 8. Medeleg 9. Mideleg 10. Mie 11. Mtvec 12. Mcounteren
// Machine Trap Handling
13. Mscratch 14. Mepc 15. Mcause 16. Mtval 17. Mip
# 其他较NutShell新增
// Unprivileged Floating-Point CSRs
Fflags, Frm, Fcsr
// Unprivileged Counter/Timers
Cycle, Instret, Hpmcounter3~Hpmcounter31
// Machine Memory Protection
// TBD
PmpcfgBase, PmpaddrBase,
// Machine level PMA
PmacfgBase
PmaaddrBase// 64 entry at most
// Machine Counter/Timers
// Currently, we uses perfcnt csr set instead of standard Machine Counter/Timers
// 0xB80 - 0x89F are also used as perfcnt csr
Mcycle, Minstret, Mhpmcounter3~Mhpmcounter31, Mcountinhibit, Mhpmevent3~Mhpmevent31
// Debug/Trace Registers (shared with Debug Mode) (not implemented)
// Trigger Registers
Tselect, Tdata1, Tdata2, Tinfo, Tcontrol
// Debug Mode Registers
DcsrDpc, Dscratch0, Dscratch1

RISV-V下OpenXiangShan和NutShell开源处理器CSR部分差异初探
http://0vo.lol/2022/10/14/RISV-V下OpenXiangShan和NutShell开源处理器CSR部分差异初探/
作者
Seddon
发布于
2022年10月14日
许可协议