1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. 【Verilog-HDL基礎編 Part.1】モジュール宣言・端子宣言の書き方をわかりやすく解説

TECHブログ

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

【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つのテキストファイルに記述します。

端子(ポート)

モジュールへの入出力信号のことです。

図1 モジュール

図1 モジュール

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

図2 モジュールの全体構造

図2 モジュールの全体構造

書式構造

図3 モジュールの書式構造

図3 モジュールの書式構造

Verilog-HDLのデザインは1つのモジュールの中に

  1. モジュール宣言
  2. 端子宣言
  3. レジスタ・内部ノード宣言
  4. 回路記述部

が含まれます。

VHDLでは外枠の定義(entity)と内部の定義(architecture)が区別されているのに対し、Verilog-HDLではモジュールの中に外部と接続されるポートや関数内で使用する変数の宣言、処理内容などをすべて記述します。

Part.1の今回は、モジュール宣言と端子宣言の2つについて説明します。

モジュール宣言と端子宣言

モジュール宣言

・予約語「module」から始め、続けて任意のモジュール名を記述し、その後の括弧内に使用する端子名を列挙します(ポートリスト)。

・モジュールの最後は、「endmodule」で締めくくります。

文法

図4 モジュール宣言

図4 モジュール宣言

モジュール名宣言

  • 基本的に、1つのファイルには1つのモジュールのみを記述します。
  • モジュール名を決める時は予約語を使用してしまわないように注意します。

端子名宣言

  • 端子名を列挙(バス幅は無視)します。
  • 外部とデータをやり取りするすべての端子をリストアップします。
  • 記述する複数の端子は、カンマ(,)で区切ります。

端子(ポート)宣言

モジュール宣言部のポートリストに列挙した端子について宣言します。
まず端子の属性、複数ビットの信号の場合は次にバス幅、最後にユーザ定義の端子名を記述します。

図5 モジュール例

図5 モジュール例

文法

図6 端子宣言

図6 端子宣言

端子の属性

  • - input:入力
  • - output:出力
  • - inout:双方向

信号のバス幅

  • - 複数ビットあるバス信号は、四角括弧内にビット幅を記述します。
    例:5bitのバス信号 → [4:0]

演習

以下のモジュールを見ながら、モジュール名と端子宣言を実際に記述してみて下さい。

図7 演習図

図7 演習図

回答:_________ の部分を記述

回答

演習の回答は次回のPart.2で説明したいと思います。

おわりに

いかがでしたでしょうか。今回の記事でVerilog-HDLの基本構造、モジュール宣言と端子宣言についてご理解いただければ幸いです。
次回はモジュールの書式構造の続きを説明したいと思います。

最後までお付き合いいただきありがとうございました。

これからもブログを通じて、皆様の設計にお役立てできればと思います。 VHDLの使い方、設計に関する問い合わせなどありましたら、ご連絡ください。

お問い合わせはこちら

 

関連ブログ