【问题标题】:Risc-V: Minimum CSR requirements for simple RV32I implementation capable of leveraging GCCRisc-V:能够利用 GCC 的简单 RV32I 实施的最低 CSR 要求
【发布时间】:2020-08-01 10:36:09
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 如果有帮助,您能否通过将答案标记为已接受的解决方案来结束问题?

标签: gcc riscv


【解决方案1】:

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

你需要:

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

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

我相信 RARS 支持计时器,所以有一些 对此的企业社会责任。它还提供了一个浮点单元,所以一些 CSR 例外情况以及舍入配置。为了 处理内存访问异常,它有utval。然后它 提供一些柜台。另见Document Version 20190608-Priv-MSU-Ratified中的表2.2

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多