FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-V

RISC-V Vector命令をサポートした自作命令セットシミュレータの実装検討 (4. Unit Strideメモリアクセスの実装)

自作命令セットシミュレータのRISC-V Vector Extensionサポート、とりあえずCSR命令の確認が終わったので先に進めていく。 RISC-V Vector Extensionのメモリアクセスにはいくつか種類があって、大きく分けると3種類。 Unit Stride:最もシンプルなメモリアク…

RISC-V Vector Extension v0.9のCSR仕様2

RISC-Vのベクトル拡張の理解に当たり、複雑怪奇なシステムレジスタを理解するのは大変だ。ここではRISC-Vベクトル拡張が備える謎のシステムレジスタについて一気に解説していきたい。 ちなみに最新のRISC-V Vector Extension 0.9をベースに解説している。 RI…

RISC-V Vector Extension v0.9のCSR仕様1

RISC-Vのベクトル拡張の理解に当たり、複雑怪奇なシステムレジスタを理解するのは大変だ。ここではRISC-Vベクトル拡張が備える謎のシステムレジスタについて一気に解説していきたい。 ちなみに最新のRISC-V Vector Extension 0.9をベースに解説している。 RI…

RISC-V Vector命令をサポートした自作命令セットシミュレータの実装検討 (3. メモリアクセス命令の実装検討)

久しぶりになってしまった自作命令セットシミュレータのベクトル命令サポート。少し時間があるので再挑戦する。 前回、全命令のデコーダを生成したのだが、全命令ではなかった。ロードストア命令が抜けている。今回はロードストア命令の内基本的なものを作っ…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(7. リファレンスアルゴリズム)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 6. リファレンスアルゴリズム 以下のようなエンコーダの実装を考える。 Qualified? : 命令がフィルタリングのクライ…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(6. パケットフォーマット2)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 5. トレースエンコーダの出力パケット 5.7 Format 1 パケット このパケットには分岐命令の情報が含まれている。また…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(5. パケットフォーマット)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 5. トレースエンコーダの出力パケット トレースエンコーダでは、以下の情報を含まなければならない。 パケットタイプ…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(4. フィルタリング)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 4. フィルタリング エンコーダがトレースを生成するためのメカニズムを示している。例えば、以下の条件ではトレース…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(3. Hartのエンコーダインタフェース)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 3. Hartのエンコーダインタフェース 3.1 インタフェースの要求 以下の情報がインタフェースとして転送されればよい。…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(2. 分岐トレース)

RISC-V トレースフォーマットの勉強。続き。 github.com github.com 1章ずつ、翻訳ではなく日本語でサマライズしていく形式で進めていく。 Chapter.2 分岐トレース 命令データトレース、もしくは分岐トレースはとあるアドレスからスタートして命令の実行情報…

RISC-Vのトレースフォーマット仕様書が公開されたので読んでみる(1. イントロダクション)

RISC-Vのトレースフォーマットの仕様書が公開された。現在はドラフト段階だが、ドキュメントがGitHubで公開され、pdfファイルも入手することができる。 各種CPUアーキテクチャのトレース形式など、あまり勉強したことが無いのでこれを機に読んでみよう。 git…

RustでRISC-V命令セットシミュレータを作ろう (17. マクロの導入)

