지노랩 /JinoLab
[UVM] 5.4 커버리지 모델 – RAL 내부에서도 “무엇을 얼마나 덮었는가”를 보려면 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.4 커버리지 모델 – RAL 내부에서도 “무엇을 얼마나 덮었는가”를 보려면
지노랩/JinoLab 2025. 5. 6. 09:05
5.4.0 왜 레지스터 커버리지가 별도인가?
- 레지스터 모델(필드·주소·배치)은 칩마다 천차만별 → 고정된 covergroup 템플릿이 불가능
- 모델 생성기(Generator) 가 설계 스펙 → RAL 클래스를 만들 때 필드 맞춤형 covergroup 을 삽입해야 한다.
- 대규모 RAL(수천 레지스터)에서 전부 커버리지 ON 하면 메모리·성능 폭발 → 선택적 인스턴스 & 샘플링 제어 API 필수.
5.4.1 사전 정의된 커버리지 ID (Table 6)
심볼 값 의미 비트 위치
UVM_NO_COVERAGE | 커버리지 없음 | 0 |
UVM_CVR_REG_BITS | 레지스터 비트가 읽히거나 쓰인 번수 | 1 |
UVM_CVR_ADDR_MAP | 어드레스(맵) 접근 분포 | 2 |
UVM_CVR_FIELD_VALS | 필드 값 분포 (예: 상태비트 0/1 빈도) | 3 |
UVM_CVR_ALL | 위 3가지를 OR | 0–3 |
0–7 : UVM 예약 / 8–15 : 벤더 / 16–23 : 사용자 / 24↑ : 미래용
여러 모델을 동시에 켤 땐 비트 OR : UVM_CVR_REG_BITS | UVM_CVR_FIELD_VALS
5.4.2 커버리지 생성(Construction) 과 샘플링 제어
① 생성 단계 – include_coverage()
// 블록 인스턴스 생성 직후(예: build_phase)
codec.include_coverage("*", // 와일드카드: 블록 내부 전체
UVM_CVR_REG_BITS // 비트 커버 + 필드 값
| UVM_CVR_FIELD_VALS);
- 기본값은 생성 X → 메모리 절약
- 단위(유닛) 검증 단계에서만 켜고, SoC 단계에서는 꺼두는 것이 일반적
② 샘플링 단계 – set_coverage()
// 시뮬 초반: 커버리지 sampling ON
codec.set_coverage(UVM_CVR_REG_BITS, 1); // 1=Enable
codec.CONFIG.set_coverage(UVM_CVR_FIELD_VALS, 1);
// 성능 프로파일링 후 OFF 가능
codec.set_coverage(UVM_CVR_REG_BITS, 0);
범위 메서드 적용 대상
uvm_reg_block::set_coverage() | 블록 전체/하위 포함 |
uvm_reg::set_coverage() | 특정 레지스터만 |
uvm_mem::set_coverage() | 특정 메모리만 |
5.4.3 현업 Best Practice
시나리오 커버리지 전략
IP 단위 검증 | include_coverage("*", UVM_CVR_ALL) – 샘플링 전부 ON |
서브시스템 검증 | Register Bits, Field Vals 만 켜고 AddrMap OFF → 용량 절약 |
SoC 회귀 | 생성 자체를 OFF (UVM_NO_COVERAGE) + 코드·FSM implicit coverage 로만 체크 |
버그 집중 조사 | 문제 레지스터만 set_coverage(...,1) 로 재실행 |
본 내용은
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.3 Access API ― 레지스터/필드 값을 다루는 5 가지 패턴과 올바른 사용법 (0) | 2025.05.05 |
[UVM] 5.2 레지스터 모델 사용 모델 – RAL(Register Abstraction Layer) 제대로 쓰는 법 (0) | 2025.05.05 |
[UVM] 5.1 UVM 레지스터 레이어 활용하기 (0) | 2025.05.04 |