特集
» 2007年03月01日 00時00分 UPDATE

半導体設計技術解説:いまさら聞けない SystemC入門 (1/3)

注目を集め、常識化しつつあるCベース設計。その中で一歩抜きん出た「SystemC」の概要から最新動向までをあらためて解説する

[塚田 雄一 キャッツ,@IT MONOist]

 「SystemC」は、その名が示すとおりシステム設計を行うための言語で、C++のクラスライブラリとして提供されています。SystemCを使用することにより、システムLSIの上流設計が可能となります。また、SystemCの設計環境は無償で構築できるため、ユーザー数は一気に拡大しています。2005年12月にはIEEE 1666として標準化されるなど、SystemCはCベース設計の分野において確固たる地位を築いたといえるでしょう。

 本稿でSystemCについて知っていただき、まだSystemCを知らない皆さんに少しでも興味を持っていただければ幸いです。


関連リンク:
SystemC

SystemC前史からSystemCの登場まで

 SystemCについて説明する前に、まず回路設計の進化を見てみましょう。

 もともと回路設計は、回路図をCADツールなどで作成する「回路図入力」によって行われていました。しかし回路図入力は入力そのものに時間がかかるため、大規模な開発には向いていませんでした。

HDLによるRTL設計

 そこで、ソフトウェアのようにプログラム言語によって開発を行うハードウェア記述言語(HDL:Hardware Description Language)が誕生しました。HDLは、テキストであるため入力や回路の変更も簡単です。そして内容を理解するのが比較的容易です。さらに、「論理合成」により回路に変換できるようになったことで、HDLは一気に普及しました。代表的なHDLとして、「Verilog」「VHDL」があります。VerilogやVHDLは、「RTL(Register Transfer Level)」と呼ばれる論理回路を言語で記述し、論理合成を行うことにより回路を生成します。

 VerilogやVHDLなどのHDLは、回路の実装に不可欠です。将来的にSystemCからの「動作合成」による自動化が当たり前に行われるようになったとしても、確認&検証の際にHDLが必要になるので、これらがなくなることは決してないでしょう。つまり、Verilog/VHDLとSystemCは抽象度(レベル)が違うため、今後も共存していくと思われます。また、何より現在においてはVerilog/VHDLで設計しているユーザーが圧倒的に多く、Verilog/VHDLで設計した資産も多く存在します。過去の資産の流用は当然必要になります。

ESL設計の始まり

 では、なぜSystemCなどの言語が必要になるのでしょうか?

 システムLSIの開発は、ムーアの法則に従って大規模化の一途をたどっています。さらに、1チップに複数のプロセサ・コアを集積するマルチプロセサ・コアSoC(system on a chip)が開発されるようになってきました。そこで、抽象度を高めて上流設計を行う「ESL(electronic system level)」が注目されています。ESLは、VerilogやVHDLなどによるRTL設計よりも抽象度が高く、そのため記述量が少なくて済みます。当然ながら、設計効率も上がります。

ESL言語(SystemC、SystemVerilog、SpecC)

 ESL言語としては、SystemCや「SpecC」、「SystemVerilog」などがあります。ここではこの3種類の言語の特徴を簡単に比較してみましょう。

 前述したように、SystemCはC++のクラスライブラリであり、当然のことながらC++がベースとなっています。主に上流アーキテクチャ設計部分が拡張されています。またIEEE 1666として標準化されたこともあり、Cベース設計の中では確固たる地位を獲得しています。

 SystemVerilogは、RTL設計で実績のあるVerilogをベースとした言語です。ランダム検証、カバレッジ、アサーションなど、特に検証にかかわる部分が拡張されています。また、SystemCと同じくIEEE 1800として標準化されています。Verilogと互換性があるので、既存のVerilogユーザーには魅力的です。

 SpecCはC言語がベースになっており、文法的には非常に分かりやすい言語です。ソフト/ハードウェア協調検証に着目して考えられた言語ですが、標準化までには至らなかったというのが現状です。

言語 SystemC SystemVerilog SpecC
ベース C++ Verilog C
特徴 上流アーキテクチャ設計部分を拡張 主に検証部分を拡張 ソフト/ハード強調設計
標準化 IEEE 1666 IEEE 1800
表 ESL言語の特徴

 このように、3種類の言語はそれぞれ個別の優位性を持っています。それでは、なぜSystemCなのでしょうか?

 考えられる理由の1つは、OSCI(Open SystemC Initiative)よりリファレンスシミュレータが無償で提供されていることでしょう。旧バージョン(SystemC 2.0.1)が対象ではありますが、環境構築方法を解説した以下のPDF(編注)を参考に、皆さんもぜひ試してみてください。



※編注:
CQ出版「Design Wave Magazine」2004年7月号掲載の記事をPDF化したもの。


 誰でも無償で環境を構築できる点は魅力的であり、SystemCのユーザーは増え続けています。ユーザーが増えると、さらに開発効率を上げるためにツールベンダ各社が機能アップしたツールを提供してきました。そしていまなお言語仕様、環境ともに進化し続けているという状況にあります。

※コラム:Cベース設計とSystemCの関係
ここまではESLという観点から説明してきましたが、ここで業界のもう1つの潮流である「Cベース設計」についてお話しします。

まず、開発が大規模化すると開発にも検証にも膨大な時間を要するようになり、大規模開発を行える開発環境と高速な検証環境が必要になってきました。

設計は、アルゴリズム、アーキテクチャ、タイミングなどを考えながら進める必要があります。しかし、これらを一度に考えて設計するのは困難であり、大規模開発に向いていません。そこで、HDLよりも抽象度の高いC言語によってアルゴリズム設計を行うCベース設計という手法が生まれました。その流れの中で現在大きな注目を集めているのがSystemCです。

開発フローとしては、C言語でアルゴリズム設計を行い、次にSystemCでアーキテクチャ設計を行い、最後にHDLで論理設計を行うといった流れになります。

SystemCを取り入れた設計フロー 図1 SystemCを取り入れた設計フロー


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.