지노랩 /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 콜백 등 버스 수준 제어 불가• 레지스터·버스 시퀀스 동시 경쟁 불가 (하나의 경로로 집중)• 단일 버스에만 적용(다중 버스일 경우 가상 시퀀스 방식 권장)

핵심 기억 포인트

  1. reg_seqr – uvm_sequencer#(uvm_reg_item) : 추상 R/W를 큐잉
  2. 변환 시퀀스 – uvm_reg_sequence#(uvm_sequence#(bus_item))
    • reg_seqr 로부터 uvm_reg_item 받아 어댑터로 바꿔 bus sequencer 실행
  3. 테스트는 reg_seqr 에 시퀀스를 start() 하면 끝!

이 패턴으로 레지스터 트래픽을 독립 레이어에서 관리하면서, 동시에 버스 UVC 코드 변경 없이 다양한 주소 변환 논리를 실험할 수 있습니다.

 

 

 


 

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