初めてでも使えるVerilog HDL文法ガイド ―― 記述スタイル編
tag: 半導体 ディジタル・デザイン
技術解説 2009年7月10日
ここでは,Verilog HDLの文法についておさらいする.Verilog HDL 2001では,それまで文法的にあいまいとされてきた部分などが修正されている.記述スタイルについてVerilog HDL 2001で改定された部分を説明する. (編集部)
Verilog HDLは,1995年にIEEE 1364として標準化されましたが,その後さまざまな修正と拡張が行われ,2001年にIEEE 1364-2001として新しい標準になりました.既存の機能もそのまま使えるように,仕様追加の形で改訂されています.
そこで,新たにHDL設計を始める方でもわかるように,Verilog HDL 2001の文法を「記述スタイル編」と「文法ガイド編」に分けて解説します.なお,記述スタイル編では,新旧両方のスタイルが可能な場合には併記せず,新スタイルのみを紹介しています.文法ガイド編では両方を併記しています.
1.モジュール構造
● 基本構造
回路を記述する基本構造がモジュールです(図1).モジュールは予約語のmoduleとend-moduleで囲まれ,回路表現からテストベンチ(検証用の記述)まで,すべてこの中で記述します.moduleに続きモジュール名,ポート・リストを記述します.モジュール名やポート名などの識別子には英数字と_(アンダ・スコア)が使え,大文字小文字を区別します(2.6節の「generateによる回路の繰り返し」で説明).
図1 モジュール構造
回路記述もテストベンチも,すべてこのモジュール構造で記述する.さらに1モジュールは1ファイルで記述し,ファイル名とモジュール名を一致させておくとよい.
ポート・リストでは,入力/出力の方向,データ型,ビット幅,端子名を定義します(リスト1(a)).双方向ポートはinoutを用います.ビット幅の表現は[0:31]や[32:1]も可能ですが,[MSB:LSB]として扱います.ポートの宣言をかっこの外で定義するスタイルもあります.
● 宣言部でネット信号や変数などを宣言
モジュールの最初に,内部で使用する信号の宣言を行います.
ネット宣言(リスト1(b))では,回路記述で使用するネットをあらかじめ宣言します.ネット宣言では信号強度や遅延を付加することもできます.ネット型にはwireのほかに表1に示すようなものがあります.
多ビットの信号は,デフォルトで符号なしとして扱います.符号付きの信号にする場合には,予約語のsignedを付加します.これにより,演算時に符号拡張などが自動で行われます.
変数宣言(リスト1(c))では,フリップフロップやラッチなどの値を保持する信号を定義します.メモリは配列として定義します.メモリをビット単位でアクセス(代入や参照)する場合は,mem[0][5]のようにします.これは,0番地のビット5です.変数には表2に示すタイプがあります.integerはテストベンチの中でよく用いられます.
パラメータは定数の代わりの識別子として用います(リスト1(d)).例えば1クロックの周期やメモリ・サイズなどです.値を変えてシミュレーションし直すときに重宝です.また,ステート・マシンの状態名に使うことで記述の可読性が向上します.
リスト1 各種宣言例
表1 ネット型
表2 変数型
● コメントは2種,フリー・フォーマット
コメントは,
- /*~*/ ... 複数行コメント
- //で始まり行末まで ... 1行コメント
があります.フリー・フォーマットなので,記述を見やすくするためにスペースやタブ,改行を自由に挿入できます.