지노랩 /JinoLab

[UVM] 5.10 필드 값 랜덤화(Randomization) 사용법 본문

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

[UVM] 5.10 필드 값 랜덤화(Randomization) 사용법

지노랩/JinoLab 2025. 5. 21. 09:18

UVM 레지스터 모델은 필드에 기본 제약(constraint) 을 포함할 수 있고, 테스트 단계에서 추가 제약을 더하거나 기존 제약을 해제할 수도 있습니다.


1 | 필드·레지스터·블록의 value 속성

  • field 클래스에는 랜덤 대상이 되는 rand bit […] value 멤버가 자동으로 존재합니다.
  • 이것은 미러값(mirror) 과는 별개로 “랜덤화할 변수” 역할만 하므로, 직접 get() / set() 으로 읽고 쓰지 않습니다.

2 | 랜덤화 호출 패턴

// 레지스터 r1 의 필드 f1 을 0xF 이하로 제한
bit ok = regmodel.r1.randomize() with { f1.value <= 'hF; };

// 블록 단위 랜덤화 + 추가 제약
regmodel.randomize() with {
  r1.f1.value inside {4'h0, 4'hF};
  r2.f2.value dist {6'h00 := 80, 6'h3F := 20};
};
  • randomize() 는 false 반환 시 제약 충돌 → 동일 with 블록으로 재시도 가능.

3 | DUT 에 값 반영하기 – update()

랜덤화가 끝나면 미러에는 새로운 값이 들어가 있지만 RTL DUT에는 아직 쓰이지 않았습니다.

// 레지스터 단위 업로드
regmodel.r1.update(.status(st));   // 변경된 필드만 버스 write

// 블록 전체 업로드
regmodel.update(.status(st));

update() 는 미러와 DUT 값이 다를 때만 버스 트랜잭션을 생성하므로, 시뮬레이션 시간을 절약할 수 있습니다.


4 | 제약 완화(OFF)·강화(ON)

모델 생성 시 정의돼 있는 constraint 블록을 선택적으로 끌 수 있습니다.

// consistency 라는 블록 비활성화
regmodel.r1.consistency.constraint_mode(0);

// 테스트 후 다시 활성
regmodel.r1.consistency.constraint_mode(1);

5 | 사용자 확장 제약

  • 필드·레지스터·블록 클래스를 상속하여 새로운 constraint 블록을 추가하고,
  • 팩토리(set_type_override_by_type) 로 기존 타입을 대체하면 모델 전체에 새로운 제약을 적용할 수 있습니다.
class my_fld_ext extends orig_fld_type;
  constraint small_range { value inside {[8'h10:8'h1F]}; }
  `uvm_object_utils(my_fld_ext)
endclass

factory.set_type_override_by_type(orig_fld_type::get_type(),
                                  my_fld_ext::get_type());

6 | post_randomize() 오버라이드 시 주의

필드 클래스에서 post_randomize() 를 재정의할 때 반드시 super.post_randomize() 를 호출해야 미러 값이 올바르게 설정됩니다.

function void post_randomize();
  super.post_randomize();
  // 추가 후처리 …
endfunction

요약

  1. value 멤버에 제약을 걸어 랜덤화 → update() 로 DUT에 쓰기
  2. constraint 블록은 constraint_mode() 로 ON/OFF 가능
  3. 필요한 경우 클래스 상속 + 팩토리 오버라이드 로 제약·필드 구조를 확장
    이를 통해 커버리지 지향 랜덤 패턴부터 코너 케이스 강제까지 유연하게 생성할 수 있습니다.

 


 

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