지노랩 /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. 검증 환경에서의 위치
- Generator가 스펙으로부터 클래스를 생성.
- Environment build_phase에서 모델 인스턴스화·버스 어댑터 연결.
- 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
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
[UVM] 5.5.1 필드 타입(Field Type) ― 레지스터 필드를 객체로 “정의·제약·확장”하는 방법 (0) | 2025.05.07 |
---|---|
[UVM] 5.5 레지스터 모델 생성 — “Generator 작성자를 위한 실전 절차” (0) | 2025.05.06 |
[UVM] 5.4 커버리지 모델 – RAL 내부에서도 “무엇을 얼마나 덮었는가”를 보려면 (0) | 2025.05.06 |
[UVM] 5.3 Access API ― 레지스터/필드 값을 다루는 5 가지 패턴과 올바른 사용법 (0) | 2025.05.05 |
[UVM] 5.2 레지스터 모델 사용 모델 – RAL(Register Abstraction Layer) 제대로 쓰는 법 (0) | 2025.05.05 |