FPGA開発日記

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

2023-03-01から1ヶ月間の記事一覧

"RISC-V Instruction Set Architecture Extension: A Survey"を読む (3. 特定用途向けのRISC-V拡張の研究)

ieeexplore.ieee.org IEEE Explorerにて、上記の論文が公開されていた。最近の命令拡張の動向についてあまりよく知らなかったので、せっかくなので読んでみることにした。 続き。 Section IV. Recent research on RISC-V ISA extension いくつかのシナリオに…

"RISC-V Instruction Set Architecture Extension: A Survey"を読む (2. イントロダクション)

ieeexplore.ieee.org IEEE Explorerにて、上記の論文が公開されていた。最近の命令拡張の動向についてあまりよく知らなかったので、せっかくなので読んでみることにした。 続き。 Section I. Introduction Section II. RISC-V Application Embedded Micropro…

LiteXでのFPGA論理合成環境を調査する (4. 自作CPUに環境を移植してみる、その4)

LiteXはSoCを半自動的に生成するための総合環境で、自作CPUのSoC生成環境もLiteXを使用している。 github.com 前回までで一応Vivadoの論理合成は走り始めたのだが、dtsが作れずに最後まで完走しない。 調査すると、RISC-Vの構成の場合はCLINTとPLICのメモリ…

"RISC-V Instruction Set Architecture Extension: A Survey"を読む (1. イントロダクション)

ieeexplore.ieee.org IEEE Explorerにて、上記の論文が公開されていた。最近の命令拡張の動向についてあまりよく知らなかったので、せっかくなので読んでみることにした。 本論文のポイント:RISC-V ISA拡張に関する既存の研究について包括的なサーベイを提…

LiteXでのFPGA論理合成環境を調査する (4. 自作CPUに環境を移植してみる、その2)

LiteXはSoCを半自動的に生成するための総合環境で、自作CPUのSoC生成環境もLiteXを使用している。 github.com 前回、自作CPU向けにビルドしたつもりが、VexRiscvをコンパイルしてしまっていた。 これを修正するためには、同時にsoc_linux.pyを修正する必要が…

LiteXでのFPGA論理合成環境を調査する (3. 自作CPUに環境を移植してみる)

LiteXはSoCを半自動的に生成するための総合環境で、自作CPUのSoC生成環境もLiteXを使用している。 github.com 前のエラーを回避するためには、リポジトリをアップデートすればいいかもしれない。 リポジトリをアップデートして、再度コマンドを実行してみた…

LiteXでのFPGA論理合成環境を調査する (3. 自作CPUに環境を移植してみる)

LiteXはSoCを半自動的に生成するための総合環境で、自作CPUのSoC生成環境もLiteXを使用している。 github.com まずはオリジナルのmake.pyを改造してやってみようと思う。ロードするCPUを変更する。 diff --git a/make.py b/make.py index f1a72956..3a939171…

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (6. Tenstorrent のISSであるWhisperを試す)

TenstorrentのISSであるWhisperを使って、riscv_arch_testsのテストパタンがどのように動くのかを確認してみる。 使用環境はUbuntu-22.04 LTSである。 以下のパッケージをインストールする必要がある。 sudo apt install libboost-dev libboost-program-opti…

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (5. テストパタンの解析)

ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests を試してみることにした。 自作CPUに適用して、さらなるバグが発見されることを期待している。 https://github.com/tenstorrent/riscv_arch_tests github.com テスト…

LLVM16が公開されたので、LLVM本のベースリポジトリをLLVM16に移す作業をしてみる

LLVM16が公開された。毎度毎度LLVMはバージョンが変わるたびにAPIの仕様が変わるので、自分の作ったLLVM本の実装が変わってしまう。 この修正が毎回大変なのだ。 releases.llvm.org 今回、とりあえずLLVM16のベースブランチに切り替えて作業をしてみる。 rel…

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (4. テストパタンを自作CPUで試してみる)

ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests を試してみることにした。 自作CPUに適用して、さらなるバグが発見されることを期待している。 https://github.com/tenstorrent/riscv_arch_tests github.com 前回の…

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (3. テストパタンを自作CPUで試してみる)

ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests を試してみることにした。 自作CPUに適用して、さらなるバグが発見されることを期待している。 https://github.com/tenstorrent/riscv_arch_tests github.com 前回の…

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (2. テストパタンを自作CPUで試してみる)

ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests を試してみることにした。 自作CPUに適用して、さらなるバグが発見されることを期待している。 https://github.com/tenstorrent/riscv_arch_tests github.com とりあ…

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (1. テストパタンの中身を見てみる)

ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests を試してみることにした。 自作CPUに適用して、さらなるバグが発見されることを期待している。 https://github.com/tenstorrent/riscv_arch_tests github.com ”RISC-…

