지노랩 /JinoLab

[UVM] 5.11 레지스터-라이브러리에서 제공하는 사전 정의(Pre-defined) 시퀀스 활용 가이드 본문

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

[UVM] 5.11 레지스터-라이브러리에서 제공하는 사전 정의(Pre-defined) 시퀀스 활용 가이드

지노랩/JinoLab 2025. 5. 21. 11:21

 

1 | 개요

  • 레지스터 모델을 환경에 인스턴스하고 버스/모니터와 통합한 뒤,
    아래 테스트 시퀀스를 실행하면 DUT 레지스터·메모리의 기본 동작을 자동으로 검증할 수 있습니다.
  • 가장 단순한 uvm_reg_hw_reset_seq 부터 시작해 모델·환경·트랜잭터의 연결이 정상인지 먼저 확인하세요.
  • 일부 시퀀스는 백도어(back-door) 접근이 필수입니다. (표에 표시)

2 | 주요 시퀀스 한눈에 보기

분류 시퀀스 이름 주요 검증 내용 요구 사항 / 제외용 Attribute

하드웨어 리셋 uvm_reg_hw_reset_seq 모든 레지스터를 읽어 리셋값 비교 NO_REG_HW_RESET_TESTNO_REG_TESTS
비트 바시(bash) uvm_reg_bit_bash_seq → 내부에서 uvm_reg_single_bit_bash_seq 호출 각 비트를 0/1로 토글해 접근 정책(RW/RO 등) 확인 NO_REG_BIT_BASH_TESTNO_REG_TESTS
액세스 패스 검증 uvm_reg_access_seq → 내부에서 uvm_reg_single_access_seq 호출 • 앞-도어(버스) 쓰기 → 백도어 읽기 확인• 백도어 쓰기 → 버스 읽기 확인 백도어 필요NO_REG_ACCESS_TEST
메모리 워킹 패턴 uvm_mem_walk_seq → uvm_mem_single_walk_seq 워킹 1/0 패턴을 메모리에 써서 읽기-일치 확인 NO_MEM_WALK_TEST
메모리 액세스 uvm_mem_access_seq 메모리 주소별 버스↔백도어 교차 확인 백도어 필요NO_MEM_ACCESS_TEST
공유 매핑 검증 uvm_reg_shared_access_sequvm_mem_shared_access_seq 동일 레지스터/메모리가 여러 맵에 매핑 되었을 때 값 동기성 체크 NO_SHARED_ACCESS_TEST
통합 실행 uvm_reg_mem_built_in_seq 위 Block-level 시퀀스들을 한 번에 실행 (Attribute로 선택/제외) 각 시퀀스와 동일
HDL 경로 검증 uvm_reg_mem_hdl_paths_seq 지정된 HDL-path 가 실제 시뮬레이션 경로로 유효한지 검사 HDL path가 없으면 자동 제외

Attribute 적용 규칙
블록·레지스터·메모리에 NO_REG_TESTS (또는 각 시퀀스 별 NO_…_TEST) 를 정의하면 해당 객체에 시퀀스가 적용되지 않습니다.


3 | 실행 방법 예시

class reg_test extends uvm_test;
  my_env          env;          // 레지스터 모델 포함 환경
  uvm_reg_block   rm;           // 루트 레지스터 모델 핸들

  virtual function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    rm = env.regmodel;
  endfunction

  virtual task run_phase(uvm_phase phase);
    // ① 하드웨어 리셋 테스트
    uvm_reg_hw_reset_seq rst =
        uvm_reg_hw_reset_seq::type_id::create("rst");
    rst.model = rm;
    rst.start(null);      // virtual sequence 로 실행

    // ② 비트-바시 + 접근 테스트를 묶은 상위 시퀀스
    uvm_reg_mem_built_in_seq all =
        uvm_reg_mem_built_in_seq::type_id::create("all");
    all.model = rm;

    // 특정 서브시퀀스만 실행하도록 설정도 가능
    // all.bit_bash_seq_disable();   // 비트-바시 끄기 예시

    all.start(null);
  endtask
endclass
  • model 필드는 루트 블록 핸들을 넣어야 하며, 시퀀서 인자를 주지 않으면 가상 시퀀스 형태로 동작해 자동으로 올바른 버스 시퀀서를 사용합니다.
  • 백도어가 필요한 시퀀스를 실행하기 전에 set_hdl_path_root() 나 사용자-정의 back-door 를 설정해 두세요.

4 | 시퀀스 결합 & 커스터마이징 팁

  1. 가상 시퀀스를 하나 작성해 여러 predefined 시퀀스를 순차·병렬(fork)로 실행하면 전체 레지스터 테스트 플로를 한 시퀀스로 관리할 수 있습니다.
  2. 시퀀스 클래스는 모두 팩토리 생성이므로, 필요에 따라 서브클래스를 만들어
    • 특정 필드 값 범위를 줄이거나,
    • 에러 허용 폭(예: ECC 비트 무시)을 재정의할 수 있습니다.
  3. 장시간 걸리는 메모리 워크 시퀀스는, 큰 메모리를 slice 로 나눠 부분-실행하도록 오버라이드하면 시뮬레이션 시간을 단축할 수 있습니다.

요약

  • UVM 레지스터 라이브러리는 HW Reset / Bit-Bash / Access / Shared / Memory Walk 등 핵심 검증 시퀀스를 기본 제공.
  • Attribute 로 적용 대상을 세밀하게 제어하고, 필요에 따라 백도어를 구현·지정해야 합니다.
  • 상위 가상 시퀀스로 이들 테스트를 조합하면 초기 Bring-up 부터 풀 커버리지 체크까지 손쉽게 자동화할 수 있습니다.

 

 

 


 

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