SystemC(システムシー)は、電子回路機器の機能設計への使用を目的としたハードウェア記述言語 (HDL) の一種である。SystemC登場以前より存在し、純然たるHDLであるVerilogやVHDLに比べ、動作レベルモデリングなど、よりシステム寄りの記述言語である。

仕様

SystemCは、プログラム言語であるC++のクラスライブラリを提供している。独立した文法ではない。ライブラリにはハードウェア記述の為の機能、並列実行の概念やデータ型を扱う各種関数を定義している。プログラムはC++コンパイラでコンパイルすることができる。生成したオブジェクトはハードウェアのシミュレータとして動作する。

言語としては、VerilogやVHDLと類似点も持つ。C++に由来する抽象データ型やテンプレート、動的なメモリ割り当てなどを使った自由度が大きく、抽象度の高い記述が可能である。自由に、抽象的に記述したものを実際のハードウェア化するのは困難なことである。論理合成ツールの能力に依存する。VerilogやVHDLで論理合成可能な具体化は人手による介在が必要な場合がある。仕様あるいは、あるアルゴリズムを最初は純然たるソフトウェアとして記述、デバッグ、その後順次ハードウェアに変換していくということがC++という同じ枠内でできるということに意味があるということである。

SystemCは複数のEDAベンダーや大学などの研究機関により提案され仕様が策定されてきた。2005年時点でのバージョンは2.1、さらに2007年3月には、バージョン2.2を公開した。トランザクションレベル・モデルライブラリを検討した。 2011年、IEEE 1666 IEEE Standard for Standard SystemC Language Reference Manualとして規格になっている。

言語要素

モジュール

モジュールはSystemCによる設計の階層中で基本となるブロックである。SystemCのモデルでは、ポート(次項)を通じて通信する複数のモジュールから構成される。

ポート

ポートは、モジュール内部と外部とを接続する端子である。通常は別のモジュールのポートに接続される。

プロセス

プロセスは、メインとなる処理要素である。個々のプロセスは同時、並列に実行される。

チャネル

チャネルは通信の要素であり、単純な配線のこともあれば、FIFOのような複雑なメカニズムのこともある。

基本チャネル:

インターフェイス

ポートはチャネルとの通信にインターフェイスを使用する。

イベント

プロセス間の同期を取るために用いる。

データタイプ(型)

SystemCはモデリングを支援するいくつかのデータタイプを用意している。

C++標準の型を拡張したもの:

論理型:

固定小数点型:

※1 sc_bigint<>, sc_biguintは、sc_int<>, sc_uint<>に比べ著しくシミュレーションスピードが遅い

※2 sc_bitは、IEEE1666ではdeprecated featuresであり、代わりにboolの使用が薦められている

例

加算器の記述例:

# include "systemc.h"

SC_MODULE(adder)          // モジュール (クラス) 宣言
{
  sc_in<int> a, b;        // ポート
  sc_out<int> sum;

  void do_add()           // プロセス
  {
    sum = a + b;
  }

  SC_CTOR(adder)          // コンストラクタ
  {
    SC_METHOD(do_add);    // カーネルへのdo_addの登録
    sensitive << a << b;  // do_addのセンシティビティリスト
  }
};

参考文献

関連項目

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS D29