지노랩 /JinoLab
[UVM] 5.9.2.2 가상 시퀀스로 레지스터 시퀀스 실행하기 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.9.2.2 가상 시퀀스로 레지스터 시퀀스 실행하기
지노랩/JinoLab 2025. 5. 19. 11:11
1 | 상황
- DUT 레지스터가 APB·Wishbone 처럼 여러 버스를 통해 접근 가능.
- 시퀀스 본문에서 어떤 버스인지 언급하지 않고와 같이 호출하고 싶다.
- model.regA.write(...); // 버스 X model.regB.read (...); // 버스 Y
➜ 가상 시퀀스(virtual sequence) 로 실행하면
→ RAL이 맵에 따라 자동으로 올바른 버스 시퀀서를 선택한다.

2 | 환경-측 연결 (connect_phase)
if (regmodel.get_parent() == null) begin
// (1) 각 주소맵에 버스 시퀀서 + 어댑터 등록
regmodel.APB.set_sequencer(apb.sequencer, reg2apb_adapter::type_id::create("adp_apb"));
regmodel.WSH.set_sequencer(wsh.sequencer, reg2wsh_adapter::type_id::create("adp_wsh"));
// (2) 묵시적 예측 켜 둔다
regmodel.set_auto_predict(1);
end
- 두 개 이상의 (맵, 시퀀서, 어댑터) 쌍을 RAL에 등록해 두기만 하면 준비 완료!
3 | 레지스터 시퀀스 예시
class dualbus_reg_seq extends uvm_reg_sequence;
`uvm_object_utils(dualbus_reg_seq)
block_reg_model model;
virtual task body();
uvm_status_e st;
fork
model.APB.write(st, 'h33, .parent(this)); // APB 통해 쓰기
model.WSH.read (st, 'h66, .parent(this)); // Wishbone 통해 읽기
join
endtask
endclass
- map 인자 생략 → RAL이 regA 는 APB 맵, regB 는 Wishbone 맵이라는 사실을 내부 테이블로 판단.
4 | 테스트에서 실행 (가상 시퀀스)
dualbus_reg_seq seq =
dualbus_reg_seq::type_id::create("seq", this);
seq.model = env.regmodel;
/* 주의: start() 에 **시퀀서를 지정하지 않고** null 전달 */
seq.start(null);
- null을 주면 UVM은 “가상 시퀀스” 로 인식하고,
시퀀스 안에서 호출되는 각 write/read 마다 RAL이 알아서 해당 버스 시퀀서를 선택한다.
5 | 특수 상황 – 특정 버스 독점(grab/lock)
테스트 코너-케이스에서 APB 시퀀서를 잠깐 독점하고 싶다면:
seq.grab(regmodel.APB.get_sequencer());
// … 독점 구간 …
seq.ungrab(regmodel.APB.get_sequencer());
- 의존성이 생기므로 재-사용성이 낮아질 수 있다는 점을 유의.
6 | 장·단점
항목 설명
| 장점 | • 시퀀스 코드가 버스 비-의존적 → 블록/SoC 어느 수준에서도 재-사용• 서로 다른 버스들에 대한 동시 액세스 가능 (fork) |
| 단점 | • grab/lock 사용 시 버스-특정 의존성 삽입 위험• 시퀀스 디버깅 시 실제 어느 버스가 선택됐는지 로그로 확인 필요 |
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.9.3 버스 모니터와 레지스터-모델을 연결해 미러를 ‘실시간’ 업데이트 하기 (0) | 2025.05.20 |
|---|---|
| [UVM] 5.9.2.3 레이어드 레지스터-시퀀서 방식 (0) | 2025.05.20 |
| [UVM] 5.9.2.1 버스 시퀀서에서 레지스터 시퀀스를 직접 실행하기 (0) | 2025.05.19 |
| [UVM] 5.9.2 버스 시퀀서 통합 ― 레지스터 모델이 실제 버스를 구동·관측하도록 연결하는 세 가지 패턴 (0) | 2025.05.18 |
| [UVM] 5.9.1 트랜잭션 어댑터(Transaction Adapter) (0) | 2025.05.18 |