1. Overview
UVM 개요 및 검증 방식
Universal Verification Methodology (UVM)는 SystemVerilog 기반으로 **테스트벤치(testbench)**를 생성하는 데 필수적인 구조를 제공합니다. 이 가이드는 검증 환경의 재사용성과 효율성을 높이기 위해 설계되었습니다. 특히, UVM은 **Coverage-Driven Verification (CDV)**라는 기법을 통해 테스트 과정에서 자동화된 테스트 생성, 자가 검증 기능을 갖춘 테스트벤치를 사용하며, 이를 통해 검증 커버리지 목표를 달성합니다.
1.1 Coverage-Driven Verification (CDV)
CDV는 자동 테스트 생성, 자가 검증 테스트벤치, 그리고 커버리지 메트릭스를 결합해 설계 검증의 시간을 크게 단축시킵니다. 이 방식은 전통적인 방법과 달리 수백 개의 테스트를 수작업으로 작성할 필요를 없애며, 명확한 목표 설정을 통해 검증 과정을 체계적으로 진행할 수 있습니다. 또한, CDV를 통해 초기 오류 탐지 및 런타임 오류 분석이 가능해 디버깅을 간소화할 수 있습니다.
CDV에서는 랜덤 테스트 기법이 주로 사용되며, 추가적인 테스트 제약 조건을 설정하여 커버리지 목표를 조기에 달성할 수 있습니다. 이 과정에서 중복 테스트를 제거하고, 검증 목표에 기여하는 테스트만을 선정하여 테스트 리그레션(regression)을 최적화합니다.
장점:
- 테스트 생성 시간 절약
- 명확한 목표 설정으로 검증 효율성 향상
- 랜덤 테스트 기법을 통해 커버리지 확대
1.2 테스트벤치와 검증 환경
UVM 테스트벤치는 여러 검증 컴포넌트로 구성된 모듈화된 구조입니다. 각각의 검증 컴포넌트는 디자인 하위 모듈 또는 전체 시스템을 검증할 수 있도록 설계되었습니다. 이러한 컴포넌트는 다양한 검증 시나리오에서 재사용 가능하며, 구성 가능한 특성을 지닙니다.
1.3 검증 컴포넌트 구성 요소
데이터 항목 (Transaction): 설계 검증 과정에서 주고받는 데이터의 기본 단위로, 각 데이터 항목은 UVM 트랜잭션으로 처리됩니다.
드라이버 (Driver/BFM): 드라이버는 테스트 시나리오에 맞춰 **Device Under Test (DUT)**에 신호를 전달합니다. 이때, UVM 드라이버는 DUT에 직접 신호를 주입하여 테스트 결과를 확인합니다.
시퀀서 (Sequencer): 시퀀서는 랜덤 또는 시퀀스 기반 테스트 항목을 생성해 드라이버에게 전달하는 역할을 합니다.
모니터 (Monitor): 모니터는 DUT에서 발생하는 신호를 감시하고, 데이터 변환 및 검증을 수행합니다. 또한, 모니터는 커버리지 정보를 수집하고, 신호의 이상 유무를 확인하는 자가 검사 기능을 제공합니다.
1.4 UVM 클래스 라이브러리
UVM은 다양한 클래스 라이브러리를 통해 트랜잭션 레벨 모델링(TLM), UVM 팩토리 등의 기능을 제공합니다. 이를 통해 설계자는 복잡한 시스템을 보다 쉽게 모델링하고 테스트할 수 있으며, 테스트 환경을 자동으로 구성하고 확장할 수 있습니다.
class ubus_example_tb extends uvm_env;
ubus_env ubus0;
ubus_example_scoreboard scoreboard0;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
virtual function build_phase(uvm_phase phase);
super.build_phase(phase);
ubus0 = ubus_env::type_id::create("ubus0", this);
scoreboard0 = ubus_example_scoreboard::type_id::create("scoreboard0", this);
endfunction
virtual function connect_phase(uvm_phase phase);
ubus0.slaves[0].monitor.item_collected_port.connect(scoreboard0.item_collected_export);
endfunction
endclass
결론
UVM은 복잡한 검증 시스템의 재사용성과 효율성을 극대화할 수 있는 최적의 방법론입니다. 특히, Coverage-Driven Verification을 통해 명확한 검증 목표를 설정하고, 시스템을 자동으로 테스트하여 빠르고 정확한 검증이 가능합니다. UVM의 다양한 클래스와 기능은 설계 검증의 복잡성을 줄이고, 재사용 가능한 검증 환경을 구축하는 데 기여합니다.
'지식 공유 > UVM' 카테고리의 다른 글
[UVM 1.1d] 4-2. Reusable UVM Component (0) | 2024.10.10 |
---|---|
[UVM 1.1d] 4-1. Reusable UVM Component (0) | 2024.09.29 |
[UVM 1.1d] UVM Sequence Macro (uvm_do/uvm_do_with) (0) | 2024.09.29 |
[UVM 1.1d] 3-2. UVM Components (1) | 2024.09.26 |
[UVM 1.1d] 3-1. UVM Components (1) | 2024.09.25 |
[UVM 1.1d] 2. Transaction-Level Modeling (TLM) (0) | 2024.09.23 |
댓글