Verilog 포트 완전 정복: 입력, 출력, 인아웃, 포트 선언 스타일
포트는 모듈과 외부 세상을 연결하는 핀(Pin) 역할을 합니다. 모듈을 PCB 위 칩으로 비유하면 포트는 패키지 핀과 같습니다.
포트 방향 3가지
| 포트 | 방향 | 설명 |
input | 외부 → 내부 | 모듈이 외부에서 값만 수신 |
output | 내부 → 외부 | 모듈이 외부로 값만 송신 |
inout | 양방향 | 양방향 버스 등에서 송수신 모두 가능 |
포트 기본 타입은 wire (넷)입니다.
포트 선언 문법
input [net_type] [range] port_names;
inout [net_type] [range] port_names;
output [net_type] [range] port_names; // wire 구동 출력
output [var_type] [range] port_names; // reg 변수 구동 출력 (프로시저럴 블록에서 사용)
예시
module my_design (
input wire clk,
input wire en,
input wire rw,
inout wire [15:0] data,
output reg int
);
// 설계 동작 기술
endmodule
동일 이름으로 다중 포트 선언 불가.
부호 있는 포트 (Signed Ports)
- 포트 선언 또는 넷/레그 선언에
signed 속성 부여
- 암시적 넷은 기본 unsigned
- 어느 한쪽이라도
signed면 양쪽 모두 signed로 간주
module test (input signed a, b, output c);
wire a, b; // 포트 선언에서 signed → 넷도 signed
reg signed c; // 레그 선언에서 signed
endmodule
포트 선언 스타일 변천
Verilog-1995 (구 스타일)
모듈 헤더에 포트 이름만 나열, 본문에서 방향/타입 선언.
module test (a, b, c);
input [7:0] a, b;
output [7:0] c; // 기본 wire
wire [7:0] a, b, c; // 재선언으로 타입 명시 (혼동 방지)
// 또는 output을 reg로 변경
reg [7:0] c;
endmodule
Verilog-2001 이후 (ANSI C 스타일) — 권장
포트 리스트에 방향·타입·범위 모두 명시.
module test (
input wire [7:0] a,
input wire [7:0] b,
output reg [7:0] c
);
// 본문에서 포트 재선언 불필요 (이미 완전 선언됨)
endmodule
ANSI 스타일에서 포트 선언에 타입이 포함되면 본문에서 재선언 불가 (시뮬레이터 의존적 에러). 타입 미포함 시 본문에서 선언 가능.
포트 폭 불일치 연결
서로 다른 벡터 폭의 포트 연결 시 작은 쪽 폭이 우선되며, 큰 쪽 상위 비트는 무시됩니다.
포트 타입 제약 요약
| 포트 방향 | 허용 타입 | 비고 |
input | wire (기본), 명시적 wire | reg 불가 (외부에서 지속 구동) |
inout | wire (기본), tri 등 넷 타입 | reg 불가 |
output | wire, reg, wand 등 | reg는 프로시저럴 블록에서만 할당 가능 |