HDL入門」で記述されているTVゲームをシミュレーションしてみました。<本の紹介>この本では、シミュレーションをCVERとVeritakで行っています。説明は、常にシミュレータのベンチとその結果について、書いてあるので、シミュレーションしながら、文法を理解することができます。実践的な入門書になっており、最近の規格であるVerilog2001の書法についても説明があります。豊富な記述例と図式化した文法の説明があり。HDLの教科書としてお勧めできます。<遊び方>アーカイブ(ビルドに誤りがあり修正しました。Jul.6.2006)を解凍して、Veritakプロジェクトをダブルクリックで起動してみてください。マウスを画面上でクリックすると、ラケットの位置が変わります。<なんでもシミュレーションしたい..>書籍の最後の例題として説明されているのが、本題のTVゲームです。従来、この手の検証は、ハードを書いて、FPGAに焼く。オシロで波形を見ながらデバッグNTSCのフレームをPPMファイルにダンプし、ダンプしたファイルを後でビューアで見る等の手段で行っていました。Ontheflyで、デバッグができればその方がよいのは、言うまでもありません。何が障害かというと、シミュレータが遅い外部プログラムとのインターフェースが面倒GUIを書くのも面倒ということが挙げられます。耐えられる範囲内だと思います。C#が無償、VisualC++も無償と最良の開発&デバッグ環境の条件が整いました。いうことで、問題なのは、VPIの書き方だけです。<VPIを含むシステム構成>今回の構成は下のようになっています。DLLは、二つのプロセス、VeritakとViewerによって共有されますが、インスタンス的には、別物になります。そのために、共有ファイル(メモリ)を宣言しこれを介して情報のやりとりを行うのがミソです。<ハードウェアに関して>著者の方から許可をいただいてHDLソースをアーカイブに入れています。動作説明は、書籍に詳しく書かれています。<テストベンチについて>ハードをいじらないように注意しました。ハードをシミュレートするという趣旨から中身はいじらずに外側からの操作のみです。モジュールインターフェースだけでは、面倒な部分もあるので、階層を飛び越えて信号の参照を行ったりしています。テストベンチがハードとDLLの橋渡しの役目をになっています。書籍では、テストベンチはありませんので、今回、都合のよいように作成しました。太字の部分がVPIとのIF部です。1ライン分のDOTを一つのレジスタに格納し、最終DOTが来たときにVPIを呼び出して、1ライン分のデータを格納します。このときマウス位置に対応した数値がpos_counterに入ってきますのでそれをハードの可変抵抗によるワンショットに対応させています。XC95topがハードトップです。C#ソースについて>信じられないことに、これが手書きしたソースのすべてです。C#では、GUIが非常に簡単に書けることがお分かりでしょう。}}<VPIソースについて>my_vpi5.dllに追加しています。スタートアップルーチンに登録関数を追加します。0};次に登録関数を書きます。vpi_register_systf(&tf_data);}中身です。1フレーム分のDOTが溜まったら、GUIに読み取り要求を発行します。別プロセスですので、本質的に同期の問題があります。ソースでは、Postmessageにしてスレッドを分けていますが、真面目にやる場合は、Sendmessageにしてください。{//まだCreateしていない。0;}<拡張について>白黒しか対応していませんが、RGBにすることも容易でしょう。<デバッグの注意>C#からDLLの呼び出しは、関連するEXE,DLLを作業フォルダにいれておかないとモジュールが見つからない、と怒られます。等も同じフォルダに入れておく必要があるようです。