2022-12-01から1ヶ月間の記事一覧
FPGA開発日記は2015年1月4日開始から、おおよそ8年が経過しました。 大みそかの記事は、例によって今年をまとめる記事になります。 新しい所属に入った 今年に入って新たな所属に入った。現在の仕事をつづけながら新しいことを始めるのは非常に大変だ。 ただ…
2022年はRISC-VというISAが大きく進化した年だったと思う。 自分の見える範囲ではあるのだが、今年のRISC-V業界を少し振り返ってみたいと思う。 組み込みでもHPCでも、RISC-Vを避けて通ることはできなくなった。 ありとあらゆるところで、CPUに関わる話はRIS…
LiteXでの自作CPUの動作検証について、まだ正しくシミュレーションを開始できるところまでは至っていない。 その代わり、LiteXの環境でVexRiscVの波形を取得するところまでは動くようになった。 コマンドラインとしては以下のようになる。 ./sim.py --trace …
仕事柄論文を読む機会は多くあって、自分なりの読み方、まとめ方、深堀の仕方などはある程度ルーティンがあります。しかしそれが本当に最適解なのかどうかは分かりません。もっと自分に合ったやり方があるかもしれないし、今の方法がベストなのかもしれない…
LiteXの続き。SoC環境のコンパイルにどうしても時間がかかるので、gccベースのコンパイル環境ではなく、Clangベースのコンパイル環境に置き換えたい。 いろいろ調査して、結果的にたどり着いたのはこれ。makeが2段階に分かれているので気が付くのに手間取っ…
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+RISC-V本のサポートが最近できていなくてIssueが溜まっていたのだが、いくつかLLVM側の実装ミスがあり、サンプルコードをリビルドする必要が生じた。 LLVMサンプルリポジトリは、作業の分岐などを全く発生させずにストレートに伸ばしている。 また、実…
LiteXでのシミュレーション環境の詳細をつかみたくて、いろいろ試しているのだが、どうしてもFSTファイルを取得したいと思っている。 ソースコードを読んでいると、どうもオプションを追加するだけでFSTが取得できる。 ./sim.py --trace --trace-fst これで.…
SCPを使用する際に、2段階でサーバを経由するための方法メモ。 qiita.com
LiteXでのシミュレーション評価環境を引き続き立ち上げているが、Verilatorのコンパイルが終わったところまででどうもシミュレーションがうまくいかない。 いろいろ試した結果、以下の出力までで止まってしまう。FSTファイルもうまく出力できていないようだ…
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で公開された資料を読んでいるのだが、面白そうなのは精華大学とRIOSで開発されているRISC-V Vector Extension向けのランダムテスト生成器だ。 https://static.sched.com/hosted_files/riscvsummit2022/14/RVV-ATG%2BPre.pdf SailというDS…
LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com 前回までの試行で、Verilatorを起動することはできたが、いくつかの環境整備ができていない。defineの挿入ができずコンパイ…
疎行列ベクトル積について調べなくてはならなくなったので、自分の備忘録として残しておく。 行列ベクトル積というのは普通にのことを指すが、行列Aが疎である場合、つまり多くの要素が0である場合には、メモリを節約するために0出ない要素のみを記憶し、そ…
自作アウトオブオーダCPU、非常に久しぶりに論理合成をしてみると、非常に大きなCritical Pathが存在していた。 これは良くないので改善する必要がある。 Vivadoを使用した。使用したFPGAデバイスはよくわからない。 --------------------------------------…
LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com 基本的にはlitex/soc/cores/cpu/mycpu/core.pyを変更するらしい。 ファイルリストの作成。filelist.vfなどからファイルを切…
LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com 自作のコンフィグレーションを追加するときはlitex_setup.pyの実行時に--devをつけなければならないらしい。そうしないとma…
とある事情でRISC-Vのベクトル命令の実行回数のみを記録したくて、特殊なシステムレジスタを実装するのも厄介なので、RISC-VのイベントカウンタであるHPMCOUNTERシステムレジスタを使うことにした。 Spikeを使っているのだが、HPMCOUNTERシステムレジスタは…
LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com Rocketでのコンフィグレーションもできるらしい。以下でチェックしてみる。 下記のコマンドで、Rocket用のパッケージをイン…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 もう少し実装を修正して、複数回の割込み要求の動作に対応した。 とりあえずこれで動作している。次はSoftware Interruptの対応かな? @@ -835,9…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 割込みのかけ方だが、もう一度考え直すことにした。BOOMの実装方法を参考にしている。 割込み要求信号がCSRから挿入されると、ROBの次にコミット…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 テストで割り込みがかかるようになったのだが、途中でテストがFailしている。問題はmcauseの設定だ。 mcauseは、例外の要因をOne Hotではなくエ…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 結局割込み挿入の方針は以下に変えた。 あるいは、割込み要求信号が一度フェッチモジュールでAcceptされると、それ以降は割込み挿入リクエストを…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 RTL側の割込みのかけ方の問題について。思考をまとめておく。 一番単純に思ったのは、割込み要求信号が上がると、これをそのままS2ステージのint…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 RTL側の割込みのかけ方の問題について。思考をまとめておく。 一番単純に思ったのは、割込み要求信号が上がると、これをそのままS2ステージのint…
自作CPUに対して割込みコントローラの実装をしているが、久しぶりに時間ができたのでこれの修正を行っている。 何が問題か? CLINTが割り込みを挿入しても、次の命令フェッチのPCが切り替わるだけですぐに割込みが入るわけではない。 一方でSpike割り込みを…
LiteXは自分でSoC環境を構成することができるツール。自作CPUをSoCに組み込んでみたいので、今回はこれを試行してみる。 github.com $ wget https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py $ ./litex_setup.py --init --inst…