지노랩 /JinoLab
[UVM] 5.6.2 계층적 HDL 경로(Hierarchical HDL Path) ― 백도어가 레지스터를 “찾아가는” 길 표시하기 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.6.2 계층적 HDL 경로(Hierarchical HDL Path) ― 백도어가 레지스터를 “찾아가는” 길 표시하기
지노랩/JinoLab 2025. 5. 11. 11:341 | 개념 정리
- HDL 경로(HDL path) = RTL 내부에서 레지스터·메모리가 존재하는 계층적 이름
- 예) top.u_core.u_bus_if.u_dec.R_CTRL
- UVM RAL은 블록 → 레지스터파일 → 레지스터/메모리 단계마다 **“경로 조각(path component)”**를 보관
→ 조각을 “.” 로 이어붙여 최종 절대 경로를 만든다.
Z . Y . X ──► "Z.Y.X"
블록 Z 레지스터파일 Y 레지스터 X
2 | 경로 조각 작성 API
계층 지정 API 비고
| 블록 | configure() (루트) add_hdl_path("path") | 전체 서브블록 경로 뿌리(root) 설정 |
| 레지스터 파일 | 동일—configure / add_hdl_path | 파일 단위 경로 조각 |
| 레지스터 | add_hdl_path_slice(name, lsb, nBits) | - slice 복수 호출 → concat 가능 |
| 메모리 | add_hdl_path_slice(name, lsb, nBits) | banking/비트 슬라이스도 지원 |
- 빈 문자열 "" 을 넣으면 “여기서는 경로를 추가하지 않는다”는 뜻.
3 | 중복(복제) 경로 — 멀티 인스턴스 IP
// 동일 블록이 두 번 인스턴스된 DUT
BLK2.add_hdl_path("b1.b2_a");
BLK2.add_hdl_path("b1.b2_b");
// 레지스터 r2 역시 두 복제 전체 비트 슬라이스 지정
r2.add_hdl_path_slice("{r2_1,r2_0}", 0, 12);
- 하나의 RAL 객체에 경로 배열을 등록 →
RAL 엔진이 모든 복제에 동기화(값 예측·poke) 해 준다.
4 | 조각 연결 동작 규칙
- 루트 블록부터 아래로 조각을 순서대로 붙임
- root HDL path가 이미 지정된 하위 블록이 있으면 그 위 조각은 무시
- TOP (root="") └─ BLK_A (root="soc.subsys") ← 이 시점부터 절대경로 시작 └─ REG_X (slice="regx") 최종 경로: soc.subsys.regx
5 | 슬라이스 (concat) 예시

// 15:15 RDY 1bit
rg.add_hdl_path_slice("RDY", 15, 1);
// 11:6 ID 6bit
rg.add_hdl_path_slice("ID", 6, 6);
// 3:0 COUNT 4bit
rg.add_hdl_path_slice("COUNT", 0, 4);
슬라이스는 “신호 이름, LSB 비트 위치, 비트폭”
여러 슬라이스를 이어붙여 불연속 비트를 하나의 레지스터 값으로 합친다.
필요 없는 비트 위치는 지정하지 않아도 되며, 지정하지 않은 구간은 읽을 때 ‘X’가 아닌 0으로 채워진다.
6 | 실무 팁
과제 팁
| RTL 계층 변경 | 경로 문자열이 깨질 위험 → Generator가 IP-XACT ·Verilog 네임 맵을 파싱해 최신 경로 자동 삽입 |
| 다중 언어 혼합(SV + VHDL) | 경로 조각은 단순 “식별자 문자열”이므로 VHDL 네임(work.cpu_top)도 그대로 사용 가능 |
| 메모리 Banking | add_hdl_path_slice("bank0", 0, 32); add_hdl_path_slice("bank1", 32, 32); |
| 경로 검증 | 시뮬 초기 uvm_root::check_config_usage() + custom assert로 미설정 경로 감지 |
| 동일 레지스터 복제 Coherency | RAL 엔진이 복제마다 write/poke 동기화 → 사용자는 한 API 만 호출 |
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.6.4 사용자-정의 백도어(User-defined Back-door) ― 직접 만든 API로 암호화 IP·특수 구조를 두드리는 법 (0) | 2025.05.12 |
|---|---|
| [UVM] 5.6.3 VPI-기반 백도어 액세스 ― “UVM 기본 백도어가 내부적으로 하는 일과, 시뮬레이터 설정 방법” (0) | 2025.05.12 |
| [UVM] 5.6.1 read/write(UVM_BACKDOOR) vs. peek/poke() — 차이와 올바른 사용법 (0) | 2025.05.11 |
| [UVM] 5.6 백도어 액세스 ― “버스 안 타고 바로 레지스터를 두드려라” (0) | 2025.05.10 |
| [UVM] 5.5.7 데이터 폭 한계 — uvm_reg_data_t를 64 비트 이상으로 늘리고 싶을 때 (0) | 2025.05.10 |