モジュール構造
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 30/90。
モジュールはVerilogにおける基本の構成単位(ビルディングブロック)です。すべての設計は、モジュール同士を接続して大規模なシステムを構築することによって作られます。
モジュールは、以下の要素を持つハードウェアコンポーネントです:
- 名前
- 入力(入ってくる信号)
- 出力(出ていく信号)
- 内部ロジック(モジュールが行う処理)
モジュールは、ピンと内部回路を備えたチップのようなものと考えてください。
基本モジュール構造
すべてのモジュールは次の構造に従います:
module module_name (
input signals,
output signals
);
// 内部宣言 (wires, regs など)
// ロジック (assign 文、always ブロックなど)
endmoduleモジュールの構成要素
| 要素 | 目的 |
|---|---|
module キーワード | モジュール定義の開始 |
module_name | モジュールの名前 |
( ) | 入力および出力ポートのリスト |
input / output | ポートの方向を宣言 |
| モジュール本体 | 内部ロジックと接続 |
endmodule | モジュール定義の終了 |
シンプルなモジュールの例
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleこのモジュール:
- 名前は
and_gateです - 2つの入力(
a、b)を持ちます - 1つの出力(
c)を持ちます - ロジックを定義する1つの
assign文を含みます
モジュール構造のルール
- 1つのファイルに1つのモジュールが一般的なプラクティスです
- モジュール名(`module_name`)はその機能を説明するものにする必要があります
- ポートは名前の後ろの括弧内にリストされます
- 入力 (Inputs) は常に
inputです(内部で書き込むことはできません) - 出力 (Outputs) は
outputです(regまたはwireにすることが可能です) <strong>endmodule</strong>でモジュールを閉じる必要があります
チャレンジ
不足している部分を補って、このモジュールを完成させてください。
手順:
- モジュール名
my_andを追加します xにinputを追加しますyにinputを追加しますzにoutputを追加しますassignを使用して内部ロジックを追加します
自分で試してみよう
module ______ ( // モジュール名を追加
input x, // 入力を追加
input y, // 入力を追加
output z // 出力を追加
);
// ここにassign文を追加 (z = x & y)
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。