02_UVM 기본 클래스(Base Class) 이해하기: 초심자를 위한 가이드

UVM 기본 클래스 이해하기: 초심자를 위한 가이드

UVM(Universal Verification Methodology)은 SystemVerilog를 기반으로 하는 강력한 검증 방법론입니다. UVM 검증 환경을 구축하려면 기본 클래스들에 대한 이해가 필수적입니다. 이 게시물에서는 UVM의 핵심 기반 클래스들을 살펴보고, 각각의 역할과 중요성을 설명합니다.

기본 클래스 목록

  • uvm_void
  • uvm_object
  • uvm_report_object
  • uvm_component
  • uvm_transaction
  • uvm_root

검증 환경의 기본적인 구성 요소는 component (드라이버, 시퀀서, 모니터 등)와 transaction (실제 데이터를 포함하는 클래스 객체)입니다. UVM 클래스 계층 구조를 살펴보면, 대부분의 클래스가 아래 설명된 핵심 클래스 집합에서 파생된다는 것을 알 수 있습니다.

set_of_core_classes_UVM

uvm_void

uvm_void는 특별한 목적은 없지만, 모든 UVM 클래스의 기본 클래스 역할을 합니다.

virtual class uvm_void; endclass

이 클래스는 데이터 멤버나 함수가 없는 추상 클래스입니다. C 프로그래밍 언어의 void 포인터와 유사하게 객체의 일반적인 컨테이너를 생성할 수 있도록 합니다. uvm_void에서 직접 파생된 사용자 클래스는 UVM 기능 중 어느 것도 상속받지 않지만, 이러한 클래스는 다른 UVM 객체와 함께 uvm_void 유형의 컨테이너에 배치될 수 있습니다.

uvm_object

uvm_object는 UVM 테스트벤치의 모든 componenttransaction의 가상 기본 클래스입니다. 주요 역할은 print, copy, compare 및 record와 같은 일반적인 작업에 대한 메서드 집합을 정의하는 것입니다.

virtual class uvm_object extends uvm_void;
  extern function void print (uvm_printer printer=null);
  extern function void copy (uvm_object rhs, uvm_copier copier=null);
  extern function bit compare (uvm_object rhs, uvm_comparer comparer=null);
  extern function void record (uvm_recorder recorder=null);
  ...
endclass

UVM Object에 대해 더 알아보기!

uvm_report_object

uvm_report_object는 UVM 보고 기능을 위한 인터페이스를 제공합니다. 컴포넌트에서 발행된 모든 메시지, 경고, 오류는 이 인터페이스를 통해 처리됩니다. uvm_report_handler의 내부 인스턴스가 있어, 메시지를 인쇄할지 여부를 핸들러가 결정하는 보고 구성을 저장합니다. 그런 다음 실제 메시지 형식 지정 및 생성을 수행하는 중앙 uvm_report_server로 전달됩니다.

// A report has 'severity', 'id_string', 'text_message', and 'verbosity_level'
`uvm_info ("STAT", "Status register updated", UVM_HIGH")
// severity       : uvm_info
// id_string      : "STAT"
// text_message   : "Status register updated"
// verbosity_level : UVM_HIGH

verbosity level이 구성된 최대 verbosity level보다 크면 메시지는 무시됩니다. 예를 들어, 최대 verbosity level이 UVM_MEDIUM으로 설정된 경우 MEDIUM보다 큰 verbosity의 모든 INFO 문은 무시됩니다. 이는 디버그 관련 메시지에 대해 메시지 level을 UVM_HIGH로 설정하고 최대 verbosity level을 UVM_MEDIUM으로 설정할 수 있는 디버그 목적에 유용합니다. 이를 통해 테스트벤치를 다시 컴파일하지 않고도 다른 출력 수준 간에 전환할 수 있습니다.

UVM Reprot 기능에 대해 더 알아보기! (추가예정)

uvm_component

에이전트 및 드라이버와 같은 모든 주요 검증 컴포넌트는 uvm_component에서 파생됩니다. 다음과 같은 인터페이스가 있습니다.

  • Hierarchy: env0.pci0.master1.drv와 같은 컴포넌트 계층 구조를 검색하고 탐색하는 메서드를 정의합니다.
  • Phasing: build, connect, run 등 모든 컴포넌트가 따를 수 있는 페이징 시스템을 정의합니다.
  • Reporting: Report Handler에 대한 인터페이스를 정의하며, 모든 메시지, 경고 및 오류가 이 인터페이스를 통해 처리됩니다 (uvm_report_object에서 파생됨).
  • Recording: 컴포넌트에서 생성/소비된 트랜잭션을 트랜잭션 데이터베이스에 기록하는 메서드를 정의합니다.
  • Factory: 인스턴스/유형을 기반으로 새 컴포넌트/객체를 생성하는 데 사용되는 uvm_factory에 대한 인터페이스를 정의합니다.

UVM Component에 대해 더 알아보기! (추가예정)

uvm_transaction

uvm_transactionuvm_object의 확장이며 타이밍 및 기록 인터페이스를 포함합니다. 간단한 트랜잭션은 uvm_transaction에서 파생될 수 있지만 시퀀스 활성화 트랜잭션은 uvm_sequence_item에서 파생되어야 합니다.

uvm_root

uvm_root는 시뮬레이션 실행 시 자동으로 생성되는 암시적 최상위 UVM 컴포넌트이며, 사용자는 다음과 같은 속성을 가진 전역 uvm_pkg:: 변수 uvm_top을 통해 액세스할 수 있습니다.

  • 상위가 null로 설정된 모든 컴포넌트는 uvm_top의 하위가 됩니다.
  • 모든 컴포넌트에 대한 페이징을 관리합니다.
  • 계층적 이름을 기반으로 컴포넌트를 검색하는 데 사용됩니다.
  • 보고 verbosity를 전역적으로 구성하는 데 사용됩니다.
  • UVM의 보고 메커니즘은 모듈 및 시퀀스와 같은 uvm_component 외부의 모든 곳에서 액세스할 수 있습니다.

uvm_top은 elaboration 단계 종료 중에 오류를 확인하고 시뮬레이션 시작을 중지하기 위해 UVM_FATAL 오류를 발생시키는 것이 좋습니다.

UVM Root에 대해 더 알아보기! (추가예정)

요약

클래스 설명
uvm_object copy, compare 및 print와 같은 일반적인 작업을 위한 메서드를 정의합니다. 일반적으로 테스트벤치 및 테스트케이스 구성을 구축하는 데 사용됩니다.
uvm_component 드라이버, 모니터, 스코어보드 등과 같은 모든 테스트벤치 컴포넌트는 이 클래스에서 간접적으로 파생됩니다.
uvm_sequence_item 버스에서 구동되기 위해 드라이버로 전송해야 하는 모든 시퀀스 항목은 이 클래스에서 확장됩니다.
uvm_sequence 자극 또는 테스트케이스를 정의하는 모든 시퀀스는 이 클래스에서 확장됩니다.
다음 이전

POST ADS 2