繁体   English   中英

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

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

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

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

另外,我应该使用什么 GCC 标志来防止它使用未实现的 CSR 相关指令?

浏览完 RISCV 特权 ISA 规范后,我仍然很困惑。

谢谢!

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

你需要:

  • utvec — 设置异常处理程序地址
  • ustatus — 启用/禁用中断,
  • uscratch — 软件异常处理程序需要,
  • ucause — 告诉异常的原因
  • uepc — 告诉异常时未完成指令的地址

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

我相信 RARS 支持计时器,因此有一些 CSR。 它还提供了一个浮点单元,因此一些 CSR 用于例外以及舍入配置。 为了处理 memory 访问异常,它有utval 然后它提供了一些计数器。 另请参阅文档版本 20190608-Priv-MSU-Ratified中的表 2.2

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM