지노랩 /JinoLab
[UVM] 5.7.2 매핑되지 않은(unmapped) 레지스터·메모리 다루기 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.7.2 매핑되지 않은(unmapped) 레지스터·메모리 다루기
지노랩/JinoLab 2025. 5. 15. 09:46
1 | “Unmapped”이란?
- 선형 주소 공간에 자리 X
- 예) 대용량 테이블을 INDEX + DATA 두 레지스터로만 접근
→ DATA 포트가 가리키는 실레지스터들은 외부 주소가 없다.
2 | 사용자-정의 Front-door 로 액세스 로직 캡슐화
2-1 클래스 작성 (extends uvm_reg_frontdoor)
class indexed_reg_fd extends uvm_reg_frontdoor;
uvm_reg m_idx, m_data;
bit [7:0] m_off;
function new(string name="indexed_fd"); super.new(name); endfunction
function void configure(uvm_reg idx, uvm_reg data, bit [7:0] off);
m_idx = idx; m_data = data; m_off = off;
endfunction
virtual task body(uvm_reg_item rw);
// ① INDEX 레지스터에 오프셋 쓰기
m_idx.write(rw.status, m_off);
if (rw.status != UVM_IS_OK) return;
// ② DATA 레지스터 R/W
if (rw.kind == UVM_WRITE)
m_data.write(rw.status, rw.value[0]);
else m_data.read (rw.status, rw.value[0]);
endtask
endclass
2-2 연결 (build 단계)
foreach (TABLE[i]) begin
indexed_reg_fd fd = new($sformatf("fd_%0d",i));
fd.configure(IDX, DATA, i);
TABLE[i].set_frontdoor(fd, default_map); // APB 맵 전용
end
- map 기준으로 등록 → 다른 인터페이스(예: AXI)에는 기본 매핑 유지 가능.
3 | 미러 (predict) 갱신 문제
버스 모니터는 INDEX/DATA 주소만 관측 → 실제 테이블 엔트리 미러가 안 맞음.
해결: predict() 오버라이드
function bit my_data_reg::predict(uvm_reg_data_t val, ...);
int idx = IDX.get();
return TABLE[idx].predict(val, ...); // 실제 엔트리에게 위임
endfunction
uvm_reg_indirect_data 가 이미 동일 패턴을 구현하므로 참고.
4 | 추가 예: 다양한 사용자-정의 매커니즘
특수 구조 구현 포인트
| 뱅크 셀렉트 | front-door: 선택 레지스터 → 실제 regs 주소 계산 |
| 페이지 기반 플래시 | front-door: page load/unload 시퀀스 포함 |
| 멀티 인터페이스 | APB는 front-door, JTAG은 기본 맵 같이 혼용 |
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.7.4 구현 되지 않은(Unimplemented) 레지스터 다루기 (0) | 2025.05.16 |
|---|---|
| [UVM] 5.7.3 에일리어스 레지스터( Aliased Registers ) (0) | 2025.05.15 |
| [UVM] 5.7.1 미리 정의-돼 있는 “특수 레지스터” 두 가지 (0) | 2025.05.14 |
| [UVM] 5.7 특수 레지스터(Special Registers) ― “평범하지 않은 동작은 이렇게 모델링한다” (0) | 2025.05.14 |
| [UVM] 5.6.6 액티브 모니터링(Active Monitoring) ― DUT가 “스스로 바꾼” 레지스터 값을 미러에 즉시 반영하기 (0) | 2025.05.13 |