今月の雑誌「Software Design」の特集はCPUです

技術評論社が刊行している雑誌「Software Design」の2023年4月号は、CPUの特集です。 今回は私も少しだけお手伝いをさせていただきました。 全体的に基本的なCPUの話から、論理演算から始まるCPUの話、ISAの話、マイクロアーキテクチャの話、HPC向けSIMD命令…

LiteXでのFPGA論理合成環境を調査する (2. FPGAのbitstream生成のための調査)

LiteXはSoCを半自動的に生成するための総合環境で、自作CPUのSoC生成環境もLiteXを使用している。 github.com LiteXでのFPGA合成環境は情報があまりなく、まとめておきたいと思う。 先ずはサンプルプログラムを動かす。いろいろ調査した結果、以下の環境を利…

自作CPUの分岐予測器のデグレード解析

これは単純なメモだが、自作CPUの性能が落ちてしまっていて、どこがおかしいんだ?と思いながら見ていたが、どうやらもともと実装ミスがあるっぽい。 GShareの実装に論理的なミスがあったので修正する。 diff --git a/src/scariv_gshare.sv b/src/scariv_gsh…

LiteXでのFPGA論理合成環境を調査する

LiteXはSoCを半自動的に生成するための総合環境で、自作CPUのSoC生成環境もLiteXを使用している。 github.com LiteXでのFPGA合成環境は情報があまりなく、まとめておきたいと思う。 先ずはサンプルプログラムを動かす。いろいろ調査した結果、以下の環境を利…

自作CPUのビルドとシミュレーション環境をDocker化する

自作CPUのシミュレーション環境は、ローカルで作業する場合と強力なリモートサーバ上で作業する場合があるのだが、強力なサーバを使用する場合は必要なツールが入っていないことが多くて、Docker環境を構築してそちらで回すようにしている。 ただ、シミュレ…

自作CPUの新しい動的スケジューラのためのSelectアルゴリズムを考える

Issue Unitの構成を変更する作業を進めている。 Issue Unitはこれまでシーケンシャル割り当て(Cyclic Queue)をしていたが、これをどこからでも割り当て・開放が可能なQueueに変更する。 Issue Unitの変更点を考えながら、いろいろと思いを巡らせている。特に…

自作CPUのISA拡張表記に応じた命令デコーダの対応

RISC-VのISA拡張は、RV64IMAFDCなどの表記に応じてどのような命令がサポートされるのかが決まっている。 例えば、RV64IMAFDCはアトミック命令"A"をサポートしているが、RV64IMFDCはアトミック命令"A"をサポートしていない。 このような区別をするために、自…

自作CPUの新しい動的スケジューラのためのFreeListを考える

Issue Unitの構成を変更する作業を進めている。 Issue Unitはこれまでシーケンシャル割り当て(Cyclic Queue)をしていたが、これをどこからでも割り当て・開放が可能なQueueに変更する。 最初は単純にエントリの割り当てを、空いているエントリから選んで使っ…

BOOMv3 LSUの構成を読み解く (MSHRの構成を見てみる)

BOOMv3のIssue Unitの構成を読み解いて、自作CPUの性能向上の役に立てる。 github.com MSHRの構成についてみてみる。BOOMv3のMSHRはDCache内に接続されている。 val mshrs = Module(new BoomMSHRFile) mshrs.io.clear_all := io.lsu.force_order mshrs.io.br…

CPUの動的命令スケジューリング機構についてまとめる

いろいろ文献を読んだりして、CPUの命令スケジューリング機構の様々な手法についてまとめる。 スケジューラ:フロントエンドパイプラインとバックエンドパイプラインの中間に位置し、命令の発行をつかさどる Wakeup Logic 命令間の依存関係を管理し、どの命…

BOOMv3 Issue Unitの構成を読み解く

BOOMv3のIssue Unitの構成を読み解いて、自作CPUの性能向上の役に立てる。 github.com いくつかのバリエーションがあるようだが正式に採用されているのはこのIssueUnitで、内部にはIssueSlotが複数定義されている。 //-------------------------------------…

BOOMの論理合成結果と自作CPUの論理合成結果比較 (6. 命令バッファの改善)

BOOMと自作CPUの合成結果を比較して、ボトルネックになっている部分を調査したい。 命令バッファが完全なCAM構造になってしまっているので改善したい。RingFIFOを導入して、ヘッドのみデコードするように変更する。 ring_fifo_2ptr #(.T(scariv_ibuf_pkg::in…

BOOMv3 LSUの構成を読み解く

BOOMv3のLSUの構成を読み解いて、自作CPUの性能向上の役に立てる。 github.com LSUと他のモジュールとの接続。 これはいろいろあるのだが、まずはコア本体との接続について。コア本体とのインタフェースはLSUExeIOに定義されている。 以下の信号の中で、req…