[UVM 1.1d] 9. Directed-Test Style (v.s. UVM Style)
본문 바로가기
지식 공유/UVM

[UVM 1.1d] 9. Directed-Test Style (v.s. UVM Style)

by 긍수저 2024. 12. 1.

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

주요 특징

  1. execute_item() 사용:
    • 명시적으로 데이터 항목을 생성하고 실행합니다.
    • 블로킹 호출로, 해당 작업이 완료될 때까지 대기합니다.
  2. 설정:
    • 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

주요 특징

  1. Virtual Sequencer:
    • 여러 하위 시퀀서를 제어하기 위한 중앙 제어 역할.
    • uvm_update_sequence_lib 매크로로 데이터 항목을 처리하지 않음을 명시.
  2. 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는 복잡한 시스템 수준의 검증에 적합하며, 재사용 가능한 시퀀스 라이브러리를 활용하여 검증 효율성을 극대화할 수 있습니다.
반응형

댓글