FPGA開発日記

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

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

自作CPUの動作周波数改善検討 (フロントエンドデコード処理対応検討)

フロントエンドの,デコーダの部分が非常に重たい. Slack (VIOLATED) : -17.096ns (required time - arrival time) Source: u_scariv_tile/u_frontend/u_scariv_inst_buffer/u_inst_queue/r_outptr_reg[1]/C (rising edge-triggered cell FDCE clocked by i…

Register Flush-free Runahead Execution for Modern Vector Processorsを読む(1)

ベクトルアーキテクチャに関して面白そうな論文があったので読んでみることにした: https://ieeexplore.ieee.org/document/9651636 Register Flush-free Runahead Execution for Modern Vector Processors 現代のベクトルプロセッサにおいて,ベクトル・ロ…

マイクロアーキテクチャ・シミュレータのトレースログに必要な情報の解析についての論文を読む (5)

前回の続き: msyksphinz.hatenablog.com msyksphinz.hatenablog.com 4. 手法と結果 CVP-1トレースをChampSimフォーマットに変換した後でChampSimのメインブランチで変更の影響を評価した. フロントエンドの分岐予測では,16KエントリのBTBと64KBのITTAGEと…

マイクロアーキテクチャ・シミュレータのトレースログに必要な情報の解析についての論文を読む (4)

前回の続き: msyksphinz.hatenablog.com msyksphinz.hatenablog.com 3.2. 分岐命令 ChampSimは分岐ターゲットバッファ(BTB)を含む比較的詳細なプロセッサ・フロントエンドをモデル化している. ChampSimは異なるタイプの分岐を区別し,分岐命令が読み書き…

自作CPUのVIPTキャッシュポリシ導入検討 (7. Vivadoでのクリティカルパスの確認)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. もうちょっとクリティカルパスを特定するために,LiteXとは独立した環境でVivadoを実行し,Retimingを適用してみる. その結果をもって,現在の真のクリティカルパスを特定しようという訳だ. …

Vivado 2024.1 でMicroBlaze V が使えるようになった?

Vivado 2024.1 でMicroBlaze Vが使えるようになったようなので,詳細を見てみることにした.使ってみるのはのちのち. https://japan.xilinx.com/products/design-tools/microblaze-v.html#processor-details japan.xilinx.com サポートする命令セットアーキ…

マイクロアーキテクチャ・シミュレータのトレースログに必要な情報の解析についての論文を読む (3)

前回の続き: msyksphinz.hatenablog.com 3.1.1. mem-regsの改善 CVP-1 のトレースは、0 から 3 までの書き込みレジスタを持つ命令で構成される。 プリフェッチ・ロードとストアは、CVP-1トレースには書き込みレジスタがない(ベース・アップデートを行うス…

マイクロアーキテクチャ・シミュレータのトレースログに必要な情報の解析についての論文を読む (2)

前回の続き: msyksphinz.hatenablog.com トレースの解析と変換の決定 ChampSimのトレースフォーマット 各命令が64バイトを占有する固定フォーマット 命令ポインタ(8B) / is_branch(1B) / branch_taken (1B) / 書き込みレジスタ (2×1B) / ソースレジスタ (4×…

マイクロアーキテクチャ・シミュレータのトレースログに必要な情報の解析についての論文を読む (1)

特に意味はないのだが,論文をあさっていて以下の論文が気になったのでメモを取りながら読んでみることにした. https://ieeexplore.ieee.org/document/10289581 マイクロアーキテクチャの研究だと,主にパイプラインをモデル化したシミュレータを使って性能…

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…

LiteXのUARTハードウェアの確認 (Migenのソースコードを読む)

LiteXのUARTデバイスの挙動を確認したくて、Migenのソースコードをチェックしている: UARTのデバイスは、Wishboneを経由して接続されている。 litex/litex/soc/cores/uart.py class UARTWishboneBridge(UARTBone): def __init__(self, pads, clk_freq, baud…

自作CPUのSpikeモデルシミュレータ環境の変更 (4. LiteX BIOSのブート)

自作CPUのSpikeシミュレータをかなり久しぶりにアップデートすると、いろんな関数が変わっていてかなり戸惑ってしまった。 LiteXとSpikeの設定を変更できるようにして、とりあえずLiteXモードで動作するようにした。 Spike側のBootROMを削除する必要がある。…