지노랩 /JinoLab

[UVM] 5.5.6 레지스터 모델 패키징 ― 컴파일·재사용을 쉽게 하는 소스 구조 권장안 본문

UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기

[UVM] 5.5.6 레지스터 모델 패키징 ― 컴파일·재사용을 쉽게 하는 소스 구조 권장안

지노랩/JinoLab 2025. 5. 9. 11:23

레지스터-모델 생성기는 100 % 자유롭게 파일·패키지를 나눌 수 있습니다.
아래는 실무에서 가장 많이 쓰이는 구조로, 필수는 아니지만 도입하면 컴파일 속도와 재사용성이 좋아집니다.

권장 사항 적용 예 효과

a) 블록마다 전용 패키지 package ral_codec_pkg; … endpackagepackage ral_dma_pkg; … endpackage IP 단위로 독립 컴파일·재사용
b) 여러 블록이 공유하는 타입은 별도 패키지 package ral_common_regs_pkg; typedef STATUS_REG_T … 중복 정의 방지, L2/L3 시스템에서 한 번만 로드
c) “헤더” 파일 한 개 생성 ral_pkg.svhsystemverilog<br>`include "ral_codec_pkg.svh"<br>`include "ral_dma_pkg.svh"<br>… 테스트벤치 쪽에서는 import 한 줄이면 모든 RAL 사용
d) build() 길면 서브-메서드로 분리 systemverilog<br>function build();<br> build_maps();<br> build_regs();<br> build_subblocks();<br>endfunction 가독성↑, Diff·디버깅 용이

추가 팁

  • 패키지 네이밍 규칙
    ral_<블록명>_pkg, ral_shared_<기능>_pkg 등으로 일관성 유지.
  • 파일 분할 기준
    패키지당 1 파일이 가장 단순하지만, 수천 라인 이상이면 블록 패키지 ≫ 여러 파일(regs.sv, rfs.sv, mems.sv 등)로 쪼개고 package … 블록에서 \include`로 묶는다.
  • 컴파일 스크립트 자동화
    Generator가 filelist.f(vcs/questa), CMakeLists.txt, 또는 fuse --file 리스트를 함께 생성하면 CI가 편하다.

이 구조를 따르면 스펙 변경 → Generator 재실행 → 패키지 교체만으로 TB가 항상 최신 RAL을 쓰게 됩니다.

 

 


 

본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.