지노랩 /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
를 바탕으로 작성된 글입니다.