セクション 3 モジュールの構造
3.1 モジュールの紹介
モジュール(module)はVerilogの記述の基本単位は、デザインの機能や構造を記述し、他のブロックと通信するために使用される外部ポートです。
モジュールは、一般的なデバイス (AND ゲート、トライステート ゲートなど) や一般的なマクロ ユニット (カウンタ、ALU、CPU) などを呼び出すなど、概念的にはデバイスと同等です。したがって、あるモジュールを別のモジュールで呼び出すことができ、回路設計を複数のモジュールで構成することができます。モジュールの設計はシステム設計におけるあるレベルの設計にすぎず、モジュール設計にはさまざまなモデリング手法が使用できます。
Verilogの基本設計単位は「モジュール」です。モジュール設計により、システムがより組織的に見え、シミュレーションとテストが容易になるため、プロジェクト全体の設計思想は、モジュール内モジュールであり、上から下に順番に展開されます。プロジェクトの設計では、各モジュールが特定の機能を実装し、モジュールを階層的に入れ子にすることができます。大規模なデジタル回路を設計する場合、異なるサイズの小さなモジュールに分割し、それぞれの小さなモジュールが特定の機能を実装し、最終的にトップレベルのモジュールからサブモジュールを呼び出すことで全体の機能を実現します。トップダウンの設計思考。本書は主に Verilog ハードウェア記述言語に基づいており、モジュールは Verilog の基本的な記述単位であり、各設計の機能と構造、および他のモジュールが通信するための外部インターフェイスを記述するために使用されます。
モジュールには、ポート定義、パラメータ定義 (オプション)、I/O 記述、内部信号宣言、関数定義の 5 つの主要な部分があります。モジュールは常にキーワード module で始まり、キーワード endmodule で終わります。。その一般的な文法構造は次のとおりです。
3.2 モジュール名とポート定義
1 行目から 5 行目では、モジュールの名前と入力ポートと出力ポートを宣言します。その形式は次のとおりです: module モジュール名 (ポート 1、ポート 2、ポート 3、...); ここで、モジュールは module で始まり endmodule で終わります。モジュール名はモジュールの一意の識別子であり、通常はモジュール名とファイル名を同じにし、その機能を説明できる名前を付けることをお勧めします。
モジュールのポートは、モジュールの入力および出力ポート名を表し、他のモジュールとの接続ポートの識別でもあります。
3.3 パラメータの定義
8 行目のパラメータ定義では、コードの可読性と変更性を高めるために定数をシンボルに置き換えています。これはオプションのステートメントであり、使用しない場合は省略できます。パラメータ定義の一般的な形式は次のとおりです。
パラメータDATA_W = x;
3.4 インターフェースの定義
9 行目から 12 行目は I/O (入力/出力) の記述であり、モジュールのポートは入力ポート、出力ポート、または双方向ポートになります。記述形式は以下のとおりです。
入力ポート: 入力 [信号ビット幅-1:0] ポート名 1;
input [信号ビット幅-1:0] ポート名 2;
……;
出力ポート: 出力 [信号ビット幅-1:0] ポート名 1;
出力 [信号ビット幅-1:0] ポート名 2;
……;
双方向ポート: inout [信号ビット幅-1: 0] ポート名 1;
inout [信号ビット幅-1:0] ポート名 2;
……;
3.5 信号の種類
14 行目から 17 行目は信号のタイプを定義します。これらの信号は、モジュールで使用される信号と、ポートに関連するワイヤおよびレジスタ タイプの変数 (つまり、ワイヤ ネットワーク タイプとレジスタ タイプ) です。次のように宣言されています。
reg [width-1: 0] R 変数 1、R 変数 2 ...;
ワイヤー [幅-1: 0] W 変数 1、W 変数 2...;
信号タイプが定義されていない場合、デフォルトはワイヤータイプです、信号ビット幅は 1 です。
3.6 機能説明
21行目から31行目は関数の説明部分です。モジュール内で最も重要な部分は論理関数の定義部分です、モジュール内でロジックを生成するには 3 つの方法があります。
- 説明どおりに「assign」ステートメントを使用します。
- 2 入力 AND ゲートを説明します。a = b & c を割り当てます。詳しい機能については「機能説明 - 組み合わせロジック」を参照してください。
- 「always」ブロックを使用します。それは、先ほど紹介した順序論理と組み合わせ論理です。
- モジュールのインスタンス化。詳細な機能については、「モジュールのインスタンス化」セクションを参照してください。
3.7 モジュールのインスタンス化
デジタルシステムの設計は一般にトップダウン設計法を採用しており、システムをいくつかの機能モジュールに分割することができ、各機能モジュールはさらに次の層のサブモジュールに分割されます。各モジュールの設計はモジュールに対応しており、各モジュールは Verilog HDL プログラム ファイルとして設計されています。したがって、システムの最上位モジュールには構造化設計が採用されます。つまり、最上位モジュールは各機能モジュールを個別に呼び出します。
モジュールは別のモジュール内で参照できるため、説明の階層が作成されます。モジュールのインスタンス化ステートメントの形式は次のとおりです。
module_nameinstance_name(port_associations) ;
信号ポートは場所または名前で関連付けることができますが、関連付け方法を混合することはできません。ポートの関連付け形式は次のとおりです。 port_expr // 位置による。。
PortName (port_expr) // パス名。
提案:呼び出されるモジュールのピンが変更されたときに間違いを犯しにくいように、インスタンス化されたポート マッピングで名前の関連付けを使用してください。インスタンス化では、一部のピンが使用されない場合があり、マッピングで次のようなブランク処理を使用できます。
入力ピンのフローティング ポートの入力はハイ インピーダンス Z です。出力ピンはフローティングであるため、出力ピンは破棄されます。。