Menu
Coddy logo textTech

순서를 이용한 포트 매핑

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

이전 레슨에서는 .port(signal)를 사용하여 각 연결을 명시적으로 지정하는 port mapping by name에 대해 배웠습니다. 이제 또 다른 방법인 port mapping by order에 대해 알아보겠습니다.

모듈 정의에 나타나는 order를 기준으로 모듈의 ports에 signals를 연결합니다. 괄호 안에 signals를 순서대로 나열하기만 하면 Verilog가 하나씩 1대1로 매핑합니다.

구문(Syntax):

module_name instance_name (signal1, signal2, signal3);

첫 번째 signal은 첫 번째 port에 연결되고, 두 번째는 두 번째 port에 연결되는 방식입니다.

예시

모듈 정의:

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

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

or_gate or1 (input_a, input_b, output_y);

다음과 같이 연결됩니다:

  • 첫 번째 signal input_a → 첫 번째 port in1
  • 두 번째 signal input_b → 두 번째 port in2
  • 세 번째 signal output_y → 세 번째 port result

순서가 중요합니다

순서에 의한 포트 매핑(port mapping)에서는 시퀀스(순서)가 매우 중요합니다:

// 올바른 순서
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);

순서를 섞으면 연결이 잘못된 포트로 이동합니다. 코드가 처음에는 올바르게 보이기 때문에 이는 디버깅하기 어려울 수 있습니다.

Port Mapping By Name vs By Order

FeatureBy NameBy Order
Syntax.port(signal)signal1, signal2
Order matters?NoYes
Self-documenting?YesNo
Risk of mistakesLowHigh
Recommended forMost designsSimple cases only

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

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

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

대부분의 설계에서는 더 명확하고 오류 발생 가능성이 적기 때문에 이름에 의한 port mapping을 선호합니다.

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에 연결

직접 해보기

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실력 점검

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

기초의 모든 레슨