![](/img/trans.png)
[英]Why is rv32gc optimising branchless code with branches for RISC-V?
[英]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.