RISC-VのCPUを作るにあたり、どのように検証するかということだが、基本的にISSとの一致検証を行うことになる。 この場合、まずはRTLの生成したトレースファイルとISSのトレースファイルを一致させることになる。
ISSのトレースファイルは、普通のログファイルである。一方でRTLのログファイルとしては、
- 性能解析用のパイプライントレース
- 検証用の命令トレース
が必要だろう。まずは検証用の命令トレースは、ISSとの一致検証がしやすいものでなければならない。命令コミットが発生した時点の、インオーダ完了された時点をトレースするのが最もやりやすい。 というわけで、以下のようなトレースをRTLから生成できるようにした。
# PULSAR-1 INSTRUCTION LOGGER # REVISION : 00abcdef # DATE : 20160501 305000000 1 [00000200] 00000093 : ADDI r 1,r 0,0x000( 0,32) : R 1<=00000000 315000000 2 [00000204] 00000113 : ADDI r 2,r 0,0x000( 1,33) : R 2<=00000000 325000000 3 [00000208] 00000193 : ADDI r 3,r 0,0x000( 2,34) : R 3<=00000000 335000000 4 [0000020c] 00000213 : ADDI r 4,r 0,0x000( 3,35) : R 4<=00000000 ...
すなわち、命令の完了時間、命令実行数、命令アドレス、命令オペコード、ニーモニック、結果のレジスタ書き込み情報をファイルに出力する。 これだけの情報なら、ISSとの一致処理も楽だ。
一方、性能解析用のトレースファイルは、パイプラインをトレースできるものが良い。 つまり、命令フェッチからリザベーションステーション、コミットステージまでがどのように流れているのかが分かるようになりたい。 これを実現するために、パイプライントレースを生成するシミュレーションモジュールを作成した。具体的には、以下のようなトレースを生成する。
これで、性能評価のための情報が集められるようになった。まだリポジトリは公開していないが、そのうち公開したい。