지노랩 /JinoLab

[UVM] 5.9.2 버스 시퀀서 통합 ― 레지스터 모델이 실제 버스를 구동·관측하도록 연결하는 세 가지 패턴 본문

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

[UVM] 5.9.2 버스 시퀀서 통합 ― 레지스터 모델이 실제 버스를 구동·관측하도록 연결하는 세 가지 패턴

지노랩/JinoLab 2025. 5. 18. 11:03

 

기본 개념

  • 레지스터 모델(RAL) ⟷ 버스 시퀀서(driver·monitor가 붙어 있는 UVC)의 연결이 반드시 필요.
  • RAL 기반 레지스터 시퀀스는 이 연결 방식을 통해 실제 DUT 버스를 읽고/쓰거나, 또는 값만 추적.

세 가지 통합 패턴
a) 단일 버스 → 버스 시퀀서에 직접 실행
b) 복수 버스 → 가상 시퀀스로 실행
c) 버스와 무관한 레지스터-전용 시퀀서 위에 레이어링


a) 단일 버스 — 레지스터 시퀀스를 버스 시퀀서에서 직접 실행

// connect_phase 예
regmodel.default_map.set_sequencer(apb.sequencer, apb_adapter);
regmodel.set_auto_predict(1);   // RAL 내부가 자동 예측

// 테스트 예
my_reg_sequence seq = my_reg_sequence::type_id::create("seq");
seq.model = regmodel;
seq.start(apb.sequencer);        // APB sequencer에 직접 실행
  • 장점 : 가장 단순, 미러 자동 예측.
  • 제약 : 다른 버스가 존재하면 재사용 어려움.

b) 복수 버스 — 가상 시퀀스(virtual sequence) 로 실행

// 두 버스 모두 등록
regmodel.APB.set_sequencer(apb.sequencer, apb_adapter);
regmodel.WSH.set_sequencer(wsh.sequencer, wsh_adapter);

// 시퀀스는 맵/시퀀서를 명시하지 않고 RAL 호출만
model.regA.write('h33);
model.regB.read(data);

// 실행 시 sequencer 파라미터를 null → 가상 시퀀스
seq.start(null);
  • RAL이 어떤 레지스터가 어떤 버스를 쓰는지 내부적으로 판단.
  • 동일 시퀀스가 SoC 레벨에서도 그대로 재사용 가능.

c) 레이어드 방식 — 레지스터-전용 시퀀서 → 변환 시퀀스 → 버스 시퀀서

// 1) RAL 맵에 레지스터-시퀀서 등록
regmodel.default_map.set_sequencer(reg_seqr, null);

// 2) 변환 시퀀스(reg2bus) 구성 — RAL item → 버스 item
reg2bus_seq.reg_seqr = reg_seqr;
reg2bus_seq.adapter  = apb_adapter;

// run_phase 에서 변환 시퀀스를 APB sequencer에 실행
reg2bus_seq.start(apb.sequencer);

// 이후 사용자 레지스터 시퀀스는 reg_seqr 에 start
user_reg_seq.start(reg_seqr);
  • 장점 : RAL 시퀀스가 버스-독립적이라 중앙 집중 제어 가능.
  • 단점 : 버스 시퀀스와 직접 경쟁(grab/ungrab) 불가, 하나의 버스만 지원.

요약 비교

패턴 버스 수 미러 예측 시퀀스 경쟁 재사용성

직접 실행 1 자동 가능 낮음
가상 시퀀스 ≥2 자동 가능 높음
레이어드 1 자동(변환 내) 제한적 중간

통합 패턴은 환경 구조·버스 개수·동기화 요구에 맞춰 선택하면 됩니다.

 

 

 

 

 


 

본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.