지노랩 /JinoLab
[UVM] 3.10.4 시퀀스 아이템 및 시퀀스 오버라이딩 (Overriding Sequence Items and Sequences) 본문
UVM(Universal Verification Methodology)/3. 재사용 가능한 검증 컴포넌트 개발(Developing Reusabl
[UVM] 3.10.4 시퀀스 아이템 및 시퀀스 오버라이딩 (Overriding Sequence Items and Sequences)
지노랩/JinoLab 2025. 3. 20. 12:001. 개요
- UVM에서는 기존 시퀀스(sequence)나 시퀀스 아이템(sequence item)의 동작을 변경하기 위해 "오버라이딩(Overriding)"을 지원.
- 오버라이딩을 통해 기존 시퀀스를 수정하지 않고도 특정 테스트 환경에서 변경된 동작을 적용할 수 있음.
- UVM 팩토리(factory)를 활용하여 특정 타입의 시퀀스 또는 시퀀스 아이템을 다른 클래스로 대체 가능.
2. 오버라이딩을 위한 절차
(1) 사용자 정의 시퀀스 아이템 또는 시퀀스 클래스 선언
- 새로운 동작을 추가하거나 기존의 동작을 수정하기 위해 기존 클래스에서 파생된 새로운 클래스를 정의.
- 예제: 기본 시퀀스 아이템 simple_item을 확장하여 word_aligned_item을 선언.
예제: simple_item을 상속받은 word_aligned_item 정의
class simple_item extends uvm_sequence_item;
rand int unsigned addr;
rand int unsigned data;
rand int unsigned delay;
constraint c1 { addr < 16'h2000; }
constraint c2 { data < 16'h1000; }
`uvm_object_utils(simple_item)
function new(string name = "simple_item");
super.new(name);
endfunction
endclass
class word_aligned_item extends simple_item;
constraint word_aligned_addr { addr[1:0] == 2'b00; } // 워드 정렬된 주소
`uvm_object_utils(word_aligned_item)
function new(string name = "word_aligned_item");
super.new(name);
endfunction
endclass
설명
- word_aligned_item 클래스는 simple_item을 확장하여 워드 정렬된 주소 제약 조건을 추가.
- uvm_object_utils 매크로를 추가하여 UVM 팩토리에 등록.
(2) uvm_factory를 활용한 오버라이딩 적용
- 특정 타입의 모든 인스턴스를 다른 클래스로 대체할 수 있음.
- set_type_override_by_type() 또는 set_inst_override_by_type()을 사용하여 오버라이딩 설정.
예제: 모든 simple_item을 word_aligned_item으로 변경
set_type_override_by_type(simple_item::get_type(),
word_aligned_item::get_type());
설명
- simple_item을 생성하는 모든 팩토리 요청을 word_aligned_item으로 변경.
예제: 특정 시퀀서(sequencer)에서만 simple_item을 word_aligned_item으로 변경
set_inst_override_by_type("env0.agent0.sequencer.*",
simple_item::get_type(),
word_aligned_item::get_type());
설명
- "env0.agent0.sequencer.*" 경로에 있는 시퀀서에서만 simple_item을 word_aligned_item으로 대체.
예제: 특정 환경(env) 내 모든 시퀀서에서 simple_item을 word_aligned_item으로 변경
set_inst_override_by_type("env0.*.sequencer.*",
simple_item::get_type(),
word_aligned_item::get_type());
설명
- "env0.*.sequencer.*" 경로에 있는 모든 시퀀서에서 simple_item을 word_aligned_item으로 대체.
(3) 오버라이딩이 적용된 아이템을 create()로 생성
- 팩토리에서 create() 메서드를 사용하면 오버라이딩이 자동으로 반영됨.
예제: 팩토리를 활용한 시퀀스 아이템 생성
simple_item req;
req = simple_item::type_id::create("req", get_full_name());
설명
- create()를 호출하면, 기존 simple_item이 아니라 오버라이딩된 word_aligned_item이 생성됨.
3. 요약
- UVM에서는 팩토리를 이용하여 특정 시퀀스 아이템 또는 시퀀스를 오버라이딩할 수 있음.
- 팩토리 설정을 통해 특정 타입을 전체적으로 변경하거나, 특정 인스턴스에서만 변경 가능.
- 팩토리를 사용하여 생성(create())하면 오버라이딩이 적용됨.
- 이를 통해 기존 코드를 수정하지 않고도 테스트 환경에 맞게 동작을 변경할 수 있음.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 3. 재사용 가능한 검증 컴포넌트 개발(Developing Reusabl' 카테고리의 다른 글
| [UVM] 3.12 체크 및 커버리지 구현 (Implementing Checks and Coverage) (0) | 2025.03.21 |
|---|---|
| [UVM] 3.11 테스트 종료 관리 (Managing End of Test) (0) | 2025.03.20 |
| [UVM] 3.10.3 Sequencer에서 Sequence 실행하기 (0) | 2025.03.19 |
| [UVM] 3.10.2 서브시퀀스 및 시퀀스 아이템 전송 (Sending Subsequences and Sequence Items) (0) | 2025.03.19 |
| [UVM] 3.10.1 사용자 정의 시퀀스 선언 (Declaring User-Defined Sequences) (0) | 2025.03.18 |