지노랩 /JinoLab
[UVM] 5.8 레지스터 모델을 검증 환경에 통합하는 절차 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.8 레지스터 모델을 검증 환경에 통합하는 절차
지노랩/JinoLab 2025. 5. 17. 09:57
1 | 필수 컨셉
키워드 의미
| regmodel | 환경이 참조하는 최상위 레지스터 블록 객체. 환경마다 이 이름의 프로퍼티를 두면 위·아래 계층 모두가 동일한 규칙으로 접근 가능. |
| lock_model() | build() 이후 구조(레지스터·맵) 변경을 막아 안정된 인스턴스임을 선언. |
| HDL Path Root | 백도어용 경로 문자열의 “최상위 접두사” – 환경이 DUT 인스턴스를 어디에 넣느냐에 따라 달라지므로 모델을 만든 쪽이 아니라 환경에서 지정. |
2 | build_phase() 템플릿 (수직 재사용 지원)
class block_env extends uvm_env;
// ① 레지스터 모델 핸들
block_reg_model regmodel;
// ② 서브 블록 환경
subblk_env subblk;
virtual function void build_phase(uvm_phase phase);
//------------------------------------------------------------
// 2-A 상위 환경이 이미 regmodel을 주입했는지 체크
if (regmodel == null) begin
// (1) 팩터리 생성
regmodel = block_reg_model::type_id::create("regmodel", this);
// (2) build() 호출 – RAL 객체 내부 구성
regmodel.build();
// (3) (옵션) 백도어용 HDL root 경로 지정
regmodel.set_hdl_path_root("tb_top.dut");
// (4) 구조 고정
regmodel.lock_model();
end
//------------------------------------------------------------
// 2-B 서브 환경 생성 + 하위 regmodel 연결
subblk = subblk_env::type_id::create("subblk", this);
subblk.regmodel = regmodel.subblk; // 서브블록 모델 전달
endfunction
endclass
vertical reuse
block_env 이 상위 IP → 서브시스템 → SoC로 재사용될 때,
상위 환경이 이미 같은 모델 인스턴스를 만들어 주입하면 if (regmodel==null) 조건이 false가 되어 중복 생성을 피한다.
3 | 통합 단계별 체크리스트
단계 해야 할 일
| ① 생성 | block_reg_model::type_id::create(...) |
| ② build() | 내부 레지스터·맵·서브블록 인스턴스화 |
| ③ 옵션 설정 | set_hdl_path_root() — 백도어 사용 시 필수 |
| ④ lock_model() | 이후 테스트 단계에서 구조 변조 방지 |
| ⑤ 하위 전달 | 서브 환경이나 가상 시퀀스에 regmodel.subblk 등 연결 |
4 | 실무 팁
- HDL root 경로는 환경 계층마다 달라질 수 있으므로,
“RAL Generator → 경로 하드코딩” 대신 환경에서 설정해 두면 재사용이 수월합니다. - uvm_config_db::set() 으로 regmodel을 주입하는 방법도 있지만, 직접 프로퍼티 할당이 가독성이 좋고 타입-세이프합니다.
- 서브 환경 수가 많으면 foreach (subblk_envs[i]) subblk_envs[i].regmodel = ...; 패턴으로 일괄 전달.
- lock_model() 이전에는 coverage 포함 여부·set_frontdoor() 등 커스터마이즈를 먼저 해 두어야 합니다.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.9.1 트랜잭션 어댑터(Transaction Adapter) (0) | 2025.05.18 |
|---|---|
| [UVM] 5.9 레지스터 모델 통합 ― 버스 에이전트와 모델을 연결하는 3가지 방식 (0) | 2025.05.17 |
| [UVM] 5.7.5 읽기 전용(RO)·쓰기 전용(WO) 레지스터가 한 주소를 공유할 때의 모델링 (1) | 2025.05.16 |
| [UVM] 5.7.4 구현 되지 않은(Unimplemented) 레지스터 다루기 (0) | 2025.05.16 |
| [UVM] 5.7.3 에일리어스 레지스터( Aliased Registers ) (0) | 2025.05.15 |