FPGA開発日記

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

FPGA開発日記 カテゴリ別インデックス

RISC-V のベクトル命令の仕様一覧のページ RISC-V Vector ISA-extensions サイクル精度シミュレータ Sniperの勉強 サイクル精度シミュレータ Sniper AMBA CHIについての勉強 AMBA CHIについての勉強 オープンソース形式検証ツールSymbiYosysを用いて形式検証…

heaptrack を使ってメモリ挙動を調べたメモ

Docker 上で動いている C++ プログラムのメモリ使用量が大きく、挙動も重そうだったので heaptrack を使って確認した。 まずは素直に heaptrack を実行。 heaptrack ./a.out 相対パスを付けないと実行ファイルとして認識されない点に注意。 実行自体は成功し…

GitHub ActionsでSPEC CPU2006の実行を自動化する (7. GitHub Actionsを並列実行)

SIFT生成処理は順次実行していたのだが、SIFT生成の問題点が改善したので、並列実行に戻したいと思う。 SIFT生成オプションに合わせて、設定を変更していく。特に、 response_files は使用しない。 # 変更前 "${QEMU}" ${QEMU_FLAGS} -plugin "${QEMU_FRONTE…

GitHub ActionsでSPEC CPU2006の実行を自動化する (6. SIFT生成用のフロントエンドプラグイン修正)

SIFT生成時に誤って大量のトレースファイルが生成されてしまっているので、これのデバッグをしてみる。 Region of Interest (ROI) の開始条件判定において、m_in_roiの状態チェックが逆になっていた。具体的には、以下のような問題があった。 // 問題のあっ…

OCA (Open Chiplet Atlas) について学ぶ (5. システム管理 / システム時間の管理)

OCAシステムアーキテクチャの仕様書を日本語に翻訳して、Sphinxでドキュメント化している。 OCAは、異なるベンダーのチップレットがオープンなエコシステムで連携することを可能にするシステムアーキテクチャとのこと。 www.openchipletatlas.org 4.4節 シス…

OCA (Open Chiplet Atlas) について学ぶ (4. OCAにおけるブート手順)

OCAシステムアーキテクチャの仕様書を日本語に翻訳して、Sphinxでドキュメント化している。 OCAは、異なるベンダーのチップレットがオープンなエコシステムで連携することを可能にするシステムアーキテクチャとのこと。 www.openchipletatlas.org SiPにおけ…

OCA (Open Chiplet Atlas) について学ぶ (3. アドレス変換のルール)

OCAシステムアーキテクチャの仕様書を日本語に翻訳して、Sphinxでドキュメント化している。 OCAは、異なるベンダーのチップレットがオープンなエコシステムで連携することを可能にするシステムアーキテクチャとのこと。 www.openchipletatlas.org チップ間通…

OCA (Open Chiplet Atlas) について学ぶ (2. トポロジとアドレス変換)

OCAシステムアーキテクチャの仕様書を日本語に翻訳して、Sphinxでドキュメント化している。 OCAは、異なるベンダーのチップレットがオープンなエコシステムで連携することを可能にするシステムアーキテクチャとのこと。 www.openchipletatlas.org チップレッ…

OCA (Open Chiplet Atlas) について学ぶ (と同時にGitHub Pagesで日本語ページを公開する作業)

OCAシステムアーキテクチャの仕様書を日本語に翻訳して、Sphinxでドキュメント化している。 OCAは、異なるベンダーのチップレットがオープンなエコシステムで連携することを可能にするシステムアーキテクチャとのこと。 www.openchipletatlas.org 現在のドキ…

GitHub ActionsでSPEC CPU2006の実行を自動化する (5. SIFT生成とSniper実行の順次処理)

SimPoint解析パイプラインにおいて、SIFTファイルの生成とSniperシミュレーションを実行する際に、同時並行で実行するとディスク容量不足になって落ちてしまう。 これは、SIFTファイルを全ベンチマーク分生成したうえでSniperの実行に移るのでSniperの実行に…

あけましておめでとうございます2026

あけましておめでとうございます。今年も、FPGA開発日記をよろしくお願いします。 2026年1月4日で、FPGA開発日記は11年目を迎えます。 昨年は本当に忙しい1年で、ブログを書くのもほとんどままならなかった。 ブログの執筆もAIにアシストしてもらうことが非…

common_cells リポジトリに含まれる メモリインターフェース変換モジュールの実装詳細

common_cellsに入っている 2つのメモリインターフェース変換モジュールについてみてみる。 1. mem_to_banks_detailed.sv mem_to_banks_detailed.svは、メモリアクセスを複数の並列バンクに分割する実際の実装を含むモジュールである。 https://github.com/pu…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (7. ストリーム・インタフェースの変換モジュール)

stream_to_mem.sv フロー制御付きのリクエストを持つが、出力データにフロー制御がないメモリインターフェースを、ストリームインターフェースで使用できるように変換するモジュールである。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (6. ストリーム・インタフェースの制御・フィルタリングモジュール)

stream_filter.sv ストリームのドロップを制御するシンプルなフィルタモジュールである。 drop_iが1の場合、下流に関係なく上流にreadyをアサートし、validを下流へ伝播しない。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f741e7dd57366…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (5. ストリーム・インタフェースのFork / Joinモジュール)

stream_fork.sv 1つの入力ストリームを複数の出力ストリームへ分配するモジュールである。 各入力ハンドシェイクに対して、すべての出力が正確に1回ハンドシェイクする。 入力はすべての出力がハンドシェイクした後にのみハンドシェイクするが、出力は同時に…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (4. ストリーム・インタフェースのアービトレーション・モジュール)

