지노랩 /JinoLab

[UVM] 5.2 레지스터 모델 사용 모델 – RAL(​Register Abstraction Layer) 제대로 쓰는 법 본문

UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기

[UVM] 5.2 레지스터 모델 사용 모델 – RAL(​Register Abstraction Layer) 제대로 쓰는 법

지노랩/JinoLab 2025. 5. 5. 09:00

 

5.2 Usage Model 개요

용어 의미

Block(uvm_reg_block) DUT 계층의 IP 블록·서브시스템에 대응. 하나 이상의 레지스터/메모리/서브 Block 포함
Reg File(uvm_reg_file) 레지스터들을 논리적으로 묶은 그룹(배열)
Register(uvm_reg) 하나 이상의 Field(비트 구간)를 갖는 객체
Field(uvm_reg_field) 실제 하드웨어 비트들과 1:1 매핑되는 최소 단위
Memory(uvm_mem) 주소가 큰 RAM/CAM/FIFO 등

모든 요소는 클래스 인스턴스로 제공되며, read()/write() 메서드만 호출하면 실제 버스 어드레스·랜 등은 자동 처리된다.

클래스 협업 구조

 

 


5.2.1 필드 단위(Sub-register) 접근

  • 버스가 Byte-Enable 지원 + 필드가 바이트 경계를 단독 점유 ⇒ 단일 사이클 접근 가능
  • 그렇지 않으면 peek-modify-poke(read-modify-write)로 전체 레지스터를 핸들링 → 부작용 위험
  • 지원 조건
    1. 모델 생성기가 field.configure()에서 byte_lane 단독 플래그 설정
    2. uvm_reg_adapter::supports_byte_enable = 1
    3. Front-door 경로일 때만 적용 (Back-door는 항상 전체 레지스터 단위)

5.2.2 미러(Mirror) 메커니즘

동작 메서드 설명

DUT→모델 값 동기화 mirror(CHK, UVM_FRONTDOOR/BACKDOOR) 실제 읽어서 미러 업데이트
모델 값 갱신(0-time) set() 시뮬 0 시간에 미러만 수정
모델→DUT 적용 update() 변경된 필드/블록만 실제 버스 Write
미러값 조회 get() 0-time으로 현재 미러 값 반환
  • 미러는 예측(prediction) 역할이지, 스코어보드가 아님 – DUT가 내부적으로 값을 변경하면 반드시 mirror()로 다시 읽어와야 정확해진다.
  • 대규모 블록 mirror()/update()는 Back-door가 훨씬 빠르므로 초기 config에 권장.

5.2.3 메모리는 미러링하지 않는다

  • 메모리 용량이 크므로 스파스 배열로만 저장 (쓰기 주소만 보존).
  • 실제 값 조회/갱신은 uvm_mem::peek() / poke()가 Back-door로 직접 수행 → 별도 미러 불필요.
  • 따라서 RAL 메모리 검증 시에는 표준 RAL 메모리 시퀀스 + peek/poke만으로 충분.

사용 예시 – 코드 한 줄로 접근

// CONFIG 레지스터의 ADDR 필드 읽기
rand bit [7:0] addr;
codec.CONFIG.ADDR.read(status, addr);

// BFR 메모리 7번 주소에 값 쓰기
codec.BFR.write(status, 7, 32'hDEAD_BEEF);

// 필드 별칭(alias) 활용 – ADDR 위치가 바뀌어도 영향 無
codec.ADDR.write(status, 8'h55);
  • 필드 이름이 블록 내 유니크하면 alias를 통해 codec.ADDR 형태 접근 가능 → RTL에서 위치가 변해도 테스트 불변.
  • Alias 선언은 모델 생성기가 옵션으로 자동 생성.

실무 체크리스트

체크 권장 행동

모델 생성 IP-XACT, CSV, YAML→Perl/Python 스크립트로 자동 생성
다중 인터페이스 uvm_reg_map 여러 개 (AXI_map, APB_map) 정의 후 add_hdl_path_slice() 로 Back-door 추가
Reset 검증 uvm_reg_hw_reset_seq & uvm_mem_hw_reset_seq 즉시 활용
적용 시점 build_phase에서 모델 인스턴스화, connect_phase에서 어댑터 연결
성능 최적화 초기 설정 후 model.lock_model() → 시뮬 중 구조 변경 방지


 

본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.