[SystemVerilog 실무] 8. Package와 Interface
본문 바로가기
지식 공유/SystemVerilog

[SystemVerilog 실무] 8. Package와 Interface

by 긍수저 2025. 5. 10.
반응형

SystemVerilog는 대규모 SoC 검증 환경에서 모듈성과 재사용성을 높이기 위한 다양한 구조를 제공합니다. 이번 포스트에서는 검증 환경의 설계 품질을 높여주는 Package와 Interface의 개념과 실무 활용법을 다룹니다.

Packages: 선언의 재사용과 정리

패키지는 관련된 정의들을 하나로 묶어주는 컨테이너입니다. 클래스, 함수, typedef 등 여러 선언을 그룹화하여 코드 관리와 재사용성을 극대화할 수 있습니다.

  • package my_pkg; 형태로 선언
  • 내부에 typedef, function, class 등을 선언 가능
  • endpackage로 마무리

장점

  • 선언의 모듈화 및 재사용성 강화
  • 소스 간 네임스페이스 분리로 충돌 방지
  • 유지보수 및 가독성 향상

Import 방식 비교

  • import my_pkg::*;: 패키지 내 모든 항목 import → 편리하지만 이름 충돌 주의
  • import my_pkg::item;: 특정 항목만 import → 명확하고 안전한 사용 권장

이름 해석 순서 (Search Order)

  1. 로컬 범위 (module/class/task 내)
  2. import된 패키지
  3. $root 전역 범위

→ 이름 충돌이나 의도치 않은 값 참조를 피하려면 specific import 사용이 좋습니다.

중첩 패키지 (Nested Package)

패키지 내부에 또 다른 패키지를 선언할 수 있습니다.

parent_pkg::nested_pkg::my_typedef
  • 계층적 구조 표현 가능
  • export 키워드로 외부 공개 가능

컴파일 단위와 네임스페이스

  • $unit: 동일 컴파일 단위 내에서 유효
  • $root: 전체 프로젝트 전역 범위
  • 패키지: 내부 전용 범위
  • 모듈/클래스/인터페이스: 로컬 범위

Interfaces: 신호 연결의 추상화

Interface는 여러 신호를 하나로 묶고, 모듈 간 연결을 단순화하는 데 사용됩니다.

interface my_if;
  logic clk;
  logic reset;
  logic data;
endinterface

주요 활용

  • 테스트벤치에서 DUT 연결을 추상화
  • 인터페이스 구조의 일관성 유지
  • 모듈 간 커뮤니케이션 단순화

Modport로 방향 제약 설정

Modport는 인터페이스 신호에 대해 모듈마다 접근 방향을 제한합니다.

interface my_if;
  logic clk, reset, data;
  modport master (output clk, reset, data);
  modport slave (input clk, reset, data);
endinterface
  • master/slave 역할에 따라 신호 방향을 분리
  • 계층적 설계 시 역할 분담이 명확해짐

Clocking Block: 안정적인 타이밍 관리

클로킹 블록은 클록 도메인 동기화를 위해 사용됩니다.

clocking cb @(posedge clk);
  default input #1ns output #1ns;
  input data;
  output sig;
endclocking
  • 입력/출력 지연을 설정하여 race condition 방지
  • 주로 테스트벤치에서 유용하게 사용

Virtual Interface: 동적 바인딩을 위한 유연성

가상 인터페이스는 클래스 기반 환경에서 인터페이스 인스턴스를 동적으로 바인딩합니다.

class driver;
  virtual my_if vif;

  function new(virtual my_if vif_in);
    vif = vif_in;
  endfunction

  task drive();
    vif.data = 1;
  endtask
endclass
  • 객체지향 환경에서 유연한 구조 제공
  • Sequence/Driver 같은 환경에 적합

 

Deep Talk: Master-Slave

  • Master-Slave 구조란?
    • 디지털 시스템에서 한 쪽이 주도(Master)하고 다른 쪽이 따라가는(Slave) 방식으로 동작하는 제어 구조
    • 주로 동기 회로, 통신 프로토콜(AMBA, I2C, SPI 등), 그리고 플립플롭 회로에서 사용.

반응형

댓글