Menu
Coddy logo textTech

모듈 인스턴스화

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

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

모듈을 정의하고 나면 다른 모듈 내부에서 해당 모듈을 사용할 수 있습니다. 이를 인스턴스화(instantiation)라고 합니다. 각 인스턴스화는 해당 모듈의 독립된 인스턴스를 생성합니다. 청사진을 사용하여 동일한 구성 요소의 여러 복사본을 만드는 것으로 생각하면 됩니다.

기본 구문

module_name instance_name (connections);
PartMeaning
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에 연결됩니다.

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

Multiple Instances

동일한 모듈의 인스턴스를 여러 개 생성할 수 있습니다:

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)과 고유한 연결(connections)을 가집니다. 이들은 독립적으로 작동합니다.

모듈 인스턴스화 시 일어나는 일

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

인스턴스화 규칙

규칙이유
instance_name은 고유해야 함사본들을 서로 구별하기 위해
module_name이 존재해야 함다른 곳에 정의되어 있어야 함
연결 수(connections)는 포트 수(port)와 일치해야 함그렇지 않으면 Verilog가 어디에 무엇이 연결되는지 알지 못함
연결 순서(order)는 포트 순서와 일치해야 함첫 번째 신호(signal)가 첫 번째 포트에 연결됨 등
challenge icon

챌린지

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

수행할 작업:

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

직접 해보기

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: or_gate를 or1 이름으로 인스턴스화하세요
  // 신호를 다음 순서로 전달하세요: input_a, input_b, output_y
  // .port(signal) 구문을 사용하지 마세요
  

endmodule
quiz icon실력 점검

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

기초의 모든 레슨