前回の続き: msyksphinz.hatenablog.com
RVVI-TRACEインターフェースパラメータ
RVVI-TRACEインターフェースは以下のパラメータを取る:
| パラメータ名 | 説明 |
|---|---|
ILEN |
最大許可命令長(ビット) / 32-bit, 16-bit |
XLEN |
最大汎用レジスタサイズ(ビット) |
FLEN |
最大浮動小数点レジスタサイズ(ビット) |
VLEN |
最大ベクトルレジスタサイズ(ビット) |
NHART |
このインターフェースで報告されるHART数 |
RETIRE |
有効イベント中にリタイア可能な最大命令数 |
RVVI-TRACEインターフェース信号
RVVI-TRACEインターフェースは、RISC-Vデバイスの内部状態の可視性を提供する。すべての信号はデバイスからの出力であり、状態遷移と状態値を観測するためのものである。
基本制御信号
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
clk |
1 | input | RVVI-TRACEインターフェースの同期クロック。正エッジでサンプリング |
valid |
1 | output | イベントがRVVI-TRACEインターフェースで通信されていることを示す |
order |
- | output | リタイアまたはトラップイベント中のイベントカウント。単調増加でギャップや重複なし |
命令関連信号
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
insn |
ILEN | output | トラップまたはリタイアイベントの命令語。常にリトルエンディアン |
trap |
1 | output | 命令実行が例外を発生させたことを示す |
halt |
1 | output | HARTが停止状態に入ったことを示す |
intr |
1 | output | このリタイア命令がトラップハンドラの最初の命令であることを示す |
debug_mode |
1 | output | プロセッサがデバッグモードで動作していることを示す |
特権モード・アドレス信号
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
mode |
2 | output | 動作モード(Machine、Supervisor、User) |
ixl |
2 | output | 現在の特権モードでのXLEN |
pc_rdata |
XLEN | output | 有効イベント(トラップまたはリタイア)時の命令アドレス |
pc_wdata |
XLEN | output | トラップまたはリタイアイベント後の次実行命令アドレス |
レジスタ書き込み信号
汎用レジスタ(X)
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
x_wdata |
XLEN × 32 | output | 汎用レジスタ書き込みデータ |
x_wb |
32 | output | 汎用レジスタ書き込み有効ビットマスク |
浮動小数点レジスタ(F)
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
f_wdata |
FLEN × 32 | output | 浮動小数点レジスタ書き込みデータ |
f_wb |
32 | output | 浮動小数点レジスタ書き込み有効ビットマスク |
ベクトルレジスタ(V)
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
v_wdata |
VLEN × 32 | output | ベクトルレジスタ書き込みデータ |
v_wb |
32 | output | ベクトルレジスタ書き込み有効ビットマスク |
制御・状態レジスタ(CSR)
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
csr |
XLEN × 4096 | output | CSR書き込みデータ |
csr_wb |
4096 | output | CSR書き込み有効ビットマスク |
特殊信号
| 信号名 | 幅 | 方向 | 説明 |
|---|---|---|---|
lrsc_cancel |
1 | output | LR/SC予約のキャンセルを示す(実装定義) |
RVVI-TRACEインターフェース関数
net_push()
プロセッサネットの状態をRVVI-TRACEインターフェースに送信する。ネットはキー/値ペアとして形成され、FIFOにプッシュされる。
net_pop()
RVVIインターフェースのコンシューマがネット状態更新を受信する。FIFO順序でネット変更がポップされる。
レジスタ書き込みビットマスクの詳細
レジスタ書き込み信号(x_wb、f_wb、v_wb、csr_wb)は、どのレジスタが書き込まれたかを示すビットマスクである。
例:
- x_wb = 0x4 → レジスタX2が書き込まれた
- x_wb = (1<<4 \| 1<<1) → レジスタX4とX1が同時に書き込まれた
- x_wb = 0x0 → 書き込まれたXレジスタなし
サンプルソースコードは以下に示されている:
https://github.com/riscv-verification/RVVI/blob/20240403.0/source/host/rvvi/rvviTrace.sv