1. Directed-Test Style Interface
Directed-Test Style Interface는 전통적인 명령형 프로그래밍 스타일로, 테스트 작성자가 명시적으로 시퀀서와 상호작용하며 데이터 항목을 생성하고 실행합니다.
예제 코드
class directed_test extends ubus_example_base_test;
`uvm_component_utils(directed_test)
ubus_example_tb ubus_example_tb0;
function new (string name = "directed_test", uvm_component parent = null);
super.new(name, parent);
endfunction
virtual function void build();
super.build();
set_config_int("*.sequencer", "count", 0);
ubus_example_tb0 = ubus_example_tb::type_id::create("ubus_example_tb0", this);
endfunction
virtual task run();
bit success;
simple_item item;
#10;
item = new();
success = item.randomize();
tb.ahb.masters[1].sequencer.execute_item(item);
success = item.randomize() with { addr < 32'h0123; };
tb.ahb.masters[1].sequencer.execute_item(item);
endtask
endclass
주요 특징
- execute_item() 사용:
- 명시적으로 데이터 항목을 생성하고 실행합니다.
- 블로킹 호출로, 해당 작업이 완료될 때까지 대기합니다.
- 설정:
- count 파라미터를 0으로 설정하여 기본 시퀀서 동작을 비활성화합니다.
장단점
장점 | 단점 |
특정 시나리오를 명확하게 정의 가능 | 많은 코드 작성 및 유지 보수 필요 |
복잡한 시나리오를 명령형으로 작성 가능 | 코드 재사용성 낮음 |
디버깅이 쉬움 | DUT 상태와의 동기화 부족 |
2. Virtual Sequencer
Virtual Sequencer는 여러 하위 시퀀서를 제어하는 고수준 시퀀서를 생성하며, 시스템 수준의 시나리오를 작성하는 데 적합합니다.
예제 코드: Virtual Sequencer
class simple_virtual_sequencer extends uvm_sequencer;
eth_sequencer eth_seqr;
cpu_sequencer cpu_seqr;
function new(input string name="simple_virtual_sequencer", input uvm_component parent=null);
super.new(name, parent);
`uvm_update_sequence_lib
endfunction
`uvm_component_utils(simple_virtual_sequencer)
endclass
예제 코드: Virtual Sequence
class simple_virt_seq extends uvm_sequence;
cpu_config_seq conf_seq;
eth_large_payload_seq frame_seq;
random_traffic_virt_seq rand_virt_seq;
`uvm_sequence_utils(simple_virt_seq, simple_virtual_sequencer)
virtual task body();
`uvm_do_on(conf_seq, p_sequencer.cpu_seqr)
`uvm_do_on(frame_seq, p_sequencer.eth_seqr)
`uvm_do(rand_virt_seq)
endtask
endclass
주요 특징
- Virtual Sequencer:
- 여러 하위 시퀀서를 제어하기 위한 중앙 제어 역할.
- uvm_update_sequence_lib 매크로로 데이터 항목을 처리하지 않음을 명시.
- Virtual Sequence:
- uvm_do_on을 사용하여 특정 시퀀서에서 시퀀스를 실행.
- uvm_do를 사용하여 동일 시퀀서 내 다른 Virtual Sequence 실행.
3. UVM Style v.s. Directed-Test Style
UVM 스타일Directed-Test 스타일
UVM Style | Directed Test Style |
시퀀스와 시퀀서의 독립적 동작 허용 | 테스트 코드가 시퀀서 동작을 직접 제어 |
자동화된 랜덤 생성 및 커버리지 향상 | 고정된 시나리오 실행 |
코드 재사용성 높음 | 특정 테스트에 종속적 |
구조적 및 계층적 설계 지원 | 단순하고 명령형 스타일로 구현 |
더 많은 설정이 필요 | 간단한 시나리오에는 적합 |
결론
- Directed-Test Style Interface는 간단한 시나리오 또는 특정 조건 검증에 적합하며, 작성자가 DUT의 상태를 명확하게 제어할 수 있습니다.
- Virtual Sequencer는 복잡한 시스템 수준의 검증에 적합하며, 재사용 가능한 시퀀스 라이브러리를 활용하여 검증 효율성을 극대화할 수 있습니다.
반응형
'지식 공유 > UVM' 카테고리의 다른 글
[UVM 1.1d] 8. UVM Sequence Library (1) | 2024.12.01 |
---|---|
[UVM 1.1d] 7-3. UBus Verification Example (0) | 2024.12.01 |
[UVM 1.1d] 7-2. UBus Verification Example (0) | 2024.11.26 |
[UVM 1.1d] 7-1. UBus Verification Example (0) | 2024.11.24 |
[UVM 1.1d] 6-3. Advanced UVM Topics (UVM CLI) (0) | 2024.11.19 |
[UVM 1.1d] 6-2. Advanced UVM Topics (SEQ_LIB, Layering) (0) | 2024.11.13 |
댓글