지노랩 /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
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.9.2.2 가상 시퀀스로 레지스터 시퀀스 실행하기 (0) | 2025.05.19 |
|---|---|
| [UVM] 5.9.2.1 버스 시퀀서에서 레지스터 시퀀스를 직접 실행하기 (0) | 2025.05.19 |
| [UVM] 5.9.1 트랜잭션 어댑터(Transaction Adapter) (0) | 2025.05.18 |
| [UVM] 5.9 레지스터 모델 통합 ― 버스 에이전트와 모델을 연결하는 3가지 방식 (0) | 2025.05.17 |
| [UVM] 5.8 레지스터 모델을 검증 환경에 통합하는 절차 (0) | 2025.05.17 |