지노랩 /JinoLab

[UVM] 5.9.3 버스 모니터와 레지스터-모델을 연결해 미러를 ‘실시간’ 업데이트 하기 본문

UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기

[UVM] 5.9.3 버스 모니터와 레지스터-모델을 연결해 미러를 ‘실시간’ 업데이트 하기

지노랩/JinoLab 2025. 5. 20. 11:16

 

1 | 왜 모니터가 필요한가?

  • 묵시적(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 | 동작 흐름

  1. 모니터가 apb_rw 트랜잭션을 analysis_port 로 전송
  2. 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
를 바탕으로 작성된 글입니다.