FPGA開発日記

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

2022-01-01から1年間の記事一覧

年末なので今年のまとめをしよう2022

FPGA開発日記は2015年1月4日開始から、おおよそ8年が経過しました。 大みそかの記事は、例によって今年をまとめる記事になります。 新しい所属に入った 今年に入って新たな所属に入った。現在の仕事をつづけながら新しいことを始めるのは非常に大変だ。 ただ…

2022年のRISC-V業界振り返り

2022年はRISC-VというISAが大きく進化した年だったと思う。 自分の見える範囲ではあるのだが、今年のRISC-V業界を少し振り返ってみたいと思う。 組み込みでもHPCでも、RISC-Vを避けて通ることはできなくなった。 ありとあらゆるところで、CPUに関わる話はRIS…

LiteXによるSoC環境構築を試行する (10. VexRiscVでの波形取得)

LiteXでの自作CPUの動作検証について、まだ正しくシミュレーションを開始できるところまでは至っていない。 その代わり、LiteXの環境でVexRiscVの波形を取得するところまでは動くようになった。 コマンドラインとしては以下のようになる。 ./sim.py --trace …

どのように論文を読むか

仕事柄論文を読む機会は多くあって、自分なりの読み方、まとめ方、深堀の仕方などはある程度ルーティンがあります。しかしそれが本当に最適解なのかどうかは分かりません。もっと自分に合ったやり方があるかもしれないし、今の方法がベストなのかもしれない…

LiteXによるSoC環境構築を試行する (8. 環境構築をClangベースに置き換える)

LiteXの続き。SoC環境のコンパイルにどうしても時間がかかるので、gccベースのコンパイル環境ではなく、Clangベースのコンパイル環境に置き換えたい。 いろいろ調査して、結果的にたどり着いたのはこれ。makeが2段階に分かれているので気が付くのに手間取っ…

LiteXによるSoC環境構築を試行する (7. Linuxをブートするためのコマンドラインオプションの調査)

