VerilogとSystemVerilogの主な違いは、Verilogがハードウェア記述言語であるのに対し、SystemVerilogはVerilogをベースにしたハードウェア記述言語およびハードウェア検証言語である点です。
HDL(Hardware Description Language)は、電子回路の構造や動作を記述するためのコンピュータ言語です。
ハードウェア検証言語は、ハードウェア記述言語で記述された電子回路を検証するためのプログラミング言語です。
VerilogはHDLであり、SystemVerilogはHDLであると同時にHVLでもあります。
全体として、SystemVerilogはVerilogのスーパーセットと言えます。
Verilogとは
Verilogは、ハードウェア記述言語です。
アナログ回路やミックスドシグナル回路の検証や、遺伝子の回路設計にも役立ちます。
2009年、VerilogはSystemVerilog規格に統合されました。
そのため、現在VerilogはSystemVerilogの一部となっています。
Verilogの主なデータ型はWireとRegです。
Wireは回路中のゲートやモジュール間を結ぶ物理的な線を表します。
Regは手続き上の代入から次の代入への値を保持します。
その他によく使われるキーワードは以下の通りです。
Input – タスクやモジュールの入力ポートを宣言する。
Output – タスクやモジュールの出力ポートを宣言する。
Inout – タスクまたはモジュールの双方向ポートを宣言します。
Verilogは様々な抽象化レベルをサポートします。
ビヘイビアレベルは、コンカレントアルゴリズムを説明します。
レジスタ転送レベル(RTL)は、演算による回路の特性やレジスタ間のデータ転送を説明する。
さらに、ゲートレベルでは、論理リンクとそのタイミング特性が定義されます。
SystemVerilogとは
SystemVerilogは、Verilogをベースに機能を追加したハードウェア記述言語およびハードウェア検証言語です。
電子システムのモデル化、設計、シミュレーション、テスト、実装を支援します。
さらに、SystemVerilogは、主に半導体や電子設計業界で使用されています。
SystemVerilogで規定されているデータ型は、静的変数と自動変数の2つです。
プログラマは、プログラム実行の最初に静的変数を作成します。
そして、この値はプログラムの全寿命期間中、同じままです。
また、この値は実行中に新しい値が割り当てられると変化することがあります。
さらに、自動変数は、プログラムの実行が変数のスコープに入った瞬間に作成されます。
SystemVerilogは、3つの新しい手続きブロックから構成されています。
これらは、ハードウェアのモデリングに役立ちます。
always_combは組合せ論理のモデル化に、always_ffはフリップフロップに、always_latchはラッチに対応します。
HDLコンパイラや検証プログラムは、必要なタイプの動作のみが発生することを保証します。
さらに、SystemVerilogには、接続されたモジュール間のポート名宣言の重複を減らすのに役立つインタフェースがあります。
SystemVerilogのもう一つの重要な用途は、オブジェクト指向プログラミングをサポートすることです。
これらのクラスは単一継承モデルをサポートしています。
しかし、プログラマはインターフェイスを使用して複数の継承を実装することができます。
また、C++のようなポリモーフィズムの概念を実装することも可能です。
また、localやprotectedといったキーワードは、カプセル化のような概念を実現するのに役立ちます。
デフォルトでは、クラスのプロパティはpublicです。
さらに、SystemVerilogは自動ガベージコレクタを提供します。
VerilogとSystemVerilogの違い
定義
Verilogはハードウェア記述言語(HDL)であり、電子システムのモデリングを支援する。
一方、SystemVerilogはハードウェア記述言語であると同時に、電子システムのモデル化、設計、シミュレーション、テスト、実装に使用するハードウェア検証言語でもあります。
これがVerilogとSystemVerilogの主な違いです。
パラダイム
また、VerilogとSystemVerilogのもう一つの重要な違いは、Verilogが構造化パラダイムをサポートしているのに対し、SystemVerilogは構造化パラダイムとオブジェクト指向パラダイムをサポートしている点です。
IEEE
VerilogはIEEE1364、SystemVerilogはIEEE1800として標準化されています。
ファイル拡張子
また、Verilogのファイル拡張子は.vまたは.vhですが、SystemVerilogのファイル拡張子は.svまたは.svhです。
影響力
さらに、VerilogとSystemVerilogのもう一つの違いは、前者がCとFortranの影響を受けているのに対して、後者はVerilog、VHDL、C++の影響を受けていることです。
データ型
VerilogはWireとRegのデータ型をサポートしていますが、SystemVerilogはenum, struct, union, class, stringなど様々なデータ型をサポートしています。
この点もVerilogとSystemVerilogの違いです。
手順ブロック
また、SystemVerilogでは、always_comb, always_ff, always_latchという手続きブロックがありますが、Verilogでは、alwaysブロック1つで組み合わせ論理と順序論理の実装が可能です。
建設
Verilogがモジュールの階層構造であるのに対して、SystemVerilogはクラスがベースになっています。
テストベンチ
また、Verilogはモジュールレベルのテストベンチを使用し、SystemVerilogはクラスベースのテストベンチを使用します。
結論
VerilogとSystemVerilogの大きな違いは、Verilogがハードウェア記述言語であるのに対し、SystemVerilogはVerilogをベースにしたハードウェア記述言語およびハードウェア検証言語である点です。
簡単に説明すると、SystemVerilogはVerilogに機能を追加した拡張版です。