Rustで作る自作命令セットシミュレータの続き。アトミック命令をすべて実装したのはいいが、同じような記述を大量に並べてしまっておりどうも気持ちが悪い。 AMOADD.Wの実装 fn execute_amoadd_w (&mut self, inst: InstT) { let rs1 = Self::get_rs1_addr(i…

RustでRISC-V命令セットシミュレータを作ろう (16. アトミック命令の実装)

Rustで作る自作命令セットシミュレータの続き。残りの命令を実装していく。次はアトミック命令の実装だ。これもC++で実装したことがあるのでRustに移植するだけである。 Rustでの実装で気をつけなければならないのは型の変換を明示的に行わなければならない…

RustでRISC-V命令セットシミュレータを作ろう (15. flamegraphによる性能解析)

Rustで作る自作命令セットシミュレータの続き。テストパタンによってはシミュレーションにかなり時間がかかっているような気がするので、どこに負荷がかかっているのかを解析したい。 色々調べていると、Rustで書いたプログラムの性能解析としてFlamegraphと…

RustでRISC-V命令セットシミュレータを作ろう (14. リグレッションテストの全確認)

Rustで作る自作命令セットシミュレータの続き。RV32とRV64でテストはある程度動くようになっているので、ここらでリグレッションテストを通して細かいところを修正していこうと思う。 Rust実装の修正 RV32とRV64で微妙に動作が異なる部分 例えばシフト命令の…

RustでRISC-V命令セットシミュレータを作ろう (13. RV32仮想アドレスモードの実装)

Rustで作る自作命令セットシミュレータの続き。RV32のテストは動くようになってきたので、次はRV32の仮想アドレスモードの対応について考える。 これも昔作ったC++のRISC-Vシミュレータですでに対応しているので簡単なのだが、いくつかRV32とRV64で切り替え…

RustでRISC-V命令セットシミュレータを作ろう (12. RV32機能の実装)

Rustで自作命令セットシミュレータを作っているが、RV64のテストパタンはある程度Passできるようになっている。 RV32についてだが、これまではRV32とRV64を別のクラスとして実装していた。しかしどうもこれでは冗長なコードがあってたまらないので、統一して…

RustでRISC-V命令セットシミュレータを作ろう (11. 命令デコーダの実装)

Rust製自作命令セットシミュレータ、命令デコーダの実装を少しずつ改造している。 与えられた機械語から、命令をデコードして意味を解析する。 RISC-Vの機械語は非常に単純なので、命令デコーダの設計は簡単だ。 単純にcase文を並べていくだけで完成する。こ…

RustでRISC-V命令セットシミュレータを作ろう (10. Rustでテストケースを作成する)

Cargoのテスト環境を使ってリグレッションテストを作る Rustで作った命令セットシミュレータについて、テストの方法を考え直した。 現在はMakefileで管理をしているが、Cargoの機能を使ってテスト環境を構築した方が良さそうだ。 そこでRustのmain()を直接呼…

RustでRISC-V命令セットシミュレータを作ろう (9. 命令のディスアセンブル機能を実装する)

Rustを使ったRISC-Vシミュレータの調整を行っている。デバッグ・トレース機能の調整を行った。 もうひとつの機能は、命令の機械語からニーモニックを出力する機能だ。 実はこの機能は必須の機能ではない。 spike-dasmというriscv-toolsを使えば、逆アセンブ…

RustでRISC-V命令セットシミュレータを作ろう (8. デバッグ・トレース機能の整理)

Rustを使ったRISC-Vシミュレータの調整を行っている。デバッグ・トレース機能の調整を行った。 ISSを使ってテストプログラムをデバッグする場合、いくつかの情報を出力してプログラムの動作を監視する必要がある。例えば、ISSからは以下の情報が出てくると役…

RISC-V Vector命令をサポートした自作命令セットシミュレータの実装検討 (2. 全ベクトル命令のデコーダ生成)

ベクトル命令の全命令をリストアップしたので、次はいよいよベクトル命令のデコーダ生成に入る。デコーダの生成を人力で頑張る必要はなく、私のRISC-Vシミュレータはすべて自動的にデコーダを吐き出す仕組みが搭載されている。したがって、ひたすらベクトル…

RISC-Vのベクトル命令のエンコーディングをまとめる

RISC-Vのベクトル命令について勉強している。ベクトル拡張の仕様はv0.8をベースにしている。命令のエンコーディングについて調べているが、理解に時間がかかっているのでまとめてみる。 公式の仕様書には、以下のようなエンコーディングのリストが載っている…

RISC-V Vector命令をサポートした自作命令セットシミュレータの実装検討

RISC-V Vector命令の仕様がかなり固まってきた。いつの間にかVer 0.8が公開され、命令のニーモニックも安定しつつある。 RISC-V "V" Vector Extension Version 0.8-draft-20191117 https://riscv.github.io/documents/riscv-v-spec/riscv-v-spec.pdf ついで…

RISC-V Bit-Manipulation命令を自作RISC-Vシミュレータに実装解説 (2. 命令のツールセットをビルド)

RISC-V Bit-Manipulationの環境については、GitHubでツールセットやテストパタンが公開されている。ここには、Imperasのシミュレータ、コンプライアンステスト、ツールセット、Verilogモデルなどが含まれている。自作RISC-Vシミュレータに実装するにあたりこ…

RISC-V Bit-Manipulation命令を自作RISC-Vシミュレータに実装解説 (1. 命令デコーダの実装)

Bit Manipulation 仕様書から抜粋 RISC-Vの命令エンコーディングのなかで、Bit-Manipulationはある程度仕様が固まってきている。 命令フォーマットは以下のドキュメントに記載されている。 github.com これをひたすら自作シミュレータの命令デコードJSONファ…

RISC-Vのベクトル拡張命令の仕様書日本語版を最新仕様v0.8にアップデートした

https://msyksphinz-self.github.io/riscv-v-spec-japanese/html/index.html 結構昔にRISC-V Vector Extensionの仕様を日本語化したものを公開していたのだが、公開して移行全くアップデートしていなかったので最新仕様に対応すべく修正を行った。 前回の公…

Western DigitalのRISC-VコアSweRV-EH1 (4. テストベンチのコンパイル環境)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが動かせるようになった。 久しぶりに見てみると、アセンブリをコンパイルしてシミュレーションに使用する環境がマージされている。 テストには hello_world.s hello_world2.s …

Western DigitalのRISC-VコアSweRV-EH1 (3. オリジナルプログラムを動かす)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが動かせるようになった。 構造が分かってきたので、今度は自分のプログラムを動かしてみたい。 github.com マニュアルのメモリマップを見ても正しいようには思えないのだが、と…

Sipeed MAIX : RISC-V 64 AI Moduleが届いた

随分前にIndieGogoで募集していた、RISC-V ASICチップ+AIモジュールキット、Sipeed MAIX が届いた。 モードと外部ディスプレイ、カメラなどの基板がセットだ。 www.indiegogo.com とりあえずまだ時間がないのでまだ触れない... あと、ドキュメントが余りな…