FPGA開発日記

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

RTLにおける検証用トレース機能の実装

f:id:msyksphinz:20160427013856p:plain

RISC-VのCPUを作るにあたり、どのように検証するかということだが、基本的にISSとの一致検証を行うことになる。 この場合、まずはRTLの生成したトレースファイルとISSのトレースファイルを一致させることになる。

f:id:msyksphinz:20160506001940p:plain

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との一致処理も楽だ。

一方、性能解析用のトレースファイルは、パイプラインをトレースできるものが良い。 つまり、命令フェッチからリザベーションステーション、コミットステージまでがどのように流れているのかが分かるようになりたい。 これを実現するために、パイプライントレースを生成するシミュレーションモジュールを作成した。具体的には、以下のようなトレースを生成する。

f:id:msyksphinz:20160506002436p:plain

これで、性能評価のための情報が集められるようになった。まだリポジトリは公開していないが、そのうち公開したい。