지노랩 /JinoLab
[UVM] 5.7.1 미리 정의-돼 있는 “특수 레지스터” 두 가지 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.7.1 미리 정의-돼 있는 “특수 레지스터” 두 가지
지노랩/JinoLab 2025. 5. 14. 11:44
1. 간접 인덱스(Indirect-Indexed) 레지스터
구성 역할 UVM 클래스
| INDEX 레지스터 | 배열 오프셋 지정 | 사용자가 설계한 보통 uvm_reg |
| DATA 레지스터 | INDEX가 가리키는 요소를 R/W | uvm_reg_indirect_data (UVM 제공) |
| INDIRECT_REG[n] | 실제 데이터가 저장된 레지스터 배열 | 일반 uvm_reg 인스턴스 n개 |
생성 흐름
// ① 데이터 배열 먼저 생성
foreach (INDIRECT_REG[i]) begin
INDIRECT_REG[i] = ind_reg::type_id::create($sformatf("INDIRECT[%0d]",i));
INDIRECT_REG[i].configure(this, null); INDIRECT_REG[i].build();
end
// ② INDEX 레지스터
IND_IDX = ind_idx_reg::type_id::create("IND_IDX");
IND_IDX.configure(this, null); IND_IDX.build();
// ③ DATA 레지스터 – 간접 규칙 연결
IND_DATA = ind_data_reg::type_id::create("IND_DATA");
IND_DATA.configure(IND_IDX, INDIRECT_REG, this, null);
IND_DATA.build();
// ④ 주소 맵에는 INDEX·DATA만 등록
default_map = create_map("", 0, 4, UVM_BIG_ENDIAN);
default_map.add_reg(IND_IDX, 0);
default_map.add_reg(IND_DATA, 4);
- DATA 레지스터에는 필드가 없어야 한다.
- INDIRECT_REG[] 은 맵 미등록 → 고유 주소가 없으므로 back-door 로만 접근 가능.
- back-door read/write 를 DATA에 시도하면 에러; INDIRECT 레지스터를 직접 peek/poke 해야 한다.
다른 방식의 간접 액세스?
INDEX·DATA 패턴이 다르면 사용자-정의 레지스터 클래스를 만들어 uvm_reg_frontdoor 혹은 uvm_reg_backdoor 로 동작을 재현한다.
2. FIFO 레지스터
특성 UVM 지원 클래스
| 주소 1개에 WRITE → FIFO pushREAD → FIFO pop | uvm_reg_fifo |
선언 예
class FIFO_REG extends uvm_reg_fifo;
function new(string name="FIFO_REG");
// (이름, 깊이, 비트폭, 커버리지)
super.new(name, 8, 32, UVM_NO_COVERAGE);
endfunction
`uvm_object_utils(FIFO_REG)
endclass
- back-door 접근 금지: FIFO 커서를 무시하기 때문.
- FIFO full/empty 상태는 보통 별도 STATUS 레지스터 비트로 노출한다.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.7.3 에일리어스 레지스터( Aliased Registers ) (0) | 2025.05.15 |
|---|---|
| [UVM] 5.7.2 매핑되지 않은(unmapped) 레지스터·메모리 다루기 (0) | 2025.05.15 |
| [UVM] 5.7 특수 레지스터(Special Registers) ― “평범하지 않은 동작은 이렇게 모델링한다” (0) | 2025.05.14 |
| [UVM] 5.6.6 액티브 모니터링(Active Monitoring) ― DUT가 “스스로 바꾼” 레지스터 값을 미러에 즉시 반영하기 (0) | 2025.05.13 |
| [UVM] 5.6.5 보호 메모리(Protected Memory) 백도어 액세스 ― ECC · 암호화까지 다루는 encode/decode 콜백 (0) | 2025.05.13 |