지노랩 /JinoLab

[UVM] 5.1 UVM 레지스터 레이어 활용하기 본문

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

[UVM] 5.1 UVM 레지스터 레이어 활용하기

지노랩/JinoLab 2025. 5. 4. 11:51

 

5.1 개요 ― “레지스터를 객체로 다루면 생기는 마법”

핵심 키워드 설명

고수준 OO-모델 메모리-맵 레지스터·메모리를 SystemVerilog 클래스 인스턴스로 표현
추상화 = 재사용 블록→서브시스템→SoC 단계로 올라가도 테스트·시퀀스 수정 無
이름만 바꿔도 OK RTL에서 필드를 다른 물리 레지스터로 옮겨도 모델 이름만 유지하면 TB 무변경
레지스터 테스트 라이브러리 UVM이 제공하는 표준 시퀀스로 R/W, reset, alias, access rule 자동 검증

1. 레지스터 모델 계층 구조

uvm_reg_block   // 블록 단위 (IP, 서브시스템 …)
 ├─ uvm_reg            // 실제 레지스터
 │    └─ uvm_reg_field // 필드
 ├─ uvm_mem            // 대용량 RAM • CAM
 └─ uvm_reg_file       // 레지스터 그룹
  • Block 들을 트리 형태로 묶어 DUT 계층과 1:1 매핑
  • 블록 안 R/M/F 객체는 모델 생성기가 스펙(CSV, IP-XACT 등)에서 자동 생성

2. 접근 경로 두 가지

경로 용도 특징

Front-Door 정상 버스 트랜잭션으로 접근 (VIP Driver 사용) 디코더·보호 비트까지 전체 경로 검증
Back-Door RTL 내부 신호(HDL Path)로 직접 접근 Bypass로 속도↑, 초기값 로드, 스냅샷 비교

동일 모델에서 두 경로를 모두 지원해 Redundancy & Performance를 확보.


3. 멀티-인터페이스 설계도 OK

  • 동일 레지스터 세트가 AXI·APB 두 버스에 노출되어도,
    모델은 하나의 Field 객체만 두고 각 Bus Adapter가 접근 경로를 선택.
  • ⇒ 한 번의 시퀀스로 모든 인터페이스 동시 검증 가능.

4. 모델 전문화(Extension) = 보통 “자동 생성”

이유 세부 사항

레지스터 수 ↑ 수천~수만 개 필드를 수작업 작성 불가
세부 옵션 ↑ reset value, access type, mirror, volatile 등 20여 개 프로퍼티
해결 Model Generator(IP-XACT → .sv) 사용 → Correct-by-Construction
  • 생성기는 UVM 라이브러리 바깥 툴(Perl, Python, XML)이 담당.

5. 검증 환경에서의 위치 

  1. Generator가 스펙으로부터 클래스를 생성.
  2. Environment build_phase에서 모델 인스턴스화·버스 어댑터 연결.
  3. RAL(Rgstr Abstr Layer) 시퀀스 라이브러리가 모델을 이용해 자동 테스트 실행.

6. 실무 활용 팁

상황 팁

모델-버스 매핑 uvm_reg_map 객체로 “어드레스 공간·endian·beat size” 정의
리셋 검증 uvm_reg_hw_reset_seq 한 줄로 전체 레지스터 리셋값 체크
스코어보드 통합 Monitor가 캡처한 Read-Data를 model.mirror(status) 로 동기화 후 비교
Fast Init 시뮬 시작 직후 model.lock_model(); model.reset(UVM_BACKDOOR); ⇒ 초기화 비용↓
파라미터 변경 RTL에서 필드 이동 시 Reg Name 유지 → 테스트코드 수정 없음


 

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