Port Mapping By Name
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 34번째.
이전 레슨에서는 모듈 정의에 포트가 나타나는 동일한 순서로 신호를 전달하여 모듈을 인스턴스화하는 방법을 배웠습니다. 이 방법은 작동하지만 한 가지 문제가 있습니다. 순서가 중요합니다.
실수로 순서를 뒤섞으면 신호가 잘못된 포트에 연결됩니다. 이는 디버깅하기 어려울 수 있습니다.
Order 매핑의 문제
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); // 잘못됨! 입력이 바뀜두 번째 줄은 input_b를 in1에 연결하고 input_a를 in2에 연결합니다. 이는 놓치기 쉬운 미묘한 버그입니다.
해결책: 이름으로 포트 매핑
이름으로 포트를 매핑하면 port name을 사용하여 연결합니다. 각 연결에 명시적으로 레이블이 지정되므로 순서는 중요하지 않습니다.
구문:
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를 받습니다
순서는 중요하지 않습니다
이름으로 포트를 매핑하면 연결을 어떤 순서로든 작성할 수 있습니다:
// 세 개 모두 동일합니다
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)
);각 연결에 레이블이 지정되어 있으므로 모두 정확히 동일한 작업을 수행합니다.
챌린지
이름으로 port 매핑을 사용하여 누락된 port 연결을 추가해 인스턴스화를 완성하세요.
할 일:
- port
clk를 signalclock_signal에 연결하세요. - port
data_in을 signalinput_data에 연결하세요. - port
data_out을 signaloutput_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 컴파일러