Risc-V:GCCを活用できる単純なRV32I実装の最小CSR要件

2020-08-01 gcc riscv

GCCで生成されたマシンコードを実行できるRV32Iの最低限のCSR要件は何ですか?

単純なfpgaベースの(埋め込み)実装を考えています。仮想メモリやLinuxのサポートは必要ありません。

また、実装されていないCSR関連の命令を使用しないようにするには、どのGCCフラグを使用すればよいですか?

RISCV Privileged ISA仕様をスキャンした後も、まだ混乱しています。

ありがとう!

Answers

簡単なRISC V実装の例として、 RARSシミュレーターをご覧ください。割り込みハンドラーをプログラムできる十分なCSR(例:例外の原因、プロセッサーのステータス、例外のpc、ベクターテーブルアドレスなど)を実装します。

あなたは必要になるでしょう:

  • utvec —例外ハンドラーのアドレスを設定する
  • ustatus —割り込みを有効/無効にする、
  • uscratch —ソフトウェア例外ハンドラーで必要、
  • ucause —例外の理由を伝える
  • uepc —例外時に未完了の命令のアドレスをuepcします

そして他のいくつか。 RARSでは、レジスタの表示、[ Control and Status ]タブに実装されているレジスタを確認できます。

RARSはタイマーをサポートしていると思います。 そのためのCSR。また、浮動小数点ユニットを提供するため、一部のCSR 例外と丸め構成。ために メモリーアクセス例外を処理するため、 utvalます。そしてそれ いくつかのカウンターを提供しています。 ドキュメントバージョンの表2.2も参照してください。 20190608-Priv-MSU-Ratified

私は、CSRの使用はスタンドアロンアプリケーション構成(たとえば、初期ブートアップ、割り込み処理)に制限されると思います。これらは両方ともアセンブリで記述されます。

コンパイルされたCコード(オブジェクトファイル、.o's)がCSRに何らかの影響を与えるとは想像もできません。その例があれば、共有してください。

一部の環境では、C実装はスタンドアロン(ホストされていないなど)のプログラムを許可します。一部のコンパイラーによって作成されたこのようなプログラムには、スタートアップ構成と例外ハンドラーが含まれている可能性がありますが、これらはユーザーが指定する可能性が高くなります。たとえば、 http://cs107e.github.io/guides/gcc/を参照してください

Related