Menu
Coddy logo textTech

모듈 인스턴스화

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

모듈 인스턴스화(Module instantiation)는 다른 모듈 내부에 모듈의 복사본을 생성하는 과정입니다. 이는 작은 컴포넌트들을 함께 연결하여 더 큰 설계를 구축하는 방법입니다.

모듈을 정의하고 나면, 다른 모듈 내부에서 그것을 사용할 수 있습니다. 이것을 인스턴스화라고 합니다. 각 인스턴스화는 해당 모듈의 별도 인스턴스를 생성합니다. 동일한 컴포넌트의 복사본을 여러 개 만들기 위해 설계도를 사용하는 것과 같다고 생각하면 됩니다.

기본 구문

module_name instance_name (connections);
항목의미
module_name인스턴스화할 모듈의 이름
instance_name이 복사본의 고유 이름
connections모듈의 포트에 연결된 신호들

간단한 예제

1단계: 모듈 정의하기

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

2단계: 다른 모듈에서 인스턴스화하기

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

이 코드에서 일어나는 일은 다음과 같습니다:

  • and_gate — 사용하려는 모듈의 이름 (어딘가에 존재해야 함)
  • gate1 — 이 특정 인스턴스에 부여하는 고유한 이름
  • (x, y, z) — 모듈의 포트에 연결하는 신호 (모듈 정의에 나타나는 순서와 동일해야 함)

첫 번째 신호 x는 첫 번째 포트 a에 연결됩니다. 두 번째 신호 y는 두 번째 포트 b에 연결됩니다. 세 번째 신호 z는 세 번째 포트 c에 연결됩니다.

모듈에 신호를 전달해야 합니다. 괄호는 비워둘 수 없습니다. 신호의 수는 포트의 수와 일치해야 합니다.

다중 인스턴스

동일한 모듈의 복사본을 여러 개 생성할 수 있습니다:

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

각 인스턴스는 고유한 이름(gate1, gate2)과 고유한 연결을 가집니다. 이들은 독립적으로 작동합니다.

인스턴스화 중에 일어나는 일

  • 하드웨어의 복사본이 생성됩니다
  • 각 인스턴스는 자체 신호 집합을 가집니다
  • 인스턴스는 병렬로 (동시에) 실행됩니다
  • 전달하는 신호는 인스턴스가 디자인의 나머지 부분과 연결되는 방식을 결정합니다.

인스턴스화 규칙

규칙이유
인스턴스 이름은 고유해야 합니다복사본들을 구별하기 위해
모듈 이름이 존재해야 합니다다른 곳에서 정의되어야 합니다
연결의 수는 포트의 수와 일치해야 합니다그렇지 않으면 Verilog는 무엇이 어디에 연결되는지 알 수 없습니다
연결 순서는 포트 순서와 일치해야 합니다첫 번째 신호는 첫 번째 포트에 연결되는 식입니다
challenge icon

챌린지

or_gate 모듈을 인스턴스화하여 코드를 완성하세요.

수행할 작업:

  1. 인스턴스 이름 or1으로 or_gate를 인스턴스화하세요
  2. 신호를 올바른 순서로 전달하세요: input_a, input_b, output_y

치트 시트

모듈 인스턴스화는 한 모듈 내부에 다른 모듈의 복사본을 생성합니다:

module_name instance_name (connections);

예시:

module and_gate (input a, input b, output c);
  assign c = a & b;
endmodule

module top (input x, input y, output z);
  and_gate gate1 (x, y, z); // x→a, y→b, z→c
endmodule

규칙:

  • 인스턴스 이름은 고유해야 합니다
  • 연결의 수는 포트의 수와 일치해야 합니다
  • 연결 순서는 포트 정의 순서와 일치해야 합니다
  • 여러 인스턴스는 병렬로 실행되며, 각각 고유한 신호를 가집니다

직접 해보기

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

module top (
  input input_a,
  input input_b,
  output output_y
);
  
  // TODO: or1이라는 이름으로 or_gate 인스턴스화
  // 신호를 input_a, input_b, output_y 순서대로 전달
  // .port(signal) 구문을 사용하지 마세요
  

endmodule
quiz icon실력 점검

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

기초의 모든 레슨