Tech と Culture

テクノロジーとカルチャー

YCbCr-RGB変換モジュールRTL システム検証 2

$GRLIB_HOME/designs/xxxxx/ のディレクトリで、
make soft-clean
make soft
を行うと、そのディレクトリにある、systest.cをメイン関数としたシステム検証用のプログラムが生成されます。system.cをコンパイルする際に、 $GRLIB_HOME/software/leon3/****.cをコンパイルして生成されたアーカイブをリンクしています。
よって、$GRLIB_HOME/designs/xxxxx/system.cに、yccrgb_test(); という一行を追加し、$GRLIB_HOME/software/leon3/yccrgb.c というモジュール検証用のプログラムを作ればシステム検証中にYCbCr-RGB変換モジュールのテストも追加されることになります(もちろん、アーカイブを作る際にこのプログラムも含まれるようにMakefileを少し変更します)。

プログラム自体は、同ディレクトリにある他のモジュール検証プログラムを真似すれば簡単に書くことができます。なお、printf文の出力先が無いため、テスト終了をどうにかして知らせる必要があります。
leon3mp3.png

testbench.vhdのファイルを見ると、図のようにIOarea にgrtestmodというモジュールが接続されています。これはシミュレーション用のモジュールでここに書き込みがあった時にその値に応じてメッセージが出力されるようになっています。最終的には、このモジュールを変更して、自作モジュールの検証メッセージを出力するようにするべきですが、とりあえずはメッセージ無しでプログラムのみ開発しました。

systemveri1.png

OSが動作していませんので、仮想アドレスではなく、物理アドレスでプログラムから直接アクセスします。物理アドレスの定義や、アクセスポインタのVolatile宣言等を最初に行います。
また、今回もC言語で生成したテストパターンを使用しますが、とりあえずは一行分のピクセルデータを配列で直接埋め込みました。

systemveri2.png

フレームバッファをアロケートした後に、YCbCr-RGB変換モジュールの設定レジスタに書き込みを行い、その後配列のデータを一つづつYCbCr-RGB変換モジュールのAHBスレーブのアドレスに順番に書き込みます。
単なるポインタアクセスでデータの書き込み完了です。
本来ならば、期待値も配列で保持しておき、フレームバッファアドレスから読み出して比較し、すべて一致したかどうかをgrtestmodのアドレスに書き込んで報告、grtestmodがシミュレーション実行画面に結果を表示するべきです。
しかし、今回はまだ検証初期段階ということで、読み出した値をGPIOモジュールに順次書き出しシミュレーション波形でチェックするようにしました。
systemveri3.png
値を書き込む間に関係の無いデータをはさんで分かりやすくしています。
なお、testbench.vhdにおいて、GPIOピン同士を接続している一行はコメントアウトしています。
gpioの出力はトップレベルピンの出力ですので、GHDLをVCD波形出力オプションで実行すれば、gtkwaveで見ることができます。これでmodelsimよりも高速に検証実行することができます。

GHDLの実行結果は、、、、、、
値は順次出力されていますが、32ピクセル出力した次のピクセルの値が少し変です。これは、YCbCr-RGB変換モジュールのバーストライトが始まるところで何か問題があるということだなー。
この後は、modelsimを使って内部波形を見た方が早そうです。