지노랩 /JinoLab

[UVM] 5.5.7 데이터 폭 한계 — uvm_reg_data_t를 64 비트 이상으로 늘리고 싶을 때 본문

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

[UVM] 5.5.7 데이터 폭 한계 — uvm_reg_data_t를 64 비트 이상으로 늘리고 싶을 때

지노랩/JinoLab 2025. 5. 10. 09:25

 

1 | 기본값: 64 비트

typedef bit [63:0] uvm_reg_data_t;   // UVM 기본 정의
  • 모든 필드·레지스터·메모리 값 인자가 uvm_reg_data_t 타입을 사용
  • 64 비트 이하라면 SV가 자동으로 확장·절단 해 주므로 문제 없음

2 | 더 작게 / 더 크게 조정하기

목적 매크로 정의 예 효과

메모리 절약 (대규모 모델) +define+UVM_REG_DATA_WIDTH=32 내부 배열·버퍼 크기 감소
초대형 필드 지원 (128, 256 비트 등) +define+UVM_REG_DATA_WIDTH=256 256 비트 폭까지 모델링 가능

※ 컴파일 옵션으로 주입하면 UVM 헤더가 재-컴파일되므로 시뮬레이터 full re-build 필요


3 | Generator 경고와 모델 측 검증

Generator 쪽

# 스펙 파싱 중 128비트 필드 발견 시
if max_field_width > 64:
    print("WARNING: register model requires UVM_REG_DATA_WIDTH >= %d" % max_field_width)

블록 클래스에 정적 체크 삽입

class MY_BIG_BLK extends uvm_reg_block;
  // 최소 128비트 요구
  local static bit _chk = check_data_width(128);

  // ------------------------------------------------
  static function bit check_data_width(int min_bits);
    if (`UVM_REG_DATA_WIDTH < min_bits) begin
      `uvm_fatal("RAL_WIDTH",
        $sformatf("UVM_REG_DATA_WIDTH(%0d) < required %0d bits",
                  `UVM_REG_DATA_WIDTH, min_bits));
      return 0;
    end
    return 1;
  endfunction
  // ------------------------------------------------
endclass
  • 시뮬 시작 전 fatal 이 발생해 필요한 폭을 바로 알 수 있음
  • 여러 블록이 각각 요구 폭을 선언해도 첫 fatal 조건에서 종료

4 | 실무 팁

상황 권장 폭

일반 SoC(32/64-bit 레지스터만) 64 비트(기본) 유지
PCIe 128-bit BAR, SHA-512 등 +define+UVM_REG_DATA_WIDTH=128
AES-XTS 256-bit 키 저장 +define+UVM_REG_DATA_WIDTH=256

폭을 늘리면 메모리 사용량과 시뮬 성능이 증가하므로
“필요한 블록에만” 경고-체크로 안내하고 전체 프로젝트는 기본 64 비트를 유지하는 전략이 좋습니다.



 

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