지노랩 /JinoLab
[UVM] 5.9 레지스터 모델 통합 ― 버스 에이전트와 모델을 연결하는 3가지 방식 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.9 레지스터 모델 통합 ― 버스 에이전트와 모델을 연결하는 3가지 방식
지노랩/JinoLab 2025. 5. 17. 11:58
1 | 왜 “통합(Integration)”이 필요한가?
- 레지스터 모델은 미러 값만 갖고 있다.
- 버스 에이전트(드라이버·모니터) 가 실제 DUT에 read/write 를 수행·관측한다.
- 두 세계를 연결해 미러 ↔ DUT 값을 일치시켜야 테스트·커버리지가 정확해진다.
통합 대상은 반드시 “루트 블록(root block)”
– 즉, 외부 주소 공간을 직접 보는 최상위 레지스터 모델만 버스와 연결한다.
if (regmodel.get_parent() == null) begin
// 여기가 루트 RAL – 버스 통합 수행
end
2 | 통합 방식 3가지
방식 필요 연결 미러 갱신 방식 특징
| ① 묵시적(Implicit) Prediction | • 버스 Sequencer | RAL 내부가 read/write/peek/poke 끝날 때 자동 예측 | 구현 가장 단순. → 제3의 마스터 트랜잭션은 감지 못함. |
| ② 명시적(Explicit) Prediction | • 버스 Sequencer• 버스 Monitor• uvm_reg_predictor | Monitor가 관측한 TX를 predictor 가 RAL-주소 역추적 후 reg.predict() 호출 | 모든 트랜잭션 반영. 구현·연결이 다소 복잡. |
| ③ 패시브(Passive) 모드 | • 버스 Monitor• uvm_reg_predictor | Sequencer 연결 없음 → RAL 스스로 R/W 하지 않음 | 읽기/쓰기 자체는 외부(SW, 타 BFM) 가 수행, RAL은 값 추적·검증만. |
3 | 통합 코드 스케치
3-1 Implicit Prediction (가장 간단)
// connect_phase
ral_root.default_map.set_sequencer(p_sequencer); // 끝!
- Sequencer 가 RAL 시퀀스 요청을 실행하고, 완료 후 RAL 내부가 미러 값을 갱신한다.
3-2 Explicit Prediction
// build_phase
predictor = uvm_reg_predictor#(bus_tx)::type_id::create("predictor", this);
predictor.map = ral_root.default_map;
predictor.adapter = bus2reg_adapter;
predictor.bus_in = bus_mon.ap; // monitor analysis 포트
predictor.sqr = p_sequencer; // optional – RAL R/W에 사용
// connect_phase
bus_mon.ap.connect(predictor.bus_in);
ral_root.default_map.set_sequencer(p_sequencer);
// 묵시적 예측 끄기
ral_root.set_auto_predict(0);
3-3 Passive Integration
predictor = uvm_reg_predictor#(bus_tx)::type_id::create("predictor", this);
predictor.map = ral_root.default_map;
predictor.adapter = bus2reg_adapter;
bus_mon.ap.connect(predictor.bus_in);
// Sequencer 연결·auto_predict 모두 없음
- 테스트벤치가 직접 버스 BFM으로 레지스터를 조작(혹은 펌웨어가 수행)
- RAL은 감시 + 검증 역할만.
4 | 장단점 비교
항목 Implicit Explicit Passive
| 구현 난이도 | ★☆☆ | ★★☆ | ★★☆ |
| 외부 마스터 반영 | 불가 | 가능 | 가능 |
| RAL 통해 R/W | 가능 | 가능 | 불가 |
| 속도 | 가장 빠름 | 약간 오버헤드(프레딕터) | 모니터만 – 중간 |
| 추천 시나리오 | 단일 BFM, FW 없음, 초기 bring-up | HS 버스, DMA·CPU 등 다중 마스터 | SoC 수준 FW 테스트, RAL은 체크 전용 |
5 | HDL 경로(root path) 지정
루트 환경에서만 지정:
regmodel.set_hdl_path_root("tb_top.dut");
하위 환경들은 상위가 넘겨준 regmodel 을 그대로 사용하므로, 경로를 다시 설정할 필요가 없다.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.9.2 버스 시퀀서 통합 ― 레지스터 모델이 실제 버스를 구동·관측하도록 연결하는 세 가지 패턴 (0) | 2025.05.18 |
|---|---|
| [UVM] 5.9.1 트랜잭션 어댑터(Transaction Adapter) (0) | 2025.05.18 |
| [UVM] 5.8 레지스터 모델을 검증 환경에 통합하는 절차 (0) | 2025.05.17 |
| [UVM] 5.7.5 읽기 전용(RO)·쓰기 전용(WO) 레지스터가 한 주소를 공유할 때의 모델링 (1) | 2025.05.16 |
| [UVM] 5.7.4 구현 되지 않은(Unimplemented) 레지스터 다루기 (0) | 2025.05.16 |