지노랩 /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:251 | 기본값: 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
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.6.1 read/write(UVM_BACKDOOR) vs. peek/poke() — 차이와 올바른 사용법 (0) | 2025.05.11 |
|---|---|
| [UVM] 5.6 백도어 액세스 ― “버스 안 타고 바로 레지스터를 두드려라” (0) | 2025.05.10 |
| [UVM] 5.5.6 레지스터 모델 패키징 ― 컴파일·재사용을 쉽게 하는 소스 구조 권장안 (0) | 2025.05.09 |
| [UVM] 5.5.5 블록 타입(Block Type) ― uvm_reg_block 상속으로 IP 블록 전체를 모델링하기 (0) | 2025.05.09 |
| [UVM] 5.5.4 메모리 타입(Memory Type) ― uvm_mem 확장으로 RAM·FIFO 등을 모델링하기 (0) | 2025.05.08 |