FPGA開発日記

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

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

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相ハンドシェイ…

Common Cellsの各種レジスタ実装詳細解析 (4. 等時性クロックドメイン間スピルレジスタ)

github.com 5. isochronous_spill_register.sv:等時性クロックドメイン間スピルレジスタ 基本設計方針 isochronous_spill_register.svは、等時性(isochronous)クロックドメイン間でデータを転送するためのスピルレジスタである。 等時性とは、2つのクロッ…

Common Cellsの各種レジスタ実装詳細解析 (3. Spillレジスタ)

github.com 3. spill_register.sv:後方互換性ラッパー 基本設計方針 spill_register.svは、spill_register_flushableのラッパーモジュールであり、後方互換性を維持するために提供されている。 flush_i信号を常に1'b0に固定して、フラッシュ機能なしのスピ…

Common Cellsの各種レジスタ実装詳細解析 (2. フォールスルー動作レジスタ)

github.com 2. fall_through_register.sv:フォールスルー動作レジスタ 基本設計方針 fall_through_register.svは、フォールスルー(fall-through)動作を実装したレジスタである。 出力側のモジュールが同じクロックサイクル内でデータを受け取る準備ができ…

Common Cellsの各種レジスタ実装詳細解析 (5つの実装形態)

github.com Common Cellsライブラリには、ready/validハンドシェイクプロトコルに対応したレジスタの実装が5つ用意されている: stream_register.sv: シンプルなストリームレジスタ fall_through_register.sv: フォールスルー動作を持つレジスタ spill_regis…

RISC-VのN-Traceの仕様について調べる (2. レジスタ群とブートアップシーケンス)

前回: RISC-VのN-Traceの仕様について調べる (1. RISC-V Trace Control Interface の仕様について) - FPGA開発日記 レジスタ群 1. Trace Encoder 周りのレジスタ群 1.1 Trace Encoder 本体 (trTe??) ベース: trBaseEncoderN RISC-V-Trace-Control-Interface…

RISC-VのN-Traceの仕様について調べる (1. RISC-V Trace Control Interface の仕様について)

RISC-V トレース機能は、プログラム実行時の挙動を外部へ記録し、デバッグ・性能解析・実行経路再現などを可能とする仕組みである。 本機能は主として、Trace Encoder がトレース情報を生成し、各種 Sink がそれを保存・出力するという構造で成り立っている…

TerraformでAWS Devサーバを構築する手順をしらべる (6. Terraformの自動セットアップ, ジョブサーバ側)

ジョブサーバーの自動セットアップフロー ジョブサーバーでは、以下の処理が自動実行される: ホスト名の設定 パッケージのインストール EFSのマウント フロントエンドサーバーからのNFSマウント Slurm設定ファイルとMunge keyの取得 Slurmワーカーのインス…

TerraformでAWS Devサーバを構築する手順をしらべる (5. Terraformの自動セットアップ, フロントエンドサーバ側)

user_dataとは user_dataは、EC2インスタンス起動時に実行されるスクリプトである。Terraformのaws_instanceリソースでuser_dataパラメータを指定すると、インスタンスの初回起動時にそのスクリプトが自動実行される。 resource "aws_instance" "frontend" {…

TerraformでAWS Devサーバを構築する手順をしらべる (4. Terraformの実行)

Terraformを設定したので、使い方をまとめておく。 変数ファイルの設定 example.tfvarsを編集して、VPC ID、サブネットID、キーペア名を設定した: vpc_id = "vpc-xxxxxxxx" subnet_id = "subnet-xxxxxxxx" key_name = "your-key-name" frontend_instance_ty…

TerraformでAWS Devサーバを構築する手順をしらべる (3. AWS Slurmクラスターの構築)

作業の目的 AWS上にSlurmクラスターを構築する必要があったので、Terraformを使って完全自動化で構築できるようにした。 構築した環境 フロントエンドサーバ: Slurmコントローラー(slurmctld)を実行 ジョブサーバ: Slurmワーカー(slurmd)を実行 固定IPア…

SPEC2006/SPEC2017をRISC-V環境で実行するためのリポジトリを構築する (Sniperフロントエンドのデバッグ作業)

SIFTファイルを生成してデバッグできるようになったが、いくつか問題があるのでデバッグしていこう。 SniperシミュレータのQEMUフロントエンドにおいて、RISC-V命令のメモリアクセスのレコード機能についてデバッグする。 実行時に以下のようなデバッグ出力…