改訂版EDA用語辞典とは・著者一覧

 システム・レベルの設計や検証に使う記述言語をいう。「システム・レベル設計言語」とも呼ばれる。SoC(system on a chip)を含む大規模な組み込みシステム開発において,ソフトウェアとハードウェアからなるシステム全体をシステム・レベル記述言語で表しておけば,そのシステム全体のシミュレーションによって,システムの性能分析などが行える。一般にシステム・レベル記述言語は,幅広い抽象度に対応しており,RTL(register transfer level)に近いハードウェアの記述から,高速シミュレーションが可能な高抽象度の記述まで,カバーする。

 また,システムの検証後にソフトウェアとハードウェアを分割することで,ハードウェア部分が切り出される。このハードウェア部分がシステム・レベル設計言語で記述されていれば,ある程度の最適化を行うことで,その記述を動作合成の入力としても使うことができる。動作合成を適用することで,システムのハードウェアのRTLデータが得られる。

C言語やC++がベース

 現在よく使われているシステム・レベル記述言語は,SystemCなど,C言語やC++をベースにしたものである。ソフトウェア開発向けのプログラミング言語がベースになっているため,ハードウェアの動作を表現するための構文拡張がなされているのが一般的である。例えば,以下に示すようなハードウェアの表現が可能になっている。

  • (1)時間概念
  • (2)並列動作
  • (3)通信インタフェース
  • (4)階層化
  • (5)基本コンポーネント
  • (6)データ・タイプ

トップダウン設計を可能に

 従来,組み込みシステムの開発では,ボトムアップ的な手法が採られていた。すなわち,ハードウェアとソフトウェアを別々に設計して,最後に両者を統合していた。しかし,半導体プロセス技術の微細化によって,一つのチップに数千万を超えるトランジスタが集積可能になり,これによってシステムが複雑になってきた。ボトムアップ的な手法では,統合後に問題が発覚するケースが増えている。

 そこで,システム開発の上流で,システム全体をおおまかに検証することに注目が集まってきた。それを具現化する手段が,システム・レベル記述言語である。この言語によって,トップダウン設計が可能になる。

設計資産の共有化が容易に

 システム・レベル記述言語がもたらす利点は,大きく分けて二つある。(a)設計資産の共通化やデータの共有化が可能になること,および(b)実行可能なこと,である。まず,(a)の設計資産の共通化やデータの共有化について説明する。一つのシステム・レベル記述言語で,仕様策定から詳細設計の1歩手前までが表現可能なことから,設計資産の共通化やデータの共有化が容易に行える。

 ハードウェア設計ではHDL(hardware description language)を,ソフトウェア設計ではC言語やC++を用いるのが一般的である。両設計の間に共通の言語がないと,設計者間の意思疎通が十分でなかったり,仕様の不備があったりして,設計のやり直しが発生しやすい。

 共通に使える言語があれば,こうしたリスクを回避できると期待される。また,システム設計者,ソフトウェア設計者,ハードウェア設計者が共通に使える統合された設計環境も整備できるようになる。

 システム・レベル記述言語の二つ目の利点は,「実行が可能」なことである。すなわち,この言語で記述すれば,その記述を検証するためにシミュレーションが実行できる。これで,動作を確認しながら,仕様検討ができる。

 例えば,ソフトウェアとハードウェアの最適分割をシミュレ-ションを試行しながら検討したり,システムの性能を見積りながら,設計を進めることが可能にとなる。

多くの言語が提案された

 システム・レベル記述言語の歴史は意外に長い。1999年頃から,同言語の標準化推進団体が次々発足し,標準化の動きが活発になってきた。(図1)以下で,代表的なシステム・レベル記述言語を5つ紹介する。

【図1 システム・レベル記述言語の例】出典は電子情報技術産業協会(JEITA)。
【図1 システム・レベル記述言語の例】出典は電子情報技術産業協会(JEITA)。 (画像のクリックで拡大)

(i)SystemC

 最初は,米Synopsys, Inc.らが中心になって開発したC++ベースの言語である。その後,非営利団体のOSCI(Open SystemC Initiative)により管理や拡張が行なわれている。2005年に「IEEE Std.1666」として標準化された。LSI向けのシステム・レベルの設計・検証言語としては,事実上の業界標準といえる。

 SystemCは,C++のクラス・ライブラリという形で提供されており,同ライブラリにはハードウェア記述のための機能が定義されている。SystemCで書いた記述(プログラム)は通常のC++コンパイラでコンパイルすることができ,シミュレーションも可能である。

 RTLで記述できるほか,C++に由来するオブジェクト指向やテンプレート,動的なメモリー割り当てなどの機能を使って,抽象度の高い記述が可能である。トランザクション・レベルという抽象度の高い通信のモデリングが可能な,アド・オン・ライブラリのTLM(transaction level modeling)の普及も期待されている。

(ii)SpecC

 米University of California, Irvine校の教授であるDaniel D. Gajski氏がC言語を拡張して開発した。なおSpecCは,SPECification description language based on Cの略である。

 非営利団体の「SpecC Technology Open Consortium:STOC」がSpecCの標準化活動を進めている。SpecCでは,C言語にハードウェア記述を可能にするための構文が追加されている。記述したソース・コードをSpecC用コンパイラでコンパイルして,シミュレーションすることが可能である。

(iii)Esterel

 複雑なリアルタイム・システム向けの同期型プログラミング言語である。1980年代初期にリアクティブ・システムのプログラム言語として開発され,1990年代初期にハードウェア設計のための変更が行われた。命令型プログラミングのスタイルで,動作の階層記述,並列動作記述,時間記述を扱うことが可能である。

(iv)SystemVerilog

 Verilog HDLにシステム・レベル設計向け機能を付加した言語である。2005年に「IEEE Std.1800」として標準化された。抽象度の高いシステム・レベルのモデリングや,テストベンチ記述,アサーション記述,機能カバレッジ,フォーマル検証に対応した機能を備える。

(v)UML

 ソフトウェア工学におけるオブジェクト・モデリングのために標準化された仕様記述言語。UMLはUnified Modeling Languageの略である。数種類用意されたグラフィカルな記述で,抽象化されたシステムのモデルを表現する。

 分散オブジェクト指向システムの標準化を目的として設立されたコンソーシアムである「OMG:Object Management Group」によって管理され,「ISO/IEC 19501:2005」として「UML1.4.2」が標準化されている。また,システム・レベル向けとしてハードウェア表現を含む拡張がなされた「SysML(Systems Modeling Language)」は有名である。

参考文献
1)橘 昌良,「システム設計記述言語の動向」,『Information Processing Society of JapanシステムLSI設計技術,101-7,招待論文』, pp.43-50, 2001年5月.