【Verilog-HDL基礎編 Part.1】モジュール宣言・端子宣言の書き方をわかりやすく解説

皆さんこんにちは。
この記事では、代表的なハードウェア言語の1つであるVerilog-HDLの基本的な記述方法について、数回に分けてご紹介いたします。モジュール宣言・端子宣言の書き方を基礎から解説し、FPGA設計初心者の方でも理解できるよう、記述ルールと構造図を交えて丁寧に説明します。
また、「同じハードウェア言語であるVHDLについて知りたい」という方や、「そもそもRTLとは?」という方は、ぜひこちらのブログも参考にしてみてください。
この記事でわかること
- Verilog-HDLの概要とVHDLとの違い(自由度・規則の厳格さの比較)
- 識別子(モジュール名・信号名など)の命名規則と予約語の注意点
- デザインファイル(モジュール)の全体構造と4つの構成要素
- モジュール宣言の書き方(module / endmodule の使い方・ポートリストの列挙方法)
- 端子(ポート)宣言の書き方(input / output / inout の属性とバス幅の指定方法)
Verilog-HDLとは
- Verilog-HDLとは、IEEE 1364として標準化されているハードウェア記述言語(HDL:Hardware Description Language)の1つです。
- 現在主に使用されているハードウェア言語としてVerilog-HDLとVHDLがありますが、この二つの違いを簡潔に示すと以下のとおりです。
| Verilog-HDL | VHDLよりも自由度が高いが曖昧な部分が多い |
|---|---|
| VHDL | 規則が厳格 |
Verilog-HDLの基本事項
| 拡張子 | デザインファイル(ソースファイル)の拡張子は" .v "です。 |
|---|---|
| 記述の最後 | 記述の最後にはセミコロン " ; " を付けます。 |
識別子の規則
Verilog-HDL内ではモジュール名、インスタンス名、信号名など様々なユーザ定義の名前(識別子)を使用します。
この識別子の付け方は以下のようにいくつかの規則があります。
| 使用できる文字 | 半角英字、数字またはアンダースコア " _ " |
|---|---|
| 先頭の文字 | 半角英字かアンダースコア " _ " 数字で始めることはできない |
| 大文字と小文字 | 大文字と小文字は区別されるが、大文字と小文字で同じ名前を使用しないことを推奨 |
| 予約語 | 予約語は名前に使用できない 予約語 Verilogの分布制御のために予約されているものを予約語という 例:and、if、input、output、assign、module、default、……等 |
コメント
コメントアウトの方法は2種類あります。
| // | " // " を記述の先頭に付けると、その行末までをコメントアウト |
|---|---|
| /* */ | " /* " から" */ " までの複数行を一括コメントアウト |
デザインファイルについて
デザインファイルの基本
モジュール
Verilog-HDLでは、テキストファイルにより回路情報を記述します。
この回路を記述する基本構造をモジュールと言い、基本的には機能単位で分割して使用することが多いです。また、設計者はモジュールの名前(モジュール名)を自由に付けることができます。
モジュールは1つのテキストファイルに複数記述することができますが、基本的には1つのモジュールを1つのテキストファイルに記述します。
端子(ポート)
モジュールへの入出力信号のことです。

デザインファイル(モジュール)の全体構造

書式構造

Verilog-HDLのデザインは1つのモジュールの中に
- モジュール宣言
- 端子宣言
- レジスタ・内部ノード宣言
- 回路記述部
が含まれます。
VHDLでは外枠の定義(entity)と内部の定義(architecture)が区別されているのに対し、Verilog-HDLではモジュールの中に外部と接続されるポートや関数内で使用する変数の宣言、処理内容などをすべて記述します。
Part.1の今回は、モジュール宣言と端子宣言の2つについて説明します。
モジュール宣言と端子宣言
モジュール宣言
・予約語「module」から始め、続けて任意のモジュール名を記述し、その後の括弧内に使用する端子名を列挙します(ポートリスト)。
・モジュールの最後は、「endmodule」で締めくくります。
文法

モジュール名宣言
- 基本的に、1つのファイルには1つのモジュールのみを記述します。
- モジュール名を決める時は予約語を使用してしまわないように注意します。
端子名宣言
- 端子名を列挙(バス幅は無視)します。
- 外部とデータをやり取りするすべての端子をリストアップします。
- 記述する複数の端子は、カンマ(,)で区切ります。
端子(ポート)宣言
モジュール宣言部のポートリストに列挙した端子について宣言します。
まず端子の属性、複数ビットの信号の場合は次にバス幅、最後にユーザ定義の端子名を記述します。

文法

端子の属性
- - input:入力
- - output:出力
- - inout:双方向
信号のバス幅
- - 複数ビットあるバス信号は、四角括弧内にビット幅を記述します。
例:5bitのバス信号 → [4:0]
演習
以下のモジュールを見ながら、モジュール名と端子宣言を実際に記述してみて下さい。

回答:_________ の部分を記述

演習の回答は次回のPart.2で説明したいと思います。
おわりに
いかがでしたでしょうか。今回の記事でVerilog-HDLの基本構造、モジュール宣言と端子宣言についてご理解いただければ幸いです。
次回はモジュールの書式構造の続きを説明したいと思います。
最後までお付き合いいただきありがとうございました。
これからもブログを通じて、皆様の設計にお役立てできればと思います。 VHDLの使い方、設計に関する問い合わせなどありましたら、ご連絡ください。




