VerilogとVHDLの違い:2つのハードウェア記述言語を比較

VerilogとVHDLは、デジタル回路をシミュレーションや論理合成のために記述する、2つの主要なハードウェア記述言語(HDL)です。Verilogは、C言語に似た短い文法で、始めやすい言語です。VHDLは、記述が長く、型が厳しいので、間違いを早い段階で見つけやすいです。どちらでも同じ回路を記述でき、選ぶ基準は、業界、会社、既存のコードであることが多いです。

項目Verilog(SystemVerilogを含む)VHDL
成り立ち1980年代にGateway Design Automationが作り、IEEE 1364として標準化された米国防総省のために開発され、1987年にIEEE 1076として標準化された
文法の特徴簡潔で、C言語に似ている記述が長く、Adaに似ている
型弱い型付け。暗黙の型変換が簡単だが、間違いを隠すことがある強い型付け。明示的な型変換が必要で、コンパイル時に間違いを見つけられる
大文字と小文字区別する区別しない
学習のしやすさ始めやすい最初は難しいが、慣れると安全
検証の機能Verilog単体では限られる。SystemVerilogでクラス、制約付きランダムテスト、アサーション、UVMが加わるVHDL-2008に、OSVVMやUVVMなどのライブラリ
言語の抽象化少ない。モジュールとパラメータ豊富。パッケージ、ジェネリック、レコード、列挙型
ツールの対応主要なシミュレータと論理合成ツールがすべて対応主要なシミュレータと論理合成ツールがすべて対応。混在した言語でのシミュレーションもできる
主な利用者ASICやSoCの設計。特に米国とアジア欧州、航空宇宙・防衛、多くのFPGA開発

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

Verilog / SystemVerilog
チップの設計と検証では、まずこちらが無難です。業界のツールやライブラリがSystemVerilogを中心に作られているためです。
VHDL
厳しい型付けと、長期の保守のしやすさが重要な場面に向きます。安全が重要な開発や防衛関連など。
実際には
両方を読む必要が出ることも多いです。考え方(モジュールやエンティティ、並行して動く信号、クロックで動くプロセス)は同じです。

よくある質問

VerilogとVHDLでは、どちらが学びやすいですか?

Verilogです。文法が短く、C言語に似ているからです。VHDLは記述が長く、型も厳しいので、最初は難しいですが、コンパイル時により多くの間違いを見つけられます。

業界ではどちらがよく使われていますか?

ASICやSoCの設計と検証では、特に米国とアジアで、SystemVerilogが主流です。VHDLは、欧州、航空宇宙・防衛、多くのFPGA開発で使われています。

VerilogとVHDLは1つのプロジェクトで混在できますか?

できます。主要なシミュレータと論理合成ツールが、混在した言語の設計に対応していて、片方の言語で書いたモジュールを、もう片方で使えます。

SystemVerilogとは何ですか?

Verilogを拡張した言語で、クラス、制約付きランダムテスト、アサーション、UVMの手法が加わります。チップの検証の標準になっています。

理解度チェック

VerilogなどのHDLで書いた記述と、C言語などのソフトウェアのプログラムとの大きな違いとして正しいものはどれか。

  1. AHDLの記述は、同時に並行して動く回路を表している
  2. BHDLの記述は、上の行から1行ずつ順番に実行される命令の並びである
  3. CHDLでは、変数や条件分岐を使えない
答えと解説を見る

正解:A. HDLの記述は、同時に並行して動く回路を表している

HDLは見た目がプログラムに似ていますが、書いた内容は論理合成によってゲートやフリップフロップの回路になります。回路の各部分は常に同時に動いているので、複数のassign文やalwaysブロックは書いた順番に関係なく並行して働きます。ソフトウェアのように「この処理が終わったら次」と考えると、思った回路にならないので、どんな回路ができるかを想像しながら書くことが大切です。

Verilogでmoduleを使う目的として正しいものはどれか。

  1. A入力と出力の端子(ポート)を持つ回路の部品を定義し、ほかのmoduleの中で使えるようにする
  2. Bプログラムの実行を一時的に止める
  3. Cシミュレーションの結果を画面に表示する
答えと解説を見る

正解:A. 入力と出力の端子(ポート)を持つ回路の部品を定義し、ほかのmoduleの中で使えるようにする

moduleは、入力と出力のポートを持つ回路のまとまりを定義する単位で、加算器やカウンタ、CPU全体などを表します。定義したmoduleは、別のmoduleの中で部品として何度でも使え(インスタンス化)、ポートを配線でつないで大きな回路を組み立てます。基板の上に部品を並べて配線するのと同じように、回路を階層的に作れます。

Verilogのwire型とreg型の違いとして正しいものはどれか。

  1. Aregは必ずフリップフロップになり、wireは必ず組み合わせ回路になる
  2. Bwireはassign文などでつながれる配線を表し、regはalwaysブロックの中で値を代入する信号を表すが、regが必ずフリップフロップになるわけではない
  3. Cwireは数値を、regは文字を入れるための型である
答えと解説を見る

正解:B. wireはassign文などでつながれる配線を表し、regはalwaysブロックの中で値を代入する信号を表すが、regが必ずフリップフロップになるわけではない

Verilogでは、assign文やmoduleの出力で駆動される信号はwire、alwaysブロックの中で代入される信号はregと宣言する決まりです。regは「レジスタ」の略に見えますが、always @(*)の中で代入すれば組み合わせ回路になり、フリップフロップにはなりません。フリップフロップになるかどうかは、クロックのエッジで値を更新する書き方かどうかで決まります。SystemVerilogでは両方をlogic型で書けます。

  1. Verilogのノンブロッキング代入(<=)の動作として正しいものはどれか。
  2. RTL設計で主に使われるハードウェア記述言語はどれか。
  3. SystemVerilogを使った検証で、再利用しやすいテスト環境(テストベンチ)を組み立てるための標準的な方法論はどれか。

ハードウェア記述言語と検証の練習問題へ

関連する用語の解説

Verilog
デジタル回路の設計と検証に広く使われるハードウェア記述言語。moduleを単位に回路を書き、assignやalwaysで動作を表す。
SystemVerilog
Verilogを拡張した言語。logic型やalways_ff・always_combなどの設計の機能と、クラス、制約付きランダム、アサーションなどの検証の機能を持つ。
ハードウェア記述言語
デジタル回路の構造や動作を文章で記述するための言語。HDL。VerilogやSystemVerilog、VHDLがあり、論理合成で回路に変換する。
RTL(レジスタ転送レベル)
レジスタの間でデータがどのように転送・処理されるかで回路を記述する設計の抽象度。VerilogやVHDLで書き、論理合成の入力になる。

関連する比較