RISC-Vコアの検証環境RVVIについて調査している。 まずはDUTからのトレースデータの情報RVVI-TRACEについて調査する。
実際のインタフェースは、当該GitHubのrvvi-trace.sv
に定義されている。
これは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_wb
:CSRのアップデート情報。lrsc_cancel
:この信号が1である場合、参照モデルは現在の命令の終了後、現在のLR/SC予約をクリアする必要があることを示す。