2022-10-01から1ヶ月間の記事一覧
RISC-VのOut-of-orderedコアであるBOOMの詳細を少し調べていたのだが、Chicken Bitというのがある。 どうもアウトオブオーダ実行を止めることができる機能らしい。 と思ったら、あれ?違うかな。完全にPipelineをクリアしながら進めるのか。じゃあInOrderよ…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 In-orderモードでパイプラインを解析す…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 特定の領域のみのサイクル情報を取得し…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 いろいろ設定を見てみると、In-orderモ…
まあ自分用のメモというか、失敗記録なのだけれども。 例えば、以下のfcvt命令が急に命令例外を出した。SpikeのConfigurationはRV64GCにしているので間違いない。どこを確認すべきか? core 0: 3 0x0000000080000e52 (0x20278bd3) f23 0xffffffff5f800000 co…
RiVec、つまりRISC-V Vectorized Bencmark SuiteはベンチマークスイートをRISC-Vベクトル向けに移植したベンチマークスイートだ。 メインリポジトリのRiVecはバージョンが古くてRVV1.0のintrinsicではコンパイルすることができない。 Pull Requsetを観察して…
AAPGを久しぶりに触っている。久しぶりにテストパタンを動かして問題ないことを確認したので、もうちょっと命令範囲を拡張することにした。 https://gitlab.com/shaktiproject/tools/aapg FPU系の命令でバグがちょいちょい見つかっている。riscv-testsでカバ…
AAPGを久しぶりに触っている。久しぶりにテストパタンを動かして問題ないことを確認したので、もうちょっと命令範囲を拡張することにした。 https://gitlab.com/shaktiproject/tools/aapg 現時点ではAAPGはFPU/RMW命令を生成するようになっていない。config.…
RISC-Vベクトル命令の自動生成がかなりサマになってきた、という話を聞いたので、GCCのAutoVectorizationを見てみることにした。 使用したのは、RVVに対応したRISC-V GCCだ。 $ riscv64-unknown-elf-gcc --version riscv64-unknown-elf-gcc () 12.0.1 202205…
RISC-V Vector Intrinsicのドキュメントでは、サンプルアプリケーションがいくつか格納されている。 https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/master/examples それぞれのアプリケーションにおいて、どのようにベクトル命令が使用されてい…
Googleのリリースしたセキュリティを重視したオペレーティングシステムのKataOS、RISC-Vも視野に入れているということで面白そうなのでチェックしてみることにした。 https://opensource.googleblog.com/2022/10/announcing-kataos-and-sparrow.html まず、K…
サイクル精度シミュレータSniperは、トレースファイルをベースとしたサイクル精度解析シミュレータだ。 RISC-Vのサポートにおいては、SpikeからSIFTファイルを生成し、それをSniperに加えることでサイクル計算を行う。 これだけだとSniper側にRISC-Vのデコー…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 Spikeのシミュレーション環境を見ると、OpenSBIによってブート処理が始まった後、Linuxカーネルを0x8020_0000に展開してからブート処理がスタートするようだ。 カーネルイメージ…
前回、Spikeシミュレータで外部デバイスのライブラリを動的ロードする方法が分かったので、これを自作CPUのシミュレーション環境に導入することを考える。 自分はSpikeを取り込んだ単体でELFファイルをシミュレーションする環境を作っているのだが、これに対…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 Buildrootで必要なシリアルデバイスを用意して、Spikeシミュレーションで一致検証ができるようにした。 C++側のシリアルデバイスのモデルを作成して、Spikeに動的ライブラリとし…
riscv-isa-sim(いわゆるspikeシミュレータ)は便利なツールだが、例えば外部デバイスとして任意の場所に自作のデバイスを追加することができる。 例えば、自分の場合だと0x5400_0000に自作のシリアルデバイスを追加したい場合はどうするか。いろいろ情報は少…
SniperにRISC-Vのベンチマークを実行させたくて、マイクロベンチマークをSpike上でシミュレーションしSIFTを生成する試行をしている。 SIFTの生成時にどうもSpikeがハングしてしまうか、予期しない動作をしてしまい様子がおかしい。 どうもみてみると、SIFT…
自作RISC-V CPUコアの方は、いくつかの実装の変更を行って性能がかなり伸びるようになった。 Coremarkの環境を構築して測定できるようにしておく。最大構成ではコンパイルに時間がかかるので、4種類の構成で性能を測定した。 あとはRV64に限定している。ITER…
RISC-Vのベクトルテストケースを試したくて、簡単なテストを探している。rvv-intrinsic-doc をチェックしている。 https://github.com/riscv-non-isa/rvv-intrinsic-doc テストケースを試すためには、intrinsicをサポートしたGNU Toolchainを構築しなければ…
自作RISC-V CPUコアの方は、いくつかの実装の変更を行って性能がかなり伸びるようになった。 GShareの実装 LDQ/STQのスケジューリングの調整 フラッシュ信号の最適化 Dhrystoneのコンパイルオプション最適化 いろいろ頑張った結果、Standardコンフィグレーシ…
SniperでRISC-Vのベクトル命令をサポートするために、RISC-Vデコーダについて解析する。 SniperのRISC-Vデコーダは、RV8をベースとしている。RV8のデコーダに情報を追加していく。 https://github.com/michaeljclark/rv8 命令の追加 (meta/opcodes) # RVV (a…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 Read Modify Writeについていくつかの修正を加えたのと、LR/SCについて簡単な実装を行った。 LR/SCはどちらも最も古い命令になってから実行する、投機的実行をしない方式で実行し…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 いくつかの基本的な機能が整ったので、Linuxの起動を試行しながらデバッグをしている。 Spikeとの実装を合わせるために、TIME CSRレジスタの実装を削除した。これはメモリマップ…
Sniperのログを見ながら、Sniperのサイクル計算モデルを検証してみようと思う。 ROBは1サイクル毎に更新されるので、その状態を観察する。 Outstanding loads: 1 stores: 0 [ 0] DONE@+37 3 LOAD 100c: ld t0, 24(t0) {0x1018} [ 1] READY@+36 4 EXEC ( 1) 1…
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行している。 ChipyardやSpikeの環境では、BootROMに、最初のブートシーケンス及びDevice Treeの情報がバイナリ形式で格納されている。 これをどのように作成するのかについてまとめておく。 …
RISC-VのLinuxブート環境を構築したので、次にこれをRTL環境で実行してみようと思う。 まずは、ブートローダをロードする前のBootROMを作成する必要がある。 SpikeやChipyardでは、BootROMが定義されており、CPUは最初にそこから命令をロードして実行する。 …