FPGA開発日記

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

RISC-Vコアの検証インタフェースRVVIについて調べる (2. トレースインタフェースRVVI-TRACE)

RISC-Vコアの検証環境RVVIについて調査している。 まずはDUTからのトレースデータの情報RVVI-TRACEについて調査する。

実際のインタフェースは、当該GitHubrvvi-trace.svに定義されている。

github.com

これはVerilatorでも食えるのかな?

このVerilogファイルからいろいろなものを読み解いていく。

RVVI-TRACEのインタフェースで定義されているパラメータ

パラメータ名 説明
ILEN ビット単位の最大許容命令長。デフォルトではILEN=32だった。つまり32ビット長命令と16ビット長命令が受け入れ可能?
XLEN 最大許容汎用レジスタサイズ(ビット単位)。
FLEN 最大許容浮動小数レジスタサイズ(ビット単位)。
VLEN 最大許容ベクトルレジスタサイズ(ビット単位)。
NHART このInterfaceで報告されるHARTの数。
RETIRE 有効なイベント中に命令リタイアできる指示の最大数。これはおそらく同時に完了できる命令の数で、これが増えるとインタフェースの幅も増えるのだと思う。

RVVI-TRACEのインタフェース

このインターフェースは、RISC-Vデバイスの状態の内部可視性を提供します。 RVVIインターフェース上のすべての信号は、デバイスからの出力であり、観測用です 状態 ⁇ 移と状態値。

  • clk:RVVIトレースインターフェイスは、clkと同期されている。立ち上がりエッジで同期する。

  • valid:これが1の場合、命令はリタイアされるか、トラップが発生している。したがって、これにはGPR、FPR、VR CSRなどのアップデートが発生する。命令がリタイアしたときの命令アドレスはpc_rdataで示される。

  • order:リタイアした命令の数。これは累積でいいのだろうか?

  • insn:リタイアした命令の機械語を示している。

  • trap:この信号が1のときはトラップなどの例外が発生している。0のときは命令は通常通りリタイアしたことを示している。

  • halt:この信号が1の場合、当該HARTが停止したことを意味する。

  • intr:これが1の場合、トラップハンドラの最初のリタイアした命令であることを示す。

  • mode:動作モード(マシンモード、スーパバイザモード、ユーザモード)を示している。

  • ixl:与えられた実行モードでのXLENを示している。

  • pc_rdata:トラップもしくはリタイアした命令のアドレス

  • pc_wdata:トラップもしくはリタイア後の最初の命令のアドレス

  • x_wdata, x_wb:汎用レジスタの書き込み情報。x_wb[i]が1の場合、GPR[i]のデータが書き込まれていることを意味し、データはx_wdataにその情報が追記される。

  • f_wdata, f_wb浮動小数レジスタの書き込み情報。f_wb[i]が1の場合、FPR[i]のデータが書き込まれていることを意味し、データはf_wdataにその情報が追記される。

  • v_wdata, v_wb:ベクトルレジスタの書き込み情報。v_wb[i]が1の場合、VPR[i]のデータが書き込まれていることを意味し、データはv_wdataにその情報が追記される。

  • csr, csr_wbCSRのアップデート情報。

  • lrsc_cancel:この信号が1である場合、参照モデルは現在の命令の終了後、現在のLR/SC予約をクリアする必要があることを示す。