2024-05-01から1ヶ月間の記事一覧
タイトルの通りなのだが,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ではベクトルレジスタを vuint64m1_t や vfloat32m4_t などの独自の型で表現されている. プログラム実行中にこれをダンプして printf() で表示したいが,ベクトルレジスタはスカラレジスタよりも長いので,単純には表示できない. 専用のイン…
RISC-V Vector Intrinsicを使っていた時に引っかかった問題をメモ.結論としてはLLVMのバグっぽいのだけれども,最新版で発生しているかどうかも確認する. マスク付きのGather命令のレジスタ割り付けについて,正直が付きにくい問題が発生していた: vdest …
幅優先探索(BFS)というのは,有名なグラフアルゴリズムで,その名の通りグラフを同じ距離の順にたどっていくアルゴリズムだ. 以下の資料を参考にして,詳細を掴んでいく. https://mnakao.net/data/2020/HPC175.pdf グラフの直径が小さいというのは,グラフ…
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 何度も論理合成してクリティカルパスが消えるか試しているが,なかなかきつい. 複数のパイプラインで同時にメモリアクセスがあった場合,Forwarding,OoO チェックではどうにもできないのでパ…
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 結局,LSUはもう1ステージ増やすことにした.以下のようなパイプラインになっている. ポイントとしては,ハザードの検出をEX2で行って,その結果に基づくアップデートをEX3で行っている. 最…
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 論理合成時に気になるのは,フォワーディングパスから,早期Wakeupのための信号が直結しておりそれによりクリティカルパスが大きくなっているという点だ. 今のところ見えているのは,フォワー…
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. だいたい4ステージに分けて,なるべくクリティカルパスが発生しないように気を付けているつもりだが. 問題は,LSUの外から入ってきて,それがそのままLSUの外に出ていくようなパスを可能な限…
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. 目的としてはLSUパイプラインのクリティカルパスの削減だが,目標の周波数に向けていろいろと弊害がある. 最新のVivado結果としては,L1Dのキャッシュヒットとフォワーディングの結果から,MS…
msyksphinz.hatenablog.com VivadoのSynthesisオプションを見て気が付いたのだが,synth_designでは明示的に-retimingオプションを追加しないとレジスタ乗りタイミングをしてくれないらしい. 今の自作CPUの実装では,FPNEWのパイプラインはレジスタのリタイ…
自分用のメモ: docs.amd.com
自作CPUのキャッシュについて,VIPTを導入して実装を開始した. データキャッシュについては,VIPTとPIPTの両方をサポートする必要があり(LSUパイプラインはVIPT,それ以外のポートはPIPT),そのあたりの詳細を詰めている. とりあえずPIPTのままで維持して…
msyksphinz.hatenablog.com 時間が空いたが,このリポジトリを見に行ってみるとwellenがアップデートされており,何もしなくてもVerilatorの出力したSystem Verilogが読めるようになっていた. ちょっと使っていてまだ判明していないのは, ビットの展開:バ…
現在の自作CPUは,キャッシュのポリシとしてPIPTを採用している. PIPTというのは,Physically Index, Physically Taggedのことで,物理アドレスを使用してキャッシュのインデックスを参照し,物理アドレスを使用したタグの比較を行う. これのメリットは,L…
前回の続き、自作CPUがFPGA上で動作したので一安心。 波形を見た感じだと、ちょっとコンフィグレーションを間違ってキャッシュがめちゃめちゃ少なくて、バスへの負荷がかかっているような気がしている。 もう少しキャッシュの容量を増やしてみる。 まあ、今…
前回の続き、自作CPUがFPGA上で動作したので一安心。 とりあえず次の試行として、LiteXのSoC周りがWishboneをベースに作ってあるので、AXIに変えてみる。 AXIに変えるためには、とりあえずコマンドラインで以下のようにオプションを変えればいいらしい。 pyt…
前回の続き。結局LiteXのFPGA環境を丸ごとVerilatorにもってきて波形を取った。 やはり波形のデバッグは楽だ。実行が停止してしまうのもちゃんと再現できた。 msyksphinz.hatenablog.com 小さなバグだったが、やはり本番FPGA環境をちゃんとシミュレーション…
msyksphinz.hatenablog.com 前回の結果に基づいて、FPGAで再度動作させてみた。 結果としてはRTLシミュレーションと全く同じ状態まで来たぞ。ただしやっぱりここで止まってしまう。 SDRAMの初期化に問題があるのか? __ _ __ _ __ / / (_) /____ | |/_/ / /_…
msyksphinz.hatenablog.com FPGAでの自作CPUの挙動がどうしてもデバッグできなくなってきたので、FPGA向けRTLシミュレーションの環境を自分で構築することにした。 問題は、LiteXのVerilatorシミュレーション環境と、FPGA向けの論理合成環境は、生成されるRT…