지노랩 /JinoLab
[UVM] 5.6 백도어 액세스 ― “버스 안 타고 바로 레지스터를 두드려라” 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.6 백도어 액세스 ― “버스 안 타고 바로 레지스터를 두드려라”
지노랩/JinoLab 2025. 5. 10. 11:281 | 백도어란?
- **버스(Front-door)**를 거치지 않고 RTL 내부 신호에 직접 접근해
peek()/poke()(읽기/쓰기) 또는 Back-door read()/write()를 수행하는 경로
(UVM 용어로 HDL path access).
RAL API ──► Front-door ──► DUT Reg
│
└────► Back-door ──► RTL signal
2 | 왜 필요한가?
장점 설명
| 숨겨진 버그 발견 | 같은 물리 경로로 Write-Read 하면 “들어갈 때 깨지고 나올 때 복구”돼 버그가 가려질 수 있음. Back-door는 다른 경로라서 이 문제를 드러냄. |
| 시뮬 시간 절감 | 초기 설정 레지스터 수천 개를 버스로 쓰면 수 ms·수 만 싸이클. Back-door는 0 time → “준비 단계”를 사실상 제거. |
| 랜덤·리셋 테스트 가속 | 반복적 mirror()/update()/mirror() 에서 버스 트래픽 0. |
3 | 구현 요소
- HDL 경로 지정
- 슬라이스: “신호[LSB +: width]” 만 지정 가능.
- 주소 맵 전체를 하나의 set_hdl_path_root() 로 이동시킬 수도 있음.
- R_CTRL.add_hdl_path_slice("dut_i.u_ctrl_reg", 0, 32); // 레지스터 MEM_BUF.add_hdl_path("dut_i.u_buf_mem"); // 메모리 SUB.default_map.set_hdl_path_root("dut_i.u_subblk"); // 서브-블록
- 어댑터 설정 (선택)
- 버스 어댑터에서 supports_byte_enable=1 로 표시해도 back-door 가능.
- 경로 유지보수
- RTL 계층 변경 시 HDL path 문자열이 깨짐 →
⇒ Generator가 스펙(XACT) or RTL 네임맵에서 자동 추출 하도록 권장. - 시뮬 초기화에서 uvm_root::check_config_usage() 로 미설정 경로 확인.
- RTL 계층 변경 시 HDL path 문자열이 깨짐 →
4 | 사용 패턴
상황 권장 API
| DUT 설정 | model.reset(UVM_BACKDOOR); model.update(status, UVM_BACKDOOR); |
| 상태 스냅샷 | model.mirror(status, UVM_BACKDOOR); |
| RAM 내용 검증 | mem.peek(status, addr, data); |
| 버그 검증 이중 경로 | ① front-door write ② back-door peek & compare |
5 | 주의 사항 & 실무 팁
- 다중 클록: 백도어로 값을 바꾼 뒤 즉시 Front-door 읽으면 클록 도메인 지연 때문에 mismatch로 보일 수 있음 → 안정화 시간(tsu) 고려.
- SVA·Assertion: Back-door poke 시 설계 내부 SVA가 트리거될 수 있음 → 테스트 의도에 따라 disable 또는 #0 지연 후 poke.
- 암호화 IP: 시뮬레이터 protect region 안에 있으면 직접 경로를 잡지 못할 수도 → DPI callback 또는 vendor backdoor API 사용.
- 메모리 인스턴스가 많을 때: peek/poke 대신 메모리 BFM back-door 기능(Verilog $readmemh/$writememh) 호출이 훨씬 빠름.
6 | 요약
- 버그 노출 + 시뮬 가속 -- 백도어는 레지스터 / 메모리 검증의 필수 도구.
- add_hdl_path[_slice]() 로 경로를 등록하고, RAL API에서 UVM_BACKDOOR 선택.
- 경로 자동화(GEN)와 도메인 타이밍 주의로 유지보수를 최소화해야 한다.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.6.2 계층적 HDL 경로(Hierarchical HDL Path) ― 백도어가 레지스터를 “찾아가는” 길 표시하기 (0) | 2025.05.11 |
|---|---|
| [UVM] 5.6.1 read/write(UVM_BACKDOOR) vs. peek/poke() — 차이와 올바른 사용법 (0) | 2025.05.11 |
| [UVM] 5.5.7 데이터 폭 한계 — uvm_reg_data_t를 64 비트 이상으로 늘리고 싶을 때 (0) | 2025.05.10 |
| [UVM] 5.5.6 레지스터 모델 패키징 ― 컴파일·재사용을 쉽게 하는 소스 구조 권장안 (0) | 2025.05.09 |
| [UVM] 5.5.5 블록 타입(Block Type) ― uvm_reg_block 상속으로 IP 블록 전체를 모델링하기 (0) | 2025.05.09 |