对于能够运行 GCC 生成的机器代码的 RV32I,最低的 CSR 要求是什么?
我正在考虑一个简单的基于 fpga(嵌入式)的实现。不需要虚拟内存或 Linux 支持。
另外,我应该使用什么 GCC 标志来防止它使用未实现的 CSR 相关指令?
浏览完 RISCV 特权 ISA 规范后,我仍然很困惑。
Thanks!
看看RARS模拟器作为简单 RISC V 实现的示例。它实现了足够的 CSR(例如异常原因、处理器状态、异常 pc、向量表地址等),您可以对中断处理程序进行编程。
你需要:
-
utvec
— 设置异常处理程序地址
-
ustatus
— 启用/禁用中断,
-
uscratch
- 软件异常处理程序需要,
-
ucause
— 说明异常的原因
-
uepc
— 告诉异常时未完成指令的地址
还有其他一些。在RARS中,您可以在寄存器显示中看到实现的寄存器,控制和状态 tab.
我相信 RARS 支持计时器,所以有一些
为此的企业社会责任。它还提供浮点单元,因此一些 CSR
对于例外情况以及舍入配置。为了
处理内存访问异常,它有utval
。然后它
提供一些柜台。另见表 2.2文件版本
20190608-Priv-MSU-已批准
我认为您对 CSR 的使用将仅限于独立应用程序配置,例如初始启动和中断处理,两者都可以用汇编语言编写。
很难想象编译后的 C 代码(目标文件,.o)会以任何方式触及 CSR。如果您有这样的例子,请分享。
在某些环境中,C 实现允许独立(例如非托管)程序。由某些编译器创建的此类程序可能包括启动配置和异常处理程序,尽管这些更有可能是用户提供的。例如,参见http://cs107e.github.io/guides/gcc/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)