「Bluespec SystemVerilog」(BSV)と呼ぶESL言語をご存知だろうか。Tech-On! EDA Onlineの過去の記事をたぐると,BSVをベースにした米Bluespec, Inc.の製品が3年以上前に紹介されたことはある(Tech-On!関連記事1)。しかし,日本に代理店ができたのはごく最近になってからだ(同2)。今のところ,BSVに関する情報はあまり浸透していないのではないかと筆者は感じている。

 少なくとも筆者は,BSVの考案者の一人で,米Massachusetts Institute of Technology のJohnson Professor のArvind氏が「ICCAD(International Conference on Computer Aided Design ) 2004」で講演したときの記憶しかない。このときの講演タイトルは,「High-level synthesis: An Essential Ingredient for Designing Complex ASICs」で,同氏は「動作合成技術はごく限られた範囲にしか適用できない!」と声高に主張し,筆者は「まったくその通り」と強く共感したことを覚えている。この発表以降,「Algorithmic Synthesis」という潔い名称が浸透したように,筆者は思う。

 そのBSVに実際に触れる機会を運良く得たので,以下に報告する。筆者が参加した学会「MEMOCODE'08(6th ACM-IEEE International Conference on Formal Methods and Models for Codesign)」(45th Design Automation Conferenceの併催学会として,Anaheimで6月5日~7日に開催)の「Saturday Tutorial」として「Hands-on introduction to BSV」が行われ,このチュートリアルを聴講できたのである。

従来のRTL設計手法とは全く異なる

 実際の講義内容の紹介前に,筆者の理解の範囲で,BSV言語とBSVを用いた場合の設計思想の特徴を説明する。BSVは,関数型言語「Haskell」をベースにSystemVerilogの拡張として定義された言語であり,いわゆる「Strong Typed Language」である。サイクル精度のマイクロ・アーキテクチャを記述対象としている。

 BSVはステート・マシンを明示的に記述するのではなく,マイクロ・アーキテクチャの構成要素となっている変数レジスタやメモリー,バッファ,FIFOなどを対象にした操作を記述することが大きな特徴の一つである。すなわち,各サイクルでそれらの構成要素に行う操作を,アトミックな条件付き動作(GAA:Guraded Atomic Action,以下,ルールと呼ぶ)として記述する。

 BSVでは,常に1つのルールが選択され実行されることが基本となっている。ルールを記述する際には,他の動作を無視して,1つのルールのみに注目して動作記述を行うことが重要だとされている。すなわち,BSVを採用する場合,これまでRTL設計者が慣れ親しんできた,RTL設計手法とは全く異なる設計概念をベースにマイクロ・アーキテクチャを記述することになる。

 例えば,Bluespecの説明では,「状態ベースの記述」と解説されることがあるが,ここでいう「状態」とは,レジスタやメモリーなど値の保持を行うストレージ・コンポーネント全体での値の組,即ち数学的に厳密な意味での対象回路の「状態」を指している。上述したように,明示的にステート・マシンを記述するものではない。合成結果のRTLを幾つか眺めて見たが,状態レジスタやステート・マシンに相当する記述は,一切見当たらなかった。