지노랩 /JinoLab
[UVM] 5.7.5 읽기 전용(RO)·쓰기 전용(WO) 레지스터가 한 주소를 공유할 때의 모델링 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.7.5 읽기 전용(RO)·쓰기 전용(WO) 레지스터가 한 주소를 공유할 때의 모델링
지노랩/JinoLab 2025. 5. 16. 11:541 | 하드웨어 배경
- 동일 물리 주소 0x100
- 쓰기-전용 레지스터(WO) – 제어, 클리어, 트리거용
- 읽기-전용 레지스터(RO) – 상태·결과
- 두 레지스터의 비트 레이아웃도 서로 다를 수 있음
(전혀 관련 없는 필드를 겹쳐놓은 구조)
2 | UVM 모델링 규칙
규칙 설명
| RO 레지스터와 WO 레지스터를 각각 1 개씩 인스턴스 | 두 인스턴스 모두 같은 add_reg() 주소로 매핑 |
| 읽기/쓰기 API 제약 | RO 인스턴스에 write() 또는 WO 인스턴스에 read() 호출 시— • UVM_NOT_OK 반환 • 에러 메시지 출력 • 트랜잭션 수행 안 함 |
| Back-door 허용 범위 | • RO 레지스터 → peek()(읽기)만 허용 • WO 레지스터 → poke()(쓰기)만 허용 |
3 | 예제 코드
class block_B extends uvm_reg_block;
rand reg_RO R; // 읽기 전용
rand reg_WO W; // 쓰기 전용
`uvm_object_utils(block_B)
virtual function void build();
default_map = create_map("", 0, 4, UVM_BIG_ENDIAN);
// RO 인스턴스
R = reg_RO::type_id::create("R");
R.configure(this, null, "R_reg");
R.build();
// WO 인스턴스
W = reg_WO::type_id::create("W");
W.configure(this, null, "W_reg");
W.build();
// 두 인스턴스를 **동일 주소 0x100** 에 매핑
default_map.add_reg(R, 'h100, "RO");
default_map.add_reg(W, 'h100, "WO");
endfunction
endclass
4 | 테스트벤치 사용 예
uvm_status_e st;
uvm_reg_data_t data;
// 올바른 사용
R.read (st, data); // OK
W.write(st, 32'hDEADBEEF); // OK
// 잘못된 사용 – 에러 발생 후 st == UVM_NOT_OK
R.write(st, 32'h1234); // ERROR: RO 레지스터에 write
W.read (st, data); // ERROR: WO 레지스터에 read
// 백도어 디버그
R.peek(st, data); // 허용
W.poke(st, 32'hBAD0); // 허용
5 | 정리
- 한 주소-두 인스턴스로써 읽기·쓰기를 명확히 분리.
- 프런트도어 API가 규칙을 자동 체크해 잘못된 접근을 차단하고,
디버그용 Back-door peek/poke 는 선택적으로 허용된다.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.9 레지스터 모델 통합 ― 버스 에이전트와 모델을 연결하는 3가지 방식 (0) | 2025.05.17 |
|---|---|
| [UVM] 5.8 레지스터 모델을 검증 환경에 통합하는 절차 (0) | 2025.05.17 |
| [UVM] 5.7.4 구현 되지 않은(Unimplemented) 레지스터 다루기 (0) | 2025.05.16 |
| [UVM] 5.7.3 에일리어스 레지스터( Aliased Registers ) (0) | 2025.05.15 |
| [UVM] 5.7.2 매핑되지 않은(unmapped) 레지스터·메모리 다루기 (0) | 2025.05.15 |