지노랩 /JinoLab
[UVM] 5.9.2.3 레이어드 레지스터-시퀀서 방식 본문
UVM(Universal Verification Methodology)/5. Register Layer Class 사용하기
[UVM] 5.9.2.3 레이어드 레지스터-시퀀서 방식
지노랩/JinoLab 2025. 5. 20. 09:13
1 | 구조 한눈에 보기

계층 데이터 형식 역할
| 레지스터 시퀀스 | uvm_reg_item | 모델-독립 추상 RW 요청 생성 |
| 변환 시퀀스 | uvm_reg_sequence#(...) | 추상 item을 버스 전용 item으로 변환해 APB sequencer에 실행 |
| 버스 시퀀스/드라이버 | apb_rw | 실제 버스 핸드셰이크·드라이브 |
2 | 언제 쓰나?
- 버스가 하나뿐이고
- 모든 레지스터 트래픽을 한 곳에서 중앙 제어하고 싶을 때
(테스트벤치가 “버스 시퀀스” 세부 동작을 직접 다루지 않아도 됨)
대신 grab/lock 같은 버스 수준 제어는 사용할 수 없고,
버스-고유 시퀀스와 레지스터 시퀀스를 한 시퀀서에서 섞어 수행할 수도 없다.
3 | 구현 단계
3-1 connect_phase
if (regmodel.get_parent() == null) begin
// ① RAL ↔ “레지스터 전용” sequencer(reg_seqr) 연결
regmodel.default_map.set_sequencer(reg_seqr, null);
// ② 변환 시퀀스(reg2apb_seq) 생성·설정
reg2apb_seq = reg2apb_seq_t::type_id::create("reg2apb_seq", this);
reg2apb_seq.reg_seqr = reg_seqr; // 상층 sequencer
reg2apb_seq.adapter = reg2apb_adapter::type_id::
create("reg2apb", this); // reg↔bus 어댑터
regmodel.set_auto_predict(1); // 묵시적 예측
end
3-2 run_phase
virtual task run();
// ③ 변환 시퀀스를 “실제” bus sequencer(APB)에서 실행
reg2apb_seq.start(apb.sequencer);
endtask
이 시점부터 reg_seqr 로 들어오는 모든 uvm_reg_item 은
reg2apb_seq 가 받아서 APB item으로 변환 후 bus 로 전달한다.
4 | 레지스터 시퀀스 실행
class my_test extends uvm_test;
block_env env;
virtual function void run_phase(uvm_phase phase);
my_reg_sequence seq = my_reg_sequence::type_id::create("seq", this);
seq.model = env.regmodel;
seq.start(env.reg_seqr); // 버스 sequencer가 아닌 reg_seqr에 실행!
endfunction
endclass
5 | 장 · 단점 요약
장점 단점
| • 버스-독립적 중앙 통제 (reg_seqr)• 테스트가 bus 세부를 몰라도 됨• 변환 시퀀스를 오버라이드해 커스텀 주소 변환 가능 | • grab/lock, pre_do/mid_do 콜백 등 버스 수준 제어 불가• 레지스터·버스 시퀀스 동시 경쟁 불가 (하나의 경로로 집중)• 단일 버스에만 적용(다중 버스일 경우 가상 시퀀스 방식 권장) |
핵심 기억 포인트
- reg_seqr – uvm_sequencer#(uvm_reg_item) : 추상 R/W를 큐잉
- 변환 시퀀스 – uvm_reg_sequence#(uvm_sequence#(bus_item))
- reg_seqr 로부터 uvm_reg_item 받아 어댑터로 바꿔 bus sequencer 실행
- 테스트는 reg_seqr 에 시퀀스를 start() 하면 끝!
이 패턴으로 레지스터 트래픽을 독립 레이어에서 관리하면서, 동시에 버스 UVC 코드 변경 없이 다양한 주소 변환 논리를 실험할 수 있습니다.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 5. Register Layer Class 사용하기' 카테고리의 다른 글
| [UVM] 5.10 필드 값 랜덤화(Randomization) 사용법 (1) | 2025.05.21 |
|---|---|
| [UVM] 5.9.3 버스 모니터와 레지스터-모델을 연결해 미러를 ‘실시간’ 업데이트 하기 (0) | 2025.05.20 |
| [UVM] 5.9.2.2 가상 시퀀스로 레지스터 시퀀스 실행하기 (0) | 2025.05.19 |
| [UVM] 5.9.2.1 버스 시퀀서에서 레지스터 시퀀스를 직접 실행하기 (0) | 2025.05.19 |
| [UVM] 5.9.2 버스 시퀀서 통합 ― 레지스터 모델이 실제 버스를 구동·관측하도록 연결하는 세 가지 패턴 (0) | 2025.05.18 |