VHDLとVerilogの混在

VHDLとVerilogの混在

 あまり初心者向けとは言えない内容ですが、VHDLとVerilogの混在した回路設計について解説いたします。

 私自身一人で全部を設計する時には、VHDLかVerilogのどちらかを選択して、FPGA1個の中で言語が混在しないようにします。大きな理由はシミュレートで困るからです。

 この場合、「混在」というのはVHDLのファイル。Verilogのファイル。というのが最小の単位になっています。一つのファイルでVHDLとVerilogを混在してはいけません。

 各社の統合開発環境を使ってFPGAの回路設計を行うのですが、統合開発環境は無償の物を含めてVHDLとVerilogの混在を認めている場合が多いです。しかしながら、無償版では混在のシミュレートは認めていない場合があります。

 これはどういうことかというと、シミュレートする親子関係の中で混在してはいけない。という事で、個々のシミュレートは言語が変わってもできます。これは無償版でも同様の場合が多いです。

 シミュレートの場合、必ず親となるテストベンチと子となるモジュールがありますので、この関係では同じ言語という事が前提です。

 なので、言語が混在していても開発そのものができない。という事はありません。シミュレートもブロック毎に言語が分かれていれば、その単位でできます。

 前回「FPGAでLEDの調光」にソースコードを掲載しましたが、VHDLとVerilogで全く同じインスタンス名で作ってあります。したがって、ファイルを入れ替えればそのままコンパイルできます。

 たとえば、下の図のようにトップが(VHDLの)LED_pwm.vhdで、その下に(VHDLの)period.vhd、(Verilogの)Sawwave.vというプロジェクトを作れば、そのままコンパイルできます。このように、VHDLからVerilogのファイルを利用することもできます。なにも変更するところはありません。

 この場合、親がVHDLなのでVHDLの流儀でVerilogのファイルを呼び出せば良いだけです。逆にVerilogが親の場合にはVerilogの流儀でOKです。

 シミュレートに話を戻して、トップファイルがLED_pwm.vhdで、その下にperiod.vhd、Sawwave.vというプロジェクトを作った場合、コンパイルはできますが、シミュレートはどっちの言語で行ってもできない場合があります。これはシミュレータの制限であって、たとえば有償のシミュレータ単体を購入するとか、統合開発環境でもバージョンによってできるとかがあります。

 もし、言語を混在して開発する必要がある場合には、シミュレータの仕様を確認することをお勧めします。

 もちろん、かなりトリッキーな設計をしていて、言語が違うと動かなくなる。という設計もできるかも知れませんが、私は動かなかったという経験はありません。したがって、シミュレート以外の心配は必要ないと思います。

 最近はトップファイルのシミュレートはしないで、実機でのデバッグツールを使う。という場面も多くなっていますので、その場合にはシミュレータの制限がなくなりますから、言語が混在しても困ることはありません。

 一時ほど社内で担当によって使う言語が違う。という事は少なくなってきていると思います。そもそも、言語は社内で統一する方が新人教育も楽だからです。しかしながら、社外の人が開発したIPを使う必要があるとか、IPを購入した場合に混在することがあります。

 もし、IPを購入する。とい場合で、社内の言語と違うような時には、変換用のモジュールを作ることをお勧めします。これは、社内で作っても良いのですが、IPを購入する際に製作物の中で契約してしまう方が良いでしょう。開発はVerilogでも良いけれども、VHDL変換用のモジュールを付加すること。というように契約します。そうすれば、社内でVHDL言語で親を作るにあたって、悩むことなく購入したIPをリンクすることができます。