以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/09/04/000400より取得しました。


RISC-V Formal Verification Framework (riscv-formal) についてまとめる (3. 信号の定義)

前回の続きだ。メモリアクセスの検証用インタフェースについて見てみよう。

msyksphinz.hatenablog.com


外部メモリバスの処理

RISC-V Formalの仕様では、RVFI経由で観測されるコアが生じさせるメモリアクセスと、それに伴って発生するデータバス上で観測されるメモリアクセスとの整合性を検証するチェック機能が含まれている。このための専用のインタフェースであるRVFI_BUSが定義されている。

例えば、コアのメモリアクセスに伴いリクエストがバス上に現れ、その数サイクル後にコアがその応答を受け取ってコアとしてのメモリアクセスが完了する場合、まずRVFI_BUSがバスのアクセスを出力しておく必要がある。この場合、バスアクセスの記録と、実際のコアのアクセスの記録がどれくらい離れるかによっては適切に制約が行えなくなり、誤検知が発生する可能性がある。

RVFI_BUSは以下の信号を追加する。

output [NBUS *      1   - 1 : 0] rvfi_bus_valid
output [NBUS *      1   - 1 : 0] rvfi_bus_insn
output [NBUS *      1   - 1 : 0] rvfi_bus_data
output [NBUS *      1   - 1 : 0] rvfi_bus_fault
output [NBUS *   XLEN   - 1 : 0] rvfi_bus_addr
output [NBUS * BUSLEN/8 - 1 : 0] rvfi_bus_rmask
output [NBUS * BUSLEN/8 - 1 : 0] rvfi_bus_wmask
output [NBUS * BUSLEN   - 1 : 0] rvfi_bus_rdata
output [NBUS * BUSLEN   - 1 : 0] rvfi_bus_wdata

RVFI_BUS では、 NBUSを使って 拡張は複数のバスを監視することができる。これは、命令バストデータバスの分離も含まれている。観測対象のバスの幅は BUSLEN を使って指定される。

  • rvfi_bus_valid (1-bit) : 観測可能なメモリアクセスが存在するとみなされる。
  • rvfi_bus_insn / rvfi_bus_data (1-bit): アクセスが命令フェッチかデータアクセスかを示すために使用される。
    • これらを区別しないコアやバスの場合、両方を設定する必要がある。
  • rvfi_bus_addr (XLEN-bit): アクセスのアドレス
  • rvfi_bus_rmask / rvfi_bus_wmask (BUSLEN/8-bit): rvfi_bus_addr から始まるどのバイトがアクセスされるかを示す。
  • rvfi_bus_rdata / rvfi_bus_wdata (BUSLEN-bit): 読み出しデータおよび書き込みデータである。

RVFI_BUS を使用して観測されるすべてのアクセスはインオーダであると仮定される。これには、RVFI_BUS チャネルインデックスの昇順で順序付けられる同一サイクル内のアクセスも含まれる。これは将来の拡張によって緩和される可能性がある。

標準インターフェース用 RVFI_BUS オブザーバ

busディレクトリには、標準インターフェース用の RVFI_BUS オブザーバの実装が含まれている。

例えば、AXI4オブザーバはbus/rvfi_bus_axi4.svに用意されている。このファイルには、AXI4をRVFI_BUS信号に変換する際のタイミングに関する注記も含まれている。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/09/04/000400より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14