linux-on-litex-vexriscvのコードを読んで、どのようにLinuxをブートさせればいいのか調査している。 linux-on-litex-vexriscv/sim.py class SoCLinux(SoCCore): def __init__(self, init_memories = False, sdram_module = "MT48LC16M16", sdram_data_width…

LLVM本サポートサイトにけるLLVMリポジトリとの対応表の作成を自動化する

LLVM+RISC-V本のサポートが最近できていなくてIssueが溜まっていたのだが、いくつかLLVM側の実装ミスがあり、サンプルコードをリビルドする必要が生じた。 LLVMサンプルリポジトリは、作業の分岐などを全く発生させずにストレートに伸ばしている。 また、実…

LiteXによるSoC環境構築を試行する (6. VexRiscV Linuxブートにおける波形の取得)

LiteXでのシミュレーション環境の詳細をつかみたくて、いろいろ試しているのだが、どうしてもFSTファイルを取得したいと思っている。 ソースコードを読んでいると、どうもオプションを追加するだけでFSTが取得できる。 ./sim.py --trace --trace-fst これで.…

SCPを使用する際に、2段階でサーバを経由するための方法メモ

SCPを使用する際に、2段階でサーバを経由するための方法メモ。 qiita.com

LiteXによるSoC環境構築を試行する (5. 自作CPUのコンフィグレーション追加試行)

LiteXでのシミュレーション評価環境を引き続き立ち上げているが、Verilatorのコンパイルが終わったところまででどうもシミュレーションがうまくいかない。 いろいろ試した結果、以下の出力までで止まってしまう。FSTファイルもうまく出力できていないようだ…

サイクル精度シミュレータSniperをPython Wrapperなしで動作させるための備忘録

valgrindを食わせたい時など、Sniperをrun-sniperのPython Wrapperなしで動かしたい時があるので、その備忘録。 export LD_LIBRARY_PATH=/home/msyksphinz/work/sniper/sniper/sniper/xed_kit/lib:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH=/home/msyksphi…

RISC-V Summit 2022で発表されたRISC-V Vector Extension向けテストケース生成プラットフォームについて

RISC-V Summit 2022で公開された資料を読んでいるのだが、面白そうなのは精華大学とRIOSで開発されているRISC-V Vector Extension向けのランダムテスト生成器だ。 https://static.sched.com/hosted_files/riscvsummit2022/14/RVV-ATG%2BPre.pdf SailというDS…

LiteXによるSoC環境構築を試行する (5. 自作CPUのコンフィグレーション追加試行)

LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com 前回までの試行で、Verilatorを起動することはできたが、いくつかの環境整備ができていない。defineの挿入ができずコンパイ…

疎行列ベクトル積 (SpMV) に関する調査

疎行列ベクトル積について調べなくてはならなくなったので、自分の備忘録として残しておく。 行列ベクトル積というのは普通にのことを指すが、行列Aが疎である場合、つまり多くの要素が0である場合には、メモリを節約するために0出ない要素のみを記憶し、そ…

VivadoでRISC-V自作CPUコアの論理合成を行う (Critical Path解析)

自作アウトオブオーダCPU、非常に久しぶりに論理合成をしてみると、非常に大きなCritical Pathが存在していた。 これは良くないので改善する必要がある。 Vivadoを使用した。使用したFPGAデバイスはよくわからない。 --------------------------------------…

LiteXによるSoC環境構築を試行する (4. 自作CPUのコンフィグレーション追加試行)

LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com 基本的にはlitex/soc/cores/cpu/mycpu/core.pyを変更するらしい。 ファイルリストの作成。filelist.vfなどからファイルを切…

LiteXによるSoC環境構築を試行する (3. 自作CPUのコンフィグレーション追加試行)

LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com 自作のコンフィグレーションを追加するときはlitex_setup.pyの実行時に--devをつけなければならないらしい。そうしないとma…

Spikeのイベントカウンタを使ってRISC-Vの特定の命令のイベントを監視する方法

とある事情でRISC-Vのベクトル命令の実行回数のみを記録したくて、特殊なシステムレジスタを実装するのも厄介なので、RISC-VのイベントカウンタであるHPMCOUNTERシステムレジスタを使うことにした。 Spikeを使っているのだが、HPMCOUNTERシステムレジスタは…

LiteXによるSoC環境構築を試行する (2. Rocketでの試行とConfigurationのチェック)

LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com Rocketでのコンフィグレーションもできるらしい。以下でチェックしてみる。 下記のコマンドで、Rocket用のパッケージをイン…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (7. 割込み挿入のデバッグ)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 もう少し実装を修正して、複数回の割込み要求の動作に対応した。 とりあえずこれで動作している。次はSoftware Interruptの対応かな? @@ -835,9…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (6. 割込み挿入方式の変更)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 割込みのかけ方だが、もう一度考え直すことにした。BOOMの実装方法を参考にしている。 割込み要求信号がCSRから挿入されると、ROBの次にコミット…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (5. 割込み要因の検討)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 テストで割り込みがかかるようになったのだが、途中でテストがFailしている。問題はmcauseの設定だ。 mcauseは、例外の要因をOne Hotではなくエ…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (4. 割込み挿入方針の変更)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 結局割込み挿入の方針は以下に変えた。 あるいは、割込み要求信号が一度フェッチモジュールでAcceptされると、それ以降は割込み挿入リクエストを…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (3. 割込み挿入のタイミングについての検討)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 RTL側の割込みのかけ方の問題について。思考をまとめておく。 一番単純に思ったのは、割込み要求信号が上がると、これをそのままS2ステージのint…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (3. 割込み挿入のタイミングについての検討)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 RTL側の割込みのかけ方の問題について。思考をまとめておく。 一番単純に思ったのは、割込み要求信号が上がると、これをそのままS2ステージのint…

自作CPUの割込みコントローラとISS一致検証タイミングの検討 (2. MSTATUSのチェッカーの検討)

自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 何が問題か? CLINTが割り込みを挿入しても、次の命令フェッチのPCが切り替わるだけですぐに割込みが入るわけではない。 一方でSpike割り込みを…

LiteXによるSoC環境構築を試行する

LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com $ wget https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py $ ./litex_setup.py --init --inst…

Matrix Schedulerの論文読み直し (3. Picker)

自作CPUの命令発行スケジューラをMatrix Schedulerに置き換えたくて、論文を読み直している。 Matrix Schedulerは行列のサイズが、命令ウィンドウの数だけ必要 (ROB 32エントリ x 5命令だと160x160くらいの行列が必要?) というのが基本だと思っていて、これ…

Matrix Schedulerの論文読み直し (2. Issue Wakeup Matrix)

自作CPUの命令発行スケジューラをMatrix Schedulerに置き換えたくて、論文を読み直している。 Matrix Schedulerは行列のサイズが、命令ウィンドウの数だけ必要 (ROB 32エントリ x 5命令だと160x160くらいの行列が必要?) というのが基本だと思っていて、これ…

Matrix Schedulerの論文読み直し (1. Issue Wakeup Matrix)

自作CPUの命令発行スケジューラをMatrix Schedulerに置き換えたくて、論文を読み直している。 Matrix Schedulerは行列のサイズが、命令ウィンドウの数だけ必要 (ROB 32エントリ x 5命令だと160x160くらいの行列が必要?) というのが基本だと思っていて、これ…