BluespecSystemVerilog

書きかけ

CYBERNET社主宰のBluespecデザインコンテスト2010にて、Bluespec SystemVerilogの評価用ライセンスを、一ヶ月間借りることができた。私自身、Bluespec SystemVerilogが何者かという部分に非常に興味をもっており、そこらへんの情報収集もかねてデザインコンテストに応募することにした。Bluespec SystemVerilog(以下BSV)がどのようなものか、自分なりの見解をここで上げておく。

たった一ヶ月の評価期間で全てを理解できるわけもなく、私が理解できた限られた範囲からの見解であることをお断りしておく。

まず、名前についてだが、SystemVerilogという文字は入ってはいるが、IEEE 1800のいわゆるSystemVerilogとはあまり関係がなさそうだ。多少似たようなところはあるが、これであればVerilogとVHDLのほうがまだ似ていると思う。

BSVは、verilogへのフロントエンドとしての使い方を志向しているようだ。BSVで書いたコードをトランスレータによってverilogに変換し、それを論理合成することで最終的なネットリストを得る。

シミュレーションはBSVのネーティブ環境でのシミュレータが用意されている。私は、言語自身に興味があり、シミュレータの操作方法を覚える時間が惜しかったため、BSVシミュレータは全く使用せず、全てverilogに変換してシミュレーションを行った。

verilog環境でデバッグを行う場合、テストベンチ自体はBSVで記述でき、これも一緒にverilogに変換することが可能となっている。

さて、使ってみた感想だが、一番特徴的だと感じたのは、シーケンシャルロジック(フリップフロップ)を明示的にインスタンス化する点である。高位合成をうたっているツールは、シーケンシャルロジックの生成もツール側で行い、いくつのFFがどこに生成されるかはツールまかせになる。

ところが、BSVの場合は、どこにどれだけのFFを生成するかはソースコード中に記述しなければならない。これだけ聞くと、従来のverilogと大して変わらない抽象度でしか記述できないのではないかと思われるかもしれないが、そこに対する一つの解を与えているのがBSVの売りと感じた。

つまり、従来のHW技術者がRTLを記述するのと同じ感覚で、データパスやFF間のタイミングバジェットを管理しつつ、記述の抽象度は上げることで、コーディングの生産性と再利用性を上げることがBSVの売りである。

ではどのように抽象度を上げているかというと、一つはモジュールのインタフェースと実装を完全に切り分けている点である。