stream_arbiter.sv 複数の入力ストリームを1つの出力ストリームへアービトレーションするモジュールである。 ラウンドロビンまたは優先度ベースのアービトレーション方式をサポートする。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f741…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (3. ストリーム・インタフェースのルーティング・接続モジュール)

stream_mux.sv 複数の入力ストリームから1つの出力ストリームへ選択的に接続するマルチプレクサモジュールである。 https://github.com/pulp-platform/common_cells/blob/9ca8a7655f741e7dd5736669a20a301325194c28/src/stream_mux.sv#L16 /// Stream multip…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (2. ストリーム・インタフェースの基本モジュール)

stream_ モジュール群についての解析を行っている。 まずは、基本的なストリーム・モジュールについて。 stream_register.sv シンプルなready/validハンドシェイクを備えたレジスタモジュールである。 すべての制御信号の組み合わせパスを切断しないため、完…

common_cells リポジトリに含まれる stream_モジュールの構成分析 (1. ストリーム・インタフェースについて)

common_cellsライブラリに含まれるstream_から始まるモジュール群の構成について分析する。 これらのモジュールは、ready/validハンド・シェイク・プロトコルを使用したストリームインターフェースを提供する。 github.com stream_モジュール群では、一般的…

RISC-V Test Generation Framework (Riescue) について調査する (4. Riescue-D を使ってサンプルコードを動かす)

Riescue-Dのサンプルテストコード(bfs.s、幅優先探索のテスト)を実行してみた。 riescued --testfile riescue/riescue/dtest_framework/tests/bfs.s --cpuconfig cpu_config.json --run_dir bfs --iss spike 実行ログ: fpgen unavailable, skipping /home/…

RISC-V Test Generation Framework (Riescue) について調査する (3. Riescue-C試行メモ)

Riescue-C(CTK: Compliance Test Kit)を使ってテストキットを生成してみた。 Riescue-Cとは RiescueDは単一のテストファイルを処理するフレームワークだが、Riescue-CはCompliance Testを含めて複数のテストを自動生成できる点が本質的な違いだ。 Riescue-…

RISC-V Test Generation Framework (Riscue-D)について調査する (2. 実際のテストの生成方法調査)

RiescueDダイレクトテスト実装メモ 実行コマンド: riescued --testfile test1.s --cpuconfig cpu_configuration.yml --run_dir test1 --iss spike まず、以下のエラーが生成された。 ValueError: key test_access is not a boolean in cfg={'address': '0x20…

RISC-V Test Generation Framework (Riscue-D)について調査する

Riscue-D(正式名称 RiescueD)は、Tenstorrent が提供する RISC-V 向け Directed Test Framework である。 単なる ISA 命令列テストの生成ツールではなく、特権レベル、仮想メモリ、例外処理、OS ライクな実行環境まで含めたシステムレベルのテストを、アセ…

GitHub ActionsでSPEC CPU2006の実行を自動化する (4. Sniperによるシミュレーション試行)

前回の続き。Sniperによるシミュレーションを実行してみる。 make run_sniper_403.gcc sed: -e expression #1, char 11: unknown option to `s' === Running Sniper simulations for 403.gcc === find /home/msyksphinz/work/bench_trace/bench_trace_env/sp…

GitHub ActionsでSPEC CPU2006の実行を自動化する (3. Sniperのビルドを追加する)

SPEC CPU2006のベンチマークをSniperでシミュレーションするために、Sniperのダウンロードからビルドまでのフローをspec2006_work/Makefileに追加した。 Makefileに以下のターゲットを追加した。 # Download and build Sniper build_sniper: .build_sniper .…

GitHub ActionsでSPEC CPU2006の実行を自動化する (2. GitHub CI パイプラインの実装)

msyksphinz.hatenablog.com 実際の解析パイプラインは、以下のような流れになった。 make prepare CDROM_DIR=/home/msyksphinz/spec_bechmarks/spec2006_cdrom && \ make build -j${NPROC} && \ make run_bbv -j${NPROC} && \ make build_simpoint && \ make…

GitHub ActionsでSPEC CPU2006の実行を自動化する (1. ワークフローの構築)

SPEC CPU2006のSimPoint解析までをGitHub Actionsで自動化する必要があった。 セルフホステッドランナーとDockerを使って実装したので、その作業ログを残しておく。 まずは、GitHub Actionsのワークフローファイルを作成した。最初は以下のような構成にした…

Common CellsのCDC実装詳細解析 (3. 4相ハンドシェイクCDC)

https://github.com/pulp-platform/common_cells/blob/master/src/cdc_4phase.sv 基本設計方針 cdc_4phase.svは、4相ハンドシェイクプロトコルを使用してクロックドメイン間でデータを転送するモジュールである。 4相ハンドシェイクでは、req信号とack信号が…

Common CellsのCDC実装詳細解析 (2. cdc_2phaseの実装)

cdc_2phase.svは、2相ハンドシェイクプロトコルを使用してクロックドメイン間でデータを転送するモジュールである。2相ハンドシェイクでは、各トランザクションごとにreq信号とack信号がトグルする。この方式は、4相ハンドシェイクと比較して効率的であるが…

Common CellsのCDC実装詳細解析 (1. CDCライブラリの概要)

Common Cellsライブラリには、クロックドメイン間(Clock Domain Crossing, CDC)でデータを安全に転送するための実装が8つ用意されている: github.com cdc_2phase.sv: 2相ハンドシェイクによるCDC cdc_2phase_clearable.sv: クリア機能付き2相ハンドシェイ…