FPGA開発日記

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

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

RISC-V トレース機能は、プログラム実行時の挙動を外部へ記録し、デバッグ・性能解析・実行経路再現などを可能とする仕組みである。

本機能は主として、Trace Encoder がトレース情報を生成し、各種 Sink がそれを保存・出力するという構造で成り立っている。


1. Trace Encoder

Trace Encoder はトレースシステムの中心的構成要素であり、HART(CPU コア)からの実行情報を受け取り、トレースメッセージ(パケット)へ変換する役割を担う。

トレースメッセージは バイト列として定義されており、エンコーダ内部では固定幅のトレースワード(通常 1 バイト)にパックされる。

また、Trace Encoder は最低 1 つのシンク、あるいはFunnelに接続されていなければならない。


2. Trace Sink

Trace Encoder が生成したメッセージは Sink によって保存または外部出力される。仕様書では複数の Sink が定義されている。

SRAM Sink

オンチップ RAM にリングバッファ方式でトレースを書き込む仕組みである。

System Memory Sink

システムメモリに DMA 方式で書き込みを行う Sink であり、バッファ満了時には停止またはラップ動作を行うことができる。また、PCIe や USB などを経由してオフチップ出力にも利用可能である。

PIB Sink

エンコーダからのトレースを UART や Manchester, SWT などのプロトコルで外部へ送信する Sink である。


3. ATB Bridge

ATB Bridge は、RISC-V トレースを Arm CoreSight の ATB(Advanced Trace Bus)へ送るためのブリッジである。

Arm と RISC-V が混在する SoC で利用される構成であり、RISC-V 専用システムでは必須ではない。


4. Trace Funnel

Trace Funnel は複数の Trace Encoder または他の Funnel からのトレースを 集約し、1 本のトレースストリームにまとめる部品である。

各入力元は固有の Source ID を持つ必要がある。


5. Trace Control Interface

トレース全体の制御は 32bit のレジスタ群を用いて行われる。

各 Trace Component は最大 4 KB のレジスタ空間を持ち、4 KB 境界にアラインして配置される。

また、マルチハート構成では各HARTに専用の Trace Encoder を用意し、生成されるトレースメッセージには HARTID を含める仕組みが定義されている。

トレースに関するコンポーネント

1. Trace Encoder (トレース・エンコーダ)

  • HARTからの生トレース情報(命令アドレス等)を N-Traceパケットにエンコードするコンポーネント。
  • 各HARTに通常 1 個配置される。
  • 最初のステージとして動作する。

2. Trace Funnel (トレース・ファンネル)

  • 複数の Trace Encoder からのトレースを 多入力・単一出力でマージするコンポーネント。
  • 多HART構成や多層階層構成に対応。
  • Funnel 同士を階層的に繋ぐことも可能。

仕様の表では Encoder → Funnel、Funnel → Funnel の接続が許可されている。


3. Trace RAM Sink (RAM シンク)

  • トレースデータを メモリバッファ(RAM)へ格納するコンポーネント。
  • オンチップ SRAM またはシステムメモリに書き込む構成が可能。
  • オフライン解析やデバイス内ログ収集向け。

Trace Encoder → RAM Sink の接続が定義されている。


4. Trace PIB Sink (PIB シンク)

  • トレースデータを ピン出力(UART/Manchester/SWT 等のプロトコル)として外部ツールへ送出する。
  • SoC 外部のデバッガやトレースツールが受信。

Encoder/Funnel → PIB Sink が許可されている。


5. Trace ATB Bridge (ATB ブリッジ)

  • RISC-V トレースを Arm CoreSight の ATB(Advanced Trace Bus) インフラへ橋渡しするコンポーネント。
  • 異アーキテクチャ混在システムで使用。

Encoder/Funnel → ATB Bridge の接続が規定されている。


0. コンポーネント共通

各トレース・コンポーネントは以下のレジスタを持つ。

  • Control レジスタ(tr??Control)
  • Implementation 情報レジスタ(tr??Impl)

tr??Control には tr??Active ビットがあり、0 の間は他レジスタの動作は未定義である。

コンポーネント種別とベースアドレス記号:

種別 type 値 ベースアドレス記号
Trace Encoder 0x1 trBaseEncoderN
Trace Funnel 0x8 trBaseFunnelN
Trace RAM Sink 0x9 trBaseRamSinkN
Trace PIB Sink 0xA trBasePibSinkN
Trace ATB Bridge 0xE trBaseAtbBridgeN