VerilogとVHDL入門:HDL基礎をわかりやすく解説
はじめに:
この記事では、VHDLとVerilogを紹介します。また、Verilogモジュールの基本構造を学び、Verilogの「wire」データ型とそのベクトル形式に慣れ、VerilogとVHDLの基本的な違いを説明します。
Verilogとは?
Verilogはハードウェア記述言語(HDL)の一種で、IEEE 1364として標準化されています。電子回路やシステムの記述に最も一般的に使用され、デジタル回路の設計と検証に用いられます。
VHDLとは?
VHDLもハードウェア記述言語(HDL)の一種で、電子設計自動化において電子システムの振る舞いと構造を記述するために使用されます。特に、デジタル電子ハードウェア設計の構造と振る舞い、および従来のデジタル回路を記述する言語として適しています。
VerilogとVHDLの両方が必要か?
続ける前に、これら両方の言語が必要か議論しましょう。両方とも複雑なデジタル回路設計に使用される強力なツールですが、あなたが使用したいと思う方をマスターする自由があります。しかし、両方の言語について基本的な理解を持っておくべきです。
Verilogの進化
Verilogは1984年、Gateway Design Automationで設計されました。1987年にVHDLがIEEE標準となり、Verilogは1995年までに標準化されました。今日、両方とも強力なHDL(ハードウェア記述言語)です。「Verilog」という言葉は「verification(検証)」と「logic(論理)」から派生しています。この言語が最初にシミュレーションと検証ツールとして使用されたためです。
ここではいくつかのVerilog概念について説明します。
例1:
この例では、以下に示す回路のVerilogコードを書いてみましょう。
2つの入力と1つの出力が示され、ポートは1ビット幅です。回路は2つの入力からAND機能を示し、out1ポートに出力が現れます。Verilog記述は以下のようになります:
1行目と8行目:
キーワード「module」と「endmodule」は、その間の行がCircuit_1を記述することを指定します。
2行目から6行目:
これらの行は、「Circuit_1」の環境とのインターフェースを指定します。キーワード「input」と「output」が入力ポートと出力ポートを示します。その後、キーワード「wire」が設計内の物理的なワイヤーを表すVerilogデータ型を指定します。このモジュールにはa、b、out1の3本のワイヤーがあります。
7行目:
この行は、ビットごとのAND演算子「&」を用いて回路のAND機能を記述します。キーワード「assign」を用いてa & bを出力ポートに割り当てます。これは右辺の式が変化するたびに左辺が再評価されるため、連続代入とも呼ばれます。つまり、出力が継続的に更新されます。
例1とVHDLコードの比較:
以下の図は、Circuit_1モジュールのVerilogとVHDLの記述を示しています。
VHDLでは、データ型と演算子を定義するライブラリをインクルードする必要があります。したがって、VHDLコードはより記述的です。しかし、場合によってはこれは高位システムのモデリングにおいて有利です。
Verilogの4値システム:
Verilogデータ型には4つの値が使用されます:
- 0:ローロジック/偽
- 1:ハイロジック/真
- z:ハイインピーダンス状態(トライステートバッファの出力を記述するためにも使用)
- x:未知の値
VHDLのstd_logicデータ型は9つの異なる値を取り得ますが、一般的に使用されるのは「0」、「1」、「Z」、「-」(「-」は未知の値を表す)です。
例2:
次の例では、以下の図に示す回路(Circuit_2)のVerilogコードを書きます。
以下のVerilogコードが示された回路を記述します:
使用される要素は前の例と似ていますが、10行目で内部信号が定義されています。キーワード「wire」がこの接続のデータ型を指定します。ビットごとの演算子「~」はNOT、「|」はOR演算に使用されます。ビットごとの演算子「^」はXOR演算に使用されます。
以下の図は、Circuit_2モジュールのVerilogとVHDLの両方の記述を示しており、違いを観察できます。
例3:
3つ目の最後の例として、以下の図に示す回路図のVerilogコードを示します:
赤と青の入力ポートがAND演算子で結合されているのがわかります。結果は出力ポートに示されます。信号をグループ化してベクトルとして扱うことで、コードをコンパクトかつ読みやすくできます。上記の回路をVerilogコードで記述できます。Listing 1のコードを容易に拡張してこの回路を記述できます。
ベクトルのインデックス範囲は昇順([0:2])でも降順([2:0])でも記述できます。降順形式は通常エラーが起きにくく、代わりに使用できます。
産業技術