SpecCは、組込みシステム(ハードウェア+ソフトウェア)をシステムレベルで記述するための設計言語です。位置づけとしては ANSI C を拡張した言語で、Verilog/VHDL のような低レベルHDLに落とす前の、上流の仕様化と段階的な具体化(リファインメント)に使います。
何ができる言語か
早い段階で仕様を書く(機能仕様、構成の当たり付け)
その仕様を、実装に近い形へ段階的にリファインしていく(アーキテクチャ設計、HW/SW分割など)
IPの組み込みや、抽象度の違う部品の統合を扱いやすくする
Cに足されている「システム記述」の要素
SpecCはCに対して、システム設計に必要な概念を追加します。代表的には次です。
階層化(構造を入れ子で表現)
並行性(複数の振る舞いを同時に進める)
通信(計算と通信を分離して扱うための仕組み)
同期(待ち合わせ、排他など)
状態遷移(FSM的なモデル)
例外処理
時間(タイミングのモデル)
SystemCとのざっくり比較
SystemCはC++ベースで普及度が高い
SpecCは「C拡張」で、システムレベルに必要な概念を比較的シンプルにまとめた思想
SpecCはシステム記述言語(SDL)またはシステムレベル設計言語(SLDL)であり、ANSI Cプログラミング言語の拡張です。デジタル組込みシステムの設計と仕様策定を支援するために使用され、[1]VerilogやVHDLのようなHDLとは異なり、機能レベルおよび仕様レベルでの設計変更能力を維持しつつ生産性の向上を実現します。アーキテクチャモデルを作成することで、他のツールが設計を直接シリコンやFPGAにマッピングできるようになります。主な目的は、様々な抽象化レベルにおけるIPの再利用、交換、統合です。
この言語と設計手法は、2001年にカリフォルニア大学アーバイン校の組み込みコンピュータシステムセンターにおいて、ライナー・ドーマーとダニエル・ガジスキによって考案されました。
類似のプロジェクトや設計手法には、C++ベースのSDLであるSystemCがある。この競合言語は業界での普及度がはるかに高い(ただしSpecCは日本で人気がある)が、SpecCは簡潔さを保ちつつ、並行処理(SpecCはパイプライン化および並列フローを提供)、同期、状態遷移(Verilogでは利用不可)、複合データ型といったSDLの重要な機能を提供している。