Menu
Coddy logo textTech

順序によるポートマッピング

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 35/90。

前回のレッスンでは、.port(signal) を使用して各接続を明示的に指定する名前によるポートマッピングについて学びました。今回は、もう1つの方法である順序によるポートマッピングについて解説します。

モジュール定義に現れるorder(順序)に基づいて、モジュールのport(ポート)にsignal(信号)を接続します。括弧内にsignalsを並べるだけで、Verilogがそれらを1つずつ一致させます。

構文:

module_name instance_name (signal1, signal2, signal3);

最初の signal は最初の port に接続され、2 番目の signal は 2 番目の port に接続され、以降も同様に続きます。

モジュール定義:

module or_gate (
  input in1,      // 最初のポート
  input in2,      // 2番目のポート
  output result   // 3番目のポート
);
  assign result = in1 | in2;
endmodule

順序(`order`)によるポートマッピングでのインスタンス化:

or_gate or1 (input_a, input_b, output_y);

これは以下を接続します:

  • 最初の `signal` input_a → 最初の `port` in1
  • 2番目の `signal` input_b → 2番目の `port` in2
  • 3番目の `signal` output_y → 3番目の `port` result

順番が重要です

順番によるポートマッピングでは、シーケンスが極めて重要になります:

// 正しい順序
or_gate or1 (input_a, input_b, output_y);

// 間違った順序 - 信号が間違ったポートに接続されています!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

順番を間違えると、接続が誤ったポートに行ってしまいます。一見するとコードが正しく見えるため、デバッグが難しくなる可能性があります。

名前指定 vs 順序指定のポートマッピング

機能名前指定(By Name)順序指定(By Order)
構文(Syntax).port(signal)signal1, signal2
順序が重要か?いいえはい
自己ドキュメント化?はいいいえ
ミスのリスク低い高い
推奨用途ほとんどの設計シンプルなケースのみ

順番によるポートマッピングをいつ使用するか

順番によるポートマッピングは、次のような場合に許容されます:

  • `module` の `ports` が非常に少ない場合 (2〜3個)
  • `port` の順序が明確であり、変更される可能性が低い場合
  • 素早くテストベンチを記述している場合

ほとんどの設計では、より明確でエラーが発生しにくいため、名前によるポートマッピング(port mapping by name)が推奨されます

challenge icon

チャレンジ

順番によるポートマッピング(port mapping by order)を使用して、signals正しい順序で指定し、インスタンス化を完成させてください。

手順:

モジュールのports(この順序):

  1. input en (イネーブル)
  2. input [7:0] d (データ入力)
  3. output [7:0] q (データ出力)

接続するsignals:

  • enable_signalen に接続
  • data_inputd に接続
  • data_outputq に接続

自分で試してみよう

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: ORDERマッピングを使用して名前reg1でregisterをインスタンス化
  // 信号を正しい順序でリストする: enable_signal, data_input, data_output
  // .port(signal)構文を使用しない

endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン