Menu
Coddy logo textTech

순서를 이용한 포트 매핑

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 35번째.

이전 레슨에서 여러분은 .port(signal)을 사용하여 각 연결을 명시적으로 레이블링하는 이름에 의한 포트 매핑(port mapping by name)에 대해 배웠습니다. 이제 대안적인 방법인 순서에 의한 포트 매핑(port mapping by order)에 대해 알아보겠습니다.

이 방식은 모듈 정의에 나타나는 순서에 따라 신호를 모듈의 포트에 연결합니다. 단순히 괄호 안에 신호들을 나열하면, Verilog가 이를 하나씩 차례대로 매칭합니다.

구문:

module_name instance_name (signal1, signal2, signal3);

첫 번째 신호는 첫 번째 포트에 연결되고, 두 번째 신호는 두 번째 포트에 연결되는 방식 등으로 이어집니다.

예제

모듈 정의:

module or_gate (
  input in1,      // 첫 번째 포트
  input in2,      // 두 번째 포트
  output result   // 세 번째 포트
);
  assign result = in1 | in2;
endmodule

순서에 의한 포트 매핑을 사용한 인스턴스화:

or_gate or1 (input_a, input_b, output_y);

이것은 다음과 같이 연결됩니다:

  • 첫 번째 신호 input_a → 첫 번째 포트 in1
  • 두 번째 신호 input_b → 두 번째 포트 in2
  • 세 번째 신호 output_y → 세 번째 포트 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
순서가 중요한가요?아니요
자기 문서화(Self-documenting)가 되나요?아니요
실수 위험낮음높음
권장 용도대부분의 설계단순한 경우에만

순서에 의한 포트 매핑을 사용하는 경우

순서에 의한 포트 매핑은 다음과 같은 경우에 허용됩니다:

  • 모듈의 포트 수가 매우 적을 때 (2-3개)
  • 포트 순서가 명확하고 변경될 가능성이 낮을 때
  • 빠른 테스트벤치를 작성할 때

대부분의 설계에서, 이름에 의한 포트 매핑(port mapping by name)이 선호됩니다. 이는 더 명확하고 오류가 발생할 가능성이 적기 때문입니다.

challenge icon

챌린지

포트 매핑 순서를 사용하여 신호를 올바른 순서로 나열하여 인스턴스화를 완료하세요.

수행할 작업:

모듈 포트 (다음 순서대로):

  1. input en (enable)
  2. input [7:0] d (data input)
  3. output [7:0] q (data output)

연결할 신호:

  • enable_signalen에 연결
  • data_inputd에 연결
  • data_outputq에 연결

치트 시트

순서에 의한 포트 매핑(Port mapping by order)은 모듈의 포트 정의 순서와 일치하는 위치를 기반으로 신호를 연결합니다.

module_name instance_name (signal1, signal2, signal3);

or_gate 모듈(포트: in1, in2, result)을 사용한 예시:

or_gate or1 (input_a, input_b, output_y);

순서가 매우 중요합니다. 신호의 순서를 바꾸면 잘못된 연결이 발생하며, 이는 디버깅하기 매우 어렵습니다.

특징이름에 의한 매핑순서에 의한 매핑
구문.port(signal)signal1, signal2
순서 중요 여부아니요
실수 위험낮음높음
권장 용도대부분의 설계단순하거나 포트가 적은 경우에만

직접 해보기

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 mapping)을 사용하여 이름이 reg1인 register를 인스턴스화하세요
  // 신호를 올바른 순서로 나열하세요: enable_signal, data_input, data_output
  // .port(signal) 구문을 사용하지 마세요

endmodule
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