산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 모듈 인스턴스화 마스터: 순서·이름 기반 연결, 미연결 포트 처리

복잡한 설계는 여러 모듈을 계층적으로 통합해 만듭니다. 모듈 인스턴스화 시 포트 연결은 순서 기반(Ordered)과 이름 기반(Named) 두 가지 방식이 있습니다.

1. 순서 기반 연결 (Ordered List)

포트 리스트 순서대로 매핑. 설계 모듈의 포트 순서를 알아야 하며, 포트 추가/순서 변경 시 연결이 깨지기 쉽습니다.

module mydesign (input x, y, z, output o); endmodule

module tb_top;
    wire [1:0] a; wire b, c;
    mydesign d0 (a[0], b, a[1], c);  // 위치: 1→x, 2→y, 3→z, 4→o
endmodule
포트 순서 변경이나 추가는 치명적 버그 유발. 대규모 설계에서 비추천.

2. 이름 기반 연결 (Named Connection) — 강력 권장

.포트명(신호명) 형식으로 명시적 매핑. 순서 무관, 가독성·유지보수성 우수.

module design_top;
    wire [1:0] a; wire b, c;
    mydesign d0 (
        .x (a[0]),
        .y (b),
        .z (a[1]),
        .o (c)
    );
endmodule

미연결/플로팅 포트 (Unconnected/Floating Ports)

연결하지 않은 포트는 고임피던스(Hi-Z, z) 상태가 됩니다.

module design_top;
    mydesign d0 (
        .x (a[0]),
        .y (a[1]),
        .z (a[1]),
        .o ()   // 출력 o 미연결 → 상위 모듈의 연결 넷은 Z
    );
endmodule

시프트 레지스터 예제에서 출력 미연결

module shift_reg (input d, clk, rstn, output q);
    wire [2:0] q_net;
    dff u0 (.d(d), .clk(clk), .rstn(rstn), .q(q_net[0]));
    dff u1 (.d(q_net[0]), .clk(clk), .rstn(rstn), .q());  // q 플로팅
    dff u2 (.d(q_net[1]), .clk(clk), .rstn(rstn), .q());  // q 플로팅
    dff u3 (.d(q_net[2]), .clk(clk), .rstn(rstn), .q(q));
endmodule

포트 타입과 연결 규칙 요약

케이스코드결과
입력은 암시적 wiremodule m(input clk);OK (wire 생략 가능)
입력에 reg 선언module m(input reg clk);불법: input은 reg 불가
출력 폭 > 입력 폭 연결output [3:0] data; input [7:0] data;상위 4비트 미구동 (무시)
출력 포트를 상위 reg에 연결reg [3:0] r; des2(.data(r));불법: output은 reg에 연결 불가

베스트 프랙티스 체크리스트

  1. 항상 이름 기반 연결 사용
  2. 포트당 한 줄씩 작성
  3. 미연결 포트는 의도적임을 주석으로 명시 (// intentionally floating)
  4. 입력/인아웃은 wire (또는 넷 타입), 출력은 용도에 따라 wire/reg 선택
  5. 포트 폭 일치 확인 (Lint 도구 활용 권장)

verilog

  1. 버릴로그(Verilog) 입문: 디지털 회로 설계를 위한 하드웨어 기술 언어
  2. Verilog 결합(Concatenation) & 복제(Replication) 연산자 실전 가이드
  3. Verilog 핵심 요약: 모듈, 데이터 타입, 할당문 3분 만에 익히기
  4. Verilog 할당문 이해: 유형, 문법, 모범 사례
  5. Verilog 차단 vs 비차단 할당: 핵심 차이점 완벽 이해
  6. Verilog 함수 마스터하기: 효율적인 RTL 설계를 위한 활용법
  7. Verilog 태스크 이해: 함수와의 차이점, 문법, 활용법
  8. Verilog 계층적 참조 범위 마스터하기: 모듈과 블록 간 이름 충돌 방지
  9. Verilog 클럭 생성기: 설계 및 구현 가이드
  10. Verilog 수학 함수 마스터하기: 효율적인 하드웨어 설계를 위한 활용