SystemC
ハードウェアとソフトウェアの協調設計(コデザイン)に使われる、C++を基にしたシステムレベル記述言語。IEEE 1666として標準化されている。
イマシルちゃんの解説
組込み機器を作るとき、「この機能は専用の回路(ハードウェア)にする?それともプログラム(ソフトウェア)で動かす?」って、決めないといけないんだ。
SystemCを使うと、回路もプログラムも、同じC++の言葉で書いて、まとめてシミュレーションできるんだよ。
回路ができあがる前から、全体がうまく動くかを確かめられるから、開発がぐっと早くなるんだ!
より深い解説
定義
SystemCは、C++のクラスライブラリとして提供される、ハードウェアとシステムを記述するための言語である。2005年にIEEE 1666として標準化された。C++にハードウェアの記述に必要な概念(モジュール、ポート、信号、並行に動くプロセス、時間)を加えたもので、通常のC++のコンパイラでコンパイルして、シミュレーションを実行できる。
使われる場面
| 場面 | 内容 |
|---|---|
| ハードウェア/ソフトウェア協調設計 | 機能をハードウェアとソフトウェアのどちらで実現するかを、早い段階で検討する |
| システムレベルの設計 | 回路の詳細を決める前に、システム全体の構造や性能を高い抽象度でモデル化する |
| 仮想プロトタイプ | ハードウェアが完成する前に、そのモデルの上でソフトウェアの開発を始める |
| 高位合成 | SystemCやC/C++で書いた動作の記述から、回路の記述(RTL)を自動生成する |
抽象度の違い
| 抽象度 | 記述する内容 | 主な言語 |
|---|---|---|
| システムレベル(高い) | 機能、データの流れ、トランザクション | SystemC、C/C++ |
| RTL(レジスタ転送レベル) | クロックごとのレジスタ間のデータの移動 | VHDL、Verilog HDL(SystemCでも記述可能) |
| ゲートレベル(低い) | 論理ゲートのつながり | 論理合成の結果 |
設計は、抽象度の高いレベルから始め、検証しながら低いレベルへと詳細化していく。
似た言語との区別
| 言語 | 用途 |
|---|---|
| SystemC | ハードウェアとソフトウェアの協調設計に使う、C++を基にしたシステムレベル記述言語 |
| VHDL、Verilog HDL | 論理合成してFPGAなどで動かす回路を記述する、ハードウェア記述言語 |
| SysML | システムの設計と検証のための、UMLを拡張したグラフィカルなモデリング言語 |
| MathML | Webページに数式を表示するための、XMLのマークアップ言語 |