Sunny Day
UVM(Universal Verification Methodology) 개요 본문
UVM은 검증 환경과 VIP(Verification IP)를 재사용하여 빠른 개발을 가능하게 하는 표준 검증 방법론이다.
UVM을 활용하면 다른 팀들과 테스트벤치의 균일성, 호환성, 유지 관리의 유연성/용이성을 보장하여 효율적으로 일하게 도와준다. 그리고 제공되는 Class 들을 이용하여 stimulus과 monitoring 같은 중요한 검증 업무에만 집중할 수 있게 도와준다.
System verilog 기반의 Class library set가 있어서 syntax에 맞게 사용해야 한다.
UVM의 핵심은 다양한 프로젝에서 쓰일수 있게 API 프레임워크를 활용하여 검증 엔지니어가 modular, reusable, scalable testbench 구조를 쉽고 빠르게 만들 수 있게 하는 것이다.
UVM은 OVM으로부터 파생되어 EDA vendor들에 의해 제공된다.
UVM class library는 configuration database, TLM 같은 UVM 기본 구성 요소들을 제공해준다.
(+ copy, print, compare 같은 data automation features)
이런 제공되는 class들을 활용하여 특정 기능을 가지는 추상화 계층을 형성한다.
예를 들어, driver class object가 신호 driving 역할을 하는데 monitor는 그저 interface가 모니터링하고 신호 driving에는 관여하지 않는다.
uvm_* 라는 prefix를 가진 기본 components 들을 extand하여 target design의 검증을 수행할 수 있다.
UVM은 Driver, Monitor, stimulus generators, scoreboards로 구성되어 있다.
data나 transactions는 object, sequence items라 불리며 이런 요소들을 활용하여 transaction을 만들어낸다.
- UVM Class Hierarchy
UVM 검증 환경은 기본적으로 제공되는 Class를 extand하여 구성한다.
ex)
uvm_dirver - 프로토콜에 대한 stimulus는 uvm_seqence_tiem을 확장하여 사용된다.
이 시퀀스가 어떻게 만들어지고 드라이버에게 전달되는지는 UVM 프레임워크에 의해 내부적으로 처리된다.
uvm_void가 모든 클래스의 기본이고 uvm_object가 동일한 class를 copy, print와 같은 공통 함수가 정의된 메인 클래스이다.
계층 구조는 그림과 같이 기본 검증 요소로 이루어진 uvm_component 가 정의된 uvm_report_object와
검증 구성요소에서 사용되는 data object들이 정의된 uvm_transaction으로 구성되어있다.
UVM Objects
UVM은 code의 reuse와 flexibility가 핵심이므로 같은 testbench를 다른 방식으로 구성하여 다른 구성요소를 만들고 다른 작극을 제공함으로 개발을 쉽게 도와준다. 예를 들어 어떻게 testbench 환경을 구축할지 정의하는 특별한 세팅을 configuration class object를 이용하여 만들 수 있다.
UVM Sequence
sequence는 actuacl stimulus를 위한 container의 역할만 가지고 있다. coverage와 results의 향상을 위해 랜덤으로 sequence들을 재사용하는 것을 높이게 한다. 그래서 기본적으로 uvm_seqence를 상속하여 user_define stimulus class를 만들어야 한다.
각 sequence는 다른 sequence 내에서 사용되어 다른 시나리오를 생설할 수도 있다.
ex) Read, Write에 대한 transaction에 대해 하나씩 개별 sequence를 만들어 순서를 임의의 패턴으로 사용하여 coverage를 높인다.
UVM Sequence item
reference
https://www.chipverify.com/uvm/uvm-tutorial
https://www.eunchan.kim/research/uvm/uvm-introduction.html#fn1