SystemCは、
電子回路機器の機能設計を目的としたハードウェア記述言語(HDL)の一種です。純粋なHDLであるVerilogやVHDLと比較して、動作レベルモデリングなど、よりシステム寄りの記述に適しています。
仕様
SystemCは、プログラミング言語である
C++のクラスライブラリとして提供され、独立した文法を持ちません。このライブラリには、ハードウェア記述に必要な機能、並列実行の概念、データ型を扱うための各種関数が定義されています。
C++コンパイラでコンパイルすることで、生成されたオブジェクトはハードウェアシミュレータとして動作します。
言語としては、VerilogやVHDLと類似する点もありますが、
C++に由来する
抽象データ型、テンプレート、動的なメモリ割り当てなどを利用でき、高い抽象度での記述が可能です。ただし、抽象的な記述を実際のハードウェアに変換することは、論理合成ツールの能力に依存し、VerilogやVHDLでの具体的な記述への変換には、人の介在が必要となる場合があります。SystemCの利点は、仕様やアルゴリズムを最初はソフトウェアとして記述し、デバッグ後、順次ハードウェアに変換できる点です。これにより、
C++という共通の枠組みの中で開発を進めることができます。
SystemCは、複数の
EDAベンダーや大学などの研究機関によって提案され、仕様が策定されてきました。2005年にはバージョン2.1が、2007年3月にはバージョン2.2が公開され、トランザクションレベル・モデルライブラリが検討されました。2011年には、
IEEE 1666
IEEE Standard for Standard SystemC Language Reference Manualとして規格化されています。
言語要素
モジュール
モジュールは、SystemCによる設計の階層における基本ブロックです。SystemCのモデルは、ポートを通じて通信する複数のモジュールから構成されます。
ポート
ポートは、モジュール内部と外部を接続する端子で、通常は別のモジュールのポートに接続されます。
プロセス
プロセスは、メインの処理要素であり、個々のプロセスは同時並行に実行されます。
チャネル
チャネルは、通信の要素であり、単純な配線からFIFOのような複雑なメカニズムまであります。
基本チャネル
信号
バッファ
FIFO
ミューテックス
セマフォ
インターフェース
ポートはチャネルとの通信にインターフェースを使用します。
イベント
イベントは、プロセス間の同期を取るために使用します。
データタイプ(型)
SystemCは、モデリングを支援するいくつかのデータ型を提供しています。
C++標準の型を拡張したもの
`sc_int<>`:64ビットまでの符号付き整数
`sc_uint<>`:64ビットまでの符号なし整数
`sc_bigint<>`:可変精度符号付き整数
`sc_biguint<>`:可変精度符号なし整数
論理型
`sc_bit`:2値シングルビット(非推奨、`bool`の使用を推奨)
`sc_logic`:4値シングルビット
`sc_bv<>`:`sc_bit`のベクター(可変配列)
`sc_lv<>`:`sc_logic`のベクター
固定小数点型
`sc_fixed<>`:符号付き固定小数点テンプレート
`sc_ufixed<>`:符号なし固定小数点テンプレート
`sc_fix`:符号付き固定小数点
`sc_ufix`:符号なし固定小数点
注意点:
`sc_bigint<>`および`sc_biguint<>`は、`sc_int<>`や`sc_uint<>`と比較してシミュレーション速度が著しく遅くなります。
`sc_bit`は、IEEE1666では非推奨となっており、代わりに`bool`の使用が推奨されています。
例
加算器の記述例:
(記述例は省略。具体的なコード例については、関連資料をご参照ください。)
参考文献
Grötker, Thorsten 『SystemCによるシステム設計』柿本勝、河原林政道、長谷川隆(監訳)、丸善、2003年 ISBN 4-621-07144-0 C3055
1666-2011 - IEEE Standard for Standard SystemC Language Reference Manual
関連項目
SpecC
SystemVerilog
外部リンク
SystemC ホームページ(英語)