지노랩 /JinoLab
[UVM] 5.7.4 구현 되지 않은(Unimplemented) 레지스터 다루기 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.7.4 구현 되지 않은(Unimplemented) 레지스터 다루기
지노랩/JinoLab 2025. 5. 16. 09:53
1 | 기본 아이디어
문제 해결책
| RTL 내부에 물리적 레지스터가 없음 → 버스 트랜잭션이 실패 | 미러(mirror) 자체를 “가상 장치”로 삼아 R/W 수행 |
즉, 버스로 실제 접근하지 않고 레지스터 추상 클래스(미러 값) 에서 직접 읽고 쓴다.
2 | 사용자-정의 Front-door / Back-door 구현
2-1 Front-door(버스 경로 대체)
class not_impl_fd extends uvm_reg_frontdoor; // uvm_sequence
virtual task body(); // rw_info 이미 세팅됨
uvm_reg R; $cast(R, rw_info.element);
// READ: 미러 get()
if (rw_info.kind == UVM_READ)
rw_info.value[0] = R.get();
// WRITE: rw_info.value[0] 이미 원하는 값 포함
// 예측(prediction) 수동 반영
R.predict(rw_info.value[0], -1,
(rw_info.kind==UVM_READ) ? UVM_PREDICT_READ
: UVM_PREDICT_WRITE,
rw_info.path, rw_info.map);
endtask
endclass
2-2 (선택) Back-door
- 같은 동작을 extends uvm_reg_backdoor 로 복사-붙여도 됨
→ 백도어 패스(UVM_BACKDOOR)로 호출될 때 동일하게 작동
3 | 모델에 연결하는 위치
환경(ENV)에서 후-등록 예
function void connect_phase(uvm_phase phase);
not_impl_fd fd = new;
`uvm_warning("NotYetImpl",
"Register R2 는 RTL에 없으므로 미러 기반 프런트도어로 대체합니다.");
regmodel.R2.set_frontdoor(fd); // default_map 모든 인터페이스에 적용
endfunction
블록 build() 안에서(Generator 불가 → 사용 시 환경 쪽 삽입)
if (!rtl_has_R2) begin
not_impl_fd fd = new;
R2.set_frontdoor(fd);
end
4 | 사용-시 주의
항목 설명
| 커버리지 | R/W 가 미러에만 적용돼도 read/write 호출이 있으므로 기능-커버리지 정상 수집 |
| 시뮬 속도 | 버스가 아예 발생하지 않아 0-time, 초기화 가속 |
| 나중에 RTL 구현 | Front-door 등록 코드를 제거(또는 조건부 컴파일) 하면 즉시 실제 버스 경로로 전환 가능 |
| 로그 | Warning/info 로 “가상 레지스터” 사용 사실을 명확히 남겨 혼동 방지 |
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.8 레지스터 모델을 검증 환경에 통합하는 절차 (0) | 2025.05.17 |
|---|---|
| [UVM] 5.7.5 읽기 전용(RO)·쓰기 전용(WO) 레지스터가 한 주소를 공유할 때의 모델링 (1) | 2025.05.16 |
| [UVM] 5.7.3 에일리어스 레지스터( Aliased Registers ) (0) | 2025.05.15 |
| [UVM] 5.7.2 매핑되지 않은(unmapped) 레지스터·메모리 다루기 (0) | 2025.05.15 |
| [UVM] 5.7.1 미리 정의-돼 있는 “특수 레지스터” 두 가지 (0) | 2025.05.14 |