1. Verilog-HDLの構造
1. Verilog-HDLの構造
Verilog-HDLの概要を説明します。
module
回路ブロックをモジュール(module)と言う単位で表します。Verilog-HDLはモジュールの集合体です。モジュールの区別はモジュール名と言う回路機能名で行います。このモジュール名は設計者が自由につける事が出来ます。
- moduleの分割は設計者が自由に決める事が出来ます
- moduleは機能単位で分割する事が多いです
- moduleは階層構造を取る事が出来ます
- 各モジュールはテキストファイルで記述されます(通常の拡張子は.v)
moduleとは回路を記述したファイルです。ある部品の回路(動作)をHDLで記述した物だと思ってください。
階層構造について
moduleは階層構造をとる事が出来るので、階層構造を持つ回路図と同じように扱う事が出来ます。
あるモジュールの中から他モジュールの呼び出し。複数のモジュールから同じモジュールの呼び出し(コピー、使いまわし)ができます。各モジュールは他のモジュール内に組み込まれたときに初めて回路として定義されます(最上位のトップモジュールは除く)。
例えば、module-Aの中でmodule-Bを2つ使用したとします。下の様にmodule-Aの中でmodule-Bが2箇所で組み込まれているとします。
module-A -+- module-B | +- module-B
この場合、2つのmodule-Bは独立な回路として動作します。この2つのmodule-Bが区別できないと困りますので実際に組み込む時は下の様に回路番号をつけます。PCBボードのリファレンス番号(部品番号)と同じです。
module-A(TOP) -+- module-B(B1) | +- module-B(B2)
カッコの中がモジュール番号です。このモジュール番号をVerilog-HDLではインスタンス名と呼びます。
まとめると、モジュールには2つの名前があります。それは、モジュール名とインスタンス名です。
名前について
Verilog-HDL内ではモジュール名、インスタンス名、信号名など様々な名前を使用します。名前の付け方には規則があります。
識別子
名前を総称して識別子と言います。通常の識別子には下の様な規則があります。
- 最初の文字は半角英字またはアンダースコア
- 識別子は半角英字、数字、アンダースコアで構成
- 大文字と小文字は区別される
- キーワードは使用できない
キーワードとは予約語の事でVerilog-HDLの文法制御の為に予約されているものです。例えば、assign, moduleなど。
数値
デジタル回路は2進演算回路ですから数字を扱う事が多いです。様々な基数表現を用いる事が出来ます。
[ビット幅]'[基数][値]
値の表現は、最初にビット幅(正整数)、シングルクォーテーション、基数、値の順に記述します。
最初にビット幅を書きます。ソフトウエアと異なりハードウエアでは値を表現する為に使用する信号線数(ビット幅)を意識しなければいけません。
次にシングルクォーテーションを入れます。
基数は下の記号を使って表します。
記号 | 基数 |
bまたはB | 2 |
oまたはO | 8 |
dまたはD | 10 |
hまたはH | 16 |
例えば、値128を8bit幅、16進で使用する場合は下のようになります。
8'h80
値128を8bit幅、10進で使用する場合は下のようになります。
8'd128
ある部分は省略する事が出来ますが、初めは丁寧に一つずつ記述する事をお勧めしておきます。
特別な数値
シミュレーション用に以下の数値が用意されています。
記号 | 基数 |
zまたはZ | ハイ・インピーダンス |
xまたはX | 不定 |
- ハイ・インピーダンス
- 別名スリーステート(3-state)。ドライブされていない信号状態の事です。