Risc-V:能够利用 GCC 的简单 RV32I 实现的最低 CSR 要求

Risc-V: Minimum CSR requirements for simple RV32I implementation capable of leveraging GCC

对于能够使用 GCC 生成 运行 机器代码的 RV32I,最低 CSR 要求是什么?

我正在考虑一个简单的基于 fpga 的(嵌入式)实现。不需要虚拟内存或 linux 支持。

此外,我应该使用哪些 GCC 标志以防止它使用未实现的 CSR 相关指令?

看完RISCV Privileged ISA Specification我还是很困惑。

谢谢!

查看 RARS 模拟器作为简单 RISC V 实现的示例。它实现了足够的 CSR(例如异常原因、处理器状态、异常 pc、向量 table 地址等),您可以编写中断处理程序。

你需要:

  • utvec — 设置异常处理程序地址
  • ustatus — enable/disable 中断,
  • uscratch — 软件异常处理程序需要,
  • ucause — 说明异常的原因
  • uepc — 异常时未完成指令的地址

还有其他一些。在 RARS 中,您可以在寄存器显示、控制和状态 选项卡中看到实现的寄存器。

我相信 RARS 支持定时器,所以有一些 为此的企业社会责任。它还提供了一个浮点单元,因此一些 CSR 对于例外情况以及舍入配置。为了 处理内存访问异常,它有utval。然后它 提供一些柜台。另请参阅 文档版本中的 table 2.2 20190608-Priv-MSU-批准

我认为您对 CSR 的使用仅限于独立的应用程序配置,例如初始启动和中断处理,两者都将用汇编编写。

很难想象编译后的 C 代码(目标文件,.o's)会以任何方式触及 CSR。如果你有这样的例子,请分享。

在某些环境中,C 实现允许独立(例如非托管)程序。某些编译器创建的此类程序可能包括启动配置和异常处理程序,但更有可能是用户提供的。参见,例如,http://cs107e.github.io/guides/gcc/