FPGA開発日記

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

RoCCを使ったRocket Core拡張方法の調査 (5. 波形デバッグ)

前回から一生懸命RoCCインタフェースに接続したアクセラレータのデバッグをしているのだが、どうも上手く行かない。 RoCCインタフェースからコマンドを受け取って、L1キャッシュに対してアクセスをしてデータを取り出し、そのデータに対して加工を行いたいのだが、途中でステートマシンがハングしてしまう。 これをデバッグするために、シミュレーション実行時にvcdを出力して、wlfで変換しQuestaSimで見てみることにした。

f:id:msyksphinz:20170901023111p:plain

RocketCoreでシミュレーション実行結果でVCDを取得する方法

デバッグ用のシミュレーションバイナリを生成して、vcdを出力する。

cd emulator
make debug CONFIG=RoccExampleConfig
./emulator-rocketchip-RoccExampleConfig-debug +verbose -vrocc.vcd ~/riscv64/riscv64-unknown-elf/riscv64-unknown-elf/bin/pk ../../rocket-rocc-examples/build/test-accumulator 2> rocc_debug.log

さらに、vcdをwlfに変換して、QuestaSimで波形デバッグする。

vcd2wlf rocc.vcd rocc.wlf
vsim -gui rocc.wlf

昨日もちょっと愚痴ったが、この一連の流れを実施するのに、おおよそイタレーションとしては2時間程度かかってしまう。Chiselの状態でシミュレーションさせてくれ。。。 何のためのVerilogラッパーだよ。。。

RoCCインタフェースの解析

L1 Dキャッシュに対して複数メモリアクセスを実施しなければならないのだが、途中でステートマシンが止まっているのはL1 Dキャッシュへアクセスするインタフェースの、Ready信号がずっと落ちてしまっておりステートマシンが動作しない。

f:id:msyksphinz:20170901022813p:plain

f:id:msyksphinz:20170901023345p:plain

このあたり、資料が無くて本当にやりづらい。。。

2017/09/02追記。Request Validを、Request Readyが上がるまで待つっていうステートマシンに変えたら本当にRequest Readyが上がらなくて泣きそうである。

f:id:msyksphinz:20170902025017p:plain