순서를 이용한 포트 매핑
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→ 첫 번째 portin1 - 두 번째 signal
input_b→ 두 번째 portin2 - 세 번째 signal
output_y→ 세 번째 portresult
순서가 중요합니다
순서에 의한 포트 매핑(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
| Feature | By Name | By Order |
|---|---|---|
| Syntax | .port(signal) | signal1, signal2 |
| Order matters? | No | Yes |
| Self-documenting? | Yes | No |
| Risk of mistakes | Low | High |
| Recommended for | Most designs | Simple cases only |
순서에 의한 포트 매핑을 사용하는 경우
다음과 같은 경우 순서에 의한 포트 매핑이 허용됩니다:
- 모듈의 포트 수가 매우 적을 때 (2-3개)
- 포트 순서가 명확하고 변경될 가능성이 낮을 때
- 빠른 테스트벤치를 작성할 때
대부분의 설계에서는 더 명확하고 오류 발생 가능성이 적기 때문에 이름에 의한 port mapping을 선호합니다.
챌린지
순서 기반 포트 매핑을 사용하여 신호들을 올바른 순서로 나열함으로써 인스턴스화를 완료하세요.
수행할 작업:
모듈 포트 (이 순서대로):
input en(enable)input [7:0] d(data input)output [7:0] q(data output)
연결할 신호:
enable_signal→en에 연결data_input→d에 연결data_output→q에 연결
직접 해보기
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.