모듈 인스턴스화
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 33번째.
모듈 인스턴스화(Module instantiation)는 한 모듈 내부에서 다른 모듈의 복사본을 생성하는 과정입니다. 이는 더 작은 컴포넌트들을 함께 연결하여 더 큰 설계를 구축하는 방법입니다.
모듈을 정의하고 나면 다른 모듈 내부에서 해당 모듈을 사용할 수 있습니다. 이를 인스턴스화(instantiation)라고 합니다. 각 인스턴스화는 해당 모듈의 독립된 인스턴스를 생성합니다. 청사진을 사용하여 동일한 구성 요소의 여러 복사본을 만드는 것으로 생각하면 됩니다.
기본 구문
module_name instance_name (connections);| Part | Meaning |
|---|---|
module_name | 인스턴스화할 모듈의 이름 |
instance_name | 이 사본의 고유 이름 |
connections | 모듈의 포트에 연결된 신호들 |
간단한 예제
1단계: 모듈 정의하기
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule2단계: 다른 모듈에서 인스턴스화하기
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)가 첫 번째 포트에 연결됨 등 |
챌린지
or_gate 모듈을 인스턴스화하여 코드를 완성하세요.
수행할 작업:
- 인스턴스 이름
or1을 사용하여or_gate를 인스턴스화하세요. - 신호를 올바른 순서대로 전달하세요:
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.