FPGA開発日記

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

RISC-Vコアの検証インタフェースRVVIについて調べる (1. RVVIの種類について)

自作RISC-Vコアを各種SoC環境で使いたい。 ただし自分のコアの動作にまだ自信がないので検証インタフェースを持って、どんなSoC環境でも一応形として一致検証ができるようにしたい。 インタフェースを統一していた方がいい気がするので、RISC-V Verification Interface (RVVI) について調査することにした。

どうも見ている限り、これはRISC-V公式の仕様では無いっぽい?ので注意。ただこういう仕様をオープンにしているのはRVVIだけっぽいので、これに則るためにはどうしたらいいのか考えよう。

まずは以下の図を見てみる。

https://github.com/riscv-verification/RVVI/raw/main/diagrams/TestbenchForAdvancedRISC-VDesignVerification.png

  • 一番左がVerilogで記述されたDUTの部分。これが検証対象
  • 真ん中がDUTと検証用のIPを接続するためのインタフェース。これはC++でもVerilogでも良い
  • 一番右が検証用IP。今回はImperasDVとなっている。本当はSpikeとかを接続できるようになりたい

どうやら、検証インタフェースとしては3つが定義されている。

  • コアのRTLトレースインタフェース:RVVI-TRACE

これはDUTに接続されることが想定されていると思われる。左側のVerilog DUTと真ん中のインタフェースを接続しているのがこれに当たる。 コアから適切な情報を取り出してトレース情報を作成する。 これをRVVIのインタフェースを通じてDV用のIPに伝達されることになる。

  • リファレンスモデル DVサブシステムインタフェース:RVVI-API

RVVI-TRACEから伝達された情報をさらに加工して、ImperasDVなどの検証用IPに接続するというもの。 真ん中の接続インタフェースと、検証用IP(右側のDV)を接続する。

  • テストベンチ向けの仮想化粧周辺機器:RVVI-VVP

DUTに接続する外部インタフェースを定義する。上記の図において左側のDUTの下側に接続されているもの。 UARTなどの外部インタフェースを接続するためのもの。 タイマー、割り込み、デバッグ、ランダムイベント生成、print/log/UARTなどを接続することができるもの。