Port Mapping By Name
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 34/90。
前のレッスンでは、モジュール定義にポートが現れる同じ順序で信号を渡して、モジュールをインスタンス化する方法を学びました。これは機能しますが、問題があります。順序が重要です。
誤って順序を混同すると、信号が間違ったポートに接続されます。これはデバッグが難しい場合があります。
順序マッピングの問題
module or_gate (
input in1,
input in2,
output result
);
assign result = in1 | in2;
endmodule
// 順序マッピング - 順序は必ず一致させること
or_gate or1 (input_a, input_b, output_y); // 正しい
or_gate or1 (input_b, input_a, output_y); // 間違い!入力が入れ替わっている2行目では、input_bがin1に、input_aがin2に接続されています。見落としやすい、微妙なバグです。
解決策:名前によるポートマッピング
名前によるポートマッピングでは、接続を行うためにポート名を使用します。各接続に明示的なラベルが付けられているため、順序は関係ありません。
構文:
module_name instance_name (
.port_name(signal),
.port_name(signal)
);ポート名の前にあるドット . は、モジュール内のポートを参照していることを示します。括弧内の信号は、そのポートに接続するものです。
例
or_gate or1 (
.in1(input_a),
.in2(input_b),
.result(output_y)
);これは明示的に次のことを示しています:
- ポート
in1は信号input_aを受け取ります - ポート
in2は信号input_bを受け取ります - ポート
resultは信号output_yを受け取ります
順序は重要ではない
ポートを名前でマッピングする場合、接続は任意の順序で記述できます。
// 3つとも同一である
or_gate or1 (
.in1(input_a),
.in2(input_b),
.result(output_y)
);
or_gate or1 (
.result(output_y),
.in1(input_a),
.in2(input_b)
);
or_gate or1 (
.in2(input_b),
.result(output_y),
.in1(input_a)
);All は各接続にラベルが付いているため、まったく同じ動作をします。
チャレンジ
名前によるポートマッピングを使用して、不足しているポート接続を追加し、インスタンス化を完了してください。
実行すること:
- ポート
clkを信号clock_signalに接続する - ポート
data_inを信号input_dataに接続する - ポート
data_outを信号output_dataに接続する
自分で試してみよう
module register (
input clk,
input [7:0] data_in,
output reg [7:0] data_out
);
always @(posedge clk) begin
data_out <= data_in;
end
endmodule
module top (
input clock_signal,
input [7:0] input_data,
output [7:0] output_data
);
register reg1 (
// TODO: .port(signal) 構文を使用してポートマッピングを追加する
);
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