FPGA開発日記

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

2024-05-01から1ヶ月間の記事一覧

LLVM18を久しぶりにビルドしようとしたら失敗する問題の解析

タイトルの通りなのだが,LLVM18をRISC-V向けにビルドしようとするとコケてしまう. 以下はDockerfileから抜き出したものなのだが: RUN git clone https://github.com/llvm/llvm-project.git -b release/18.x --depth 1 && \ cd llvm-project && \ mkdir -p…

RVV Intrinsicにおけるベクトルレジスタの値をダンプする方法いろいろ

RVV Intrinsicではベクトルレジスタを vuint64m1_t や vfloat32m4_t などの独自の型で表現されている. プログラム実行中にこれをダンプして printf() で表示したいが,ベクトルレジスタはスカラレジスタよりも長いので,単純には表示できない. 専用のイン…

LLVM16で遭遇したマスク命令の奇妙な命令生成メモ

RISC-V Vector Intrinsicを使っていた時に引っかかった問題をメモ.結論としてはLLVMのバグっぽいのだけれども,最新版で発生しているかどうかも確認する. マスク付きのGather命令のレジスタ割り付けについて,正直が付きにくい問題が発生していた: vdest …

幅優先探索のハイブリッド方式のアルゴリズムについて勉強

幅優先探索(BFS)というのは,有名なグラフアルゴリズムで,その名の通りグラフを同じ距離の順にたどっていくアルゴリズムだ. 以下の資料を参考にして,詳細を掴んでいく. https://mnakao.net/data/2020/HPC175.pdf グラフの直径が小さいというのは,グラフ…

自作CPUのVIPTキャッシュポリシ導入検討 (4. クリティカルパスの削減検討)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 何度も論理合成してクリティカルパスが消えるか試しているが,なかなかきつい. 複数のパイプラインで同時にメモリアクセスがあった場合,Forwarding,OoO チェックではどうにもできないのでパ…

自作CPUのVIPTキャッシュポリシ導入検討 (6. クリティカルパスの削減検討)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 結局,LSUはもう1ステージ増やすことにした.以下のようなパイプラインになっている. ポイントとしては,ハザードの検出をEX2で行って,その結果に基づくアップデートをEX3で行っている. 最…

自作CPUのVIPTキャッシュポリシ導入検討 (5. クリティカルパスの削減検討)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 論理合成時に気になるのは,フォワーディングパスから,早期Wakeupのための信号が直結しておりそれによりクリティカルパスが大きくなっているという点だ. 今のところ見えているのは,フォワー…

自作CPUのVIPTキャッシュポリシ導入検討 (4. クリティカルパスの削減検討)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. だいたい4ステージに分けて,なるべくクリティカルパスが発生しないように気を付けているつもりだが. 問題は,LSUの外から入ってきて,それがそのままLSUの外に出ていくようなパスを可能な限…

自作CPUのVIPTキャッシュポリシ導入検討 (3. クリティカルパスの削減検討)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 目的としてはLSUパイプラインのクリティカルパスの削減だが,目標の周波数に向けていろいろと弊害がある. 最新のVivado結果としては,L1Dのキャッシュヒットとフォワーディングの結果から,MS…

LiteXのVivadoスクリプトにretimingを挿入する試行

msyksphinz.hatenablog.com VivadoのSynthesisオプションを見て気が付いたのだが,synth_designでは明示的に-retimingオプションを追加しないとレジスタ乗りタイミングをしてくれないらしい. 今の自作CPUの実装では,FPNEWのパイプラインはレジスタのリタイ…

Vivadoのsynth_design directiveのオプション一覧

自分用のメモ: docs.amd.com

自作CPUのVIPTキャッシュポリシ導入検討 (2. 実装について)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. データキャッシュについては,VIPTとPIPTの両方をサポートする必要があり(LSUパイプラインはVIPT,それ以外のポートはPIPT),そのあたりの詳細を詰めている. とりあえずPIPTのままで維持して…

オープンソースの波形ビューワSurferを試す2

msyksphinz.hatenablog.com 時間が空いたが,このリポジトリを見に行ってみるとwellenがアップデートされており,何もしなくてもVerilatorの出力したSystem Verilogが読めるようになっていた. ちょっと使っていてまだ判明していないのは, ビットの展開:バ…

自作CPUのVIPTキャッシュポリシ導入検討

現在の自作CPUは,キャッシュのポリシとしてPIPTを採用している. PIPTというのは,Physically Index, Physically Taggedのことで,物理アドレスを使用してキャッシュのインデックスを参照し,物理アドレスを使用したタグの比較を行う. これのメリットは,L…

LiteXのBIOSソフトウェアを独自に構築する方法調査 (7. キャッシュ容量変更試行)

前回の続き、自作CPUがFPGA上で動作したので一安心。 波形を見た感じだと、ちょっとコンフィグレーションを間違ってキャッシュがめちゃめちゃ少なくて、バスへの負荷がかかっているような気がしている。 もう少しキャッシュの容量を増やしてみる。 まあ、今…

LiteXのBIOSソフトウェアを独自に構築する方法調査 (6. バスをAXIに変える)

前回の続き、自作CPUがFPGA上で動作したので一安心。 とりあえず次の試行として、LiteXのSoC周りがWishboneをベースに作ってあるので、AXIに変えてみる。 AXIに変えるためには、とりあえずコマンドラインで以下のようにオプションを変えればいいらしい。 pyt…

LiteXのBIOSソフトウェアを独自に構築する方法調査 (5. FPGAでの動作確認)

前回の続き。結局LiteXのFPGA環境を丸ごとVerilatorにもってきて波形を取った。 やはり波形のデバッグは楽だ。実行が停止してしまうのもちゃんと再現できた。 msyksphinz.hatenablog.com 小さなバグだったが、やはり本番FPGA環境をちゃんとシミュレーション…

LiteXのBIOSソフトウェアを独自に構築する方法調査 (4. FPGAでの動作確認)

msyksphinz.hatenablog.com 前回の結果に基づいて、FPGAで再度動作させてみた。 結果としてはRTLシミュレーションと全く同じ状態まで来たぞ。ただしやっぱりここで止まってしまう。 SDRAMの初期化に問題があるのか? __ _ __ _ __ / / (_) /____ | |/_/ / /_…

LiteXのBIOSソフトウェアを独自に構築する方法調査 (3. シミュレーション環境の確認)

msyksphinz.hatenablog.com FPGAでの自作CPUの挙動がどうしてもデバッグできなくなってきたので、FPGA向けRTLシミュレーションの環境を自分で構築することにした。 問題は、LiteXのVerilatorシミュレーション環境と、FPGA向けの論理合成環境は、生成されるRT…