지노랩 /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:34

 

1 | 개념 정리

  • 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 | 조각 연결 동작 규칙

  1. 루트 블록부터 아래로 조각을 순서대로 붙임
  2. root HDL path가 이미 지정된 하위 블록이 있으면 그 위 조각은 무시
  3. 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
를 바탕으로 작성된 글입니다.