지노랩 /JinoLab
[UVM] 5.9.3 버스 모니터와 레지스터-모델을 연결해 미러를 ‘실시간’ 업데이트 하기 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.9.3 버스 모니터와 레지스터-모델을 연결해 미러를 ‘실시간’ 업데이트 하기
지노랩/JinoLab 2025. 5. 20. 11:161 | 왜 모니터가 필요한가?

- 묵시적(implicit) 예측
– RAL-API 로 수행된 read/write/peek/poke 만 반영 - 문제
– DMA·CPU·타 BFM 이 동일 버스를 통해 레지스터를 변경하면 RAL 은 모름 - 해결
– 버스 모니터가 모든 트랜잭션을 관측 → Predictor 가 RAL 미러값을 업데이트
bus monitor ─► predictor ─► reg.predict() ─► mirror
2 | 구현 단계
2-1 Predictor 인스턴스화 (build_phase)
class block_env extends uvm_env;
block_reg_model regmodel;
apb_agent apb;
uvm_reg_predictor#(apb_rw) apb2reg;
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
apb2reg = uvm_reg_predictor#(apb_rw)::type_id::
create("apb2reg", this);
endfunction
2-2 연결 (connect_phase)
virtual function void connect_phase(uvm_phase phase);
// 루트 RAL 에서만 수행
if (regmodel.get_parent() == null) begin
// ① 어댑터 준비(재사용)
reg2apb_adapter adp = reg2apb_adapter::type_id::
create("adp", this);
// ② Predictor 설정
apb2reg.map = regmodel.APB; // 또는 default_map
apb2reg.adapter = adp;
// ③ 묵시적 예측 OFF (중복 방지)
regmodel.APB.set_auto_predict(0);
// ④ 모니터 analysis 포트에 연결
apb.monitor.ap.connect(apb2reg.bus_in);
end
endfunction
endclass
항목 설명
| map | 모니터가 관측하는 트랜잭션이 속한 어드레스 맵 핸들 |
| adapter | 버스 item(apb_rw) → uvm_reg_bus_op 변환용 |
| bus_in | predictor 가 수신할 analysis_port |
3 | 동작 흐름
- 모니터가 apb_rw 트랜잭션을 analysis_port 로 전송
- Predictor
- 어댑터로 canonical addr / data 추출
- map.get_reg_by_offset() 역-lookup
- 해당 레지스터의 predict() 호출 → 미러 갱신
- 완성된 uvm_reg_item 을 본인 analysis 포트로 broadcast (옵션)
레지스터 폭이 버스폭보다 크면 predictor 가 여러 버스트를 모아 전체 값이 완성된 후 predict() 호출.
4 | 통합 모드별 정리
모드 Sequencer 통합 Monitor+Predictor 특징
| Implicit | O | X | RAL 호출만 반영 (외부 Master 미반영) |
| Explicit | O | O | 위 예시 – 모든 트랜잭션 반영 |
| Passive | X | O | RAL 은 값 추적만, 직접 R/W 안함 |
5 | 주의 & 팁
- auto_predict(0) 을 맵 단위로 끄기 – 같은 맵에 대해 implicit+explicit 중복 방지
- 여러 버스 → predictor 를 버스당 하나 생성 및 연결
- predictor 가 내보내는 analysis_port 로 커버리지 수집이나 추가 체크(scoreboard) 도 가능
- 초기화 직후 미러-값 sync 가 필요하면 regmodel.reset() 또는 각 레지스터 mirror(UVM_BACKDOOR) 호출
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.11 레지스터-라이브러리에서 제공하는 사전 정의(Pre-defined) 시퀀스 활용 가이드 (0) | 2025.05.21 |
|---|---|
| [UVM] 5.10 필드 값 랜덤화(Randomization) 사용법 (1) | 2025.05.21 |
| [UVM] 5.9.2.3 레이어드 레지스터-시퀀서 방식 (0) | 2025.05.20 |
| [UVM] 5.9.2.2 가상 시퀀스로 레지스터 시퀀스 실행하기 (0) | 2025.05.19 |
| [UVM] 5.9.2.1 버스 시퀀서에서 레지스터 시퀀스를 직접 실행하기 (0) | 2025.05.19 |