지노랩 /JinoLab

[UVM] 3.12.3 체크 및 커버리지 제어 (Controlling Checks and Coverage) 본문

UVM(Universal Verification Methodology)/3. 재사용 가능한 검증 컴포넌트 개발(Developing Reusabl

[UVM] 3.12.3 체크 및 커버리지 제어 (Controlling Checks and Coverage)

지노랩/JinoLab 2025. 3. 22. 13:12

 

1. 개요

  • 검증 환경에서 체크(checks)와 커버리지(coverage)를 활성화하거나 비활성화할 수 있어야 함.
  • UVM에서는 uvm_config_db 인터페이스를 사용하여 설정 값을 제어할 수 있음.
  • 비트 필드(bit 또는 int)를 활용하여 특정 체크 및 커버리지 수집 기능을 ON/OFF 가능.
  • 예제에서는 checks_enable과 coverage_enable 필드를 사용하여 모니터링 기능을 제어하는 방법을 설명.

2. 체크 기능 제어

(1) checks_enable을 사용한 체크 기능 ON/OFF

  • 체크 기능이 필요할 경우 실행하고, 그렇지 않으면 실행하지 않도록 설정 가능.
  • 해당 설정은 uvm_config_db를 통해 조정 가능.

예제: checks_enable을 이용한 체크 기능 제어

class master_monitor extends uvm_monitor;
  bit checks_enable = 1; // 기본값: 체크 활성화

  `uvm_component_utils_begin(master_monitor)
    `uvm_field_int(checks_enable, UVM_ALL_ON)
  `uvm_component_utils_end

  virtual protected task collect_transactions();
    forever begin
      @(posedge xmi.sig_clock);
      ... // 신호 수집
      if (checks_enable)  // 체크 활성화 여부 확인
        perform_transfer_checks();
    end
  endtask

  virtual protected function void perform_transfer_checks();
    `uvm_info("MONITOR", "Transfer checks are being performed", UVM_MEDIUM);
    // 실제 체크 코드 추가
  endfunction
endclass

설명

  • checks_enable 필드를 bit 타입으로 선언하여 체크 기능을 ON/OFF 가능.
  • collect_transactions() 내에서 checks_enable이 1일 때만 perform_transfer_checks() 실행.
  • checks_enable이 0이면 체크 기능이 완전히 비활성화됨.

(2) uvm_config_db를 사용하여 checks_enable 값 변경

  • 테스트 환경에서 특정 모니터의 체크 기능을 OFF로 설정 가능.

예제: 특정 모니터(master0.monitor)의 체크 기능 OFF

uvm_config_db#(int)::set(this, "masters[0].monitor", "checks_enable", 0);

설명

  • "masters[0].monitor" 경로를 따라 checks_enable 값을 0으로 설정.
  • 이를 통해 "masters[0].monitor"의 체크 기능을 비활성화함.

3. 커버리지 기능 제어

(1) coverage_enable을 사용한 커버리지 기능 ON/OFF

  • 커버리지 수집 기능을 필요에 따라 활성화 또는 비활성화 가능.
  • 기본적으로 커버리지를 활성화하고, 특정 테스트에서만 비활성화할 수도 있음.

예제: coverage_enable을 이용한 커버리지 기능 제어

class master_monitor extends uvm_monitor;
  bit coverage_enable = 1; // 기본값: 커버리지 활성화

  `uvm_component_utils_begin(master_monitor)
    `uvm_field_int(coverage_enable, UVM_ALL_ON)
  `uvm_component_utils_end

  covergroup cov_trans;
    option.per_instance = 1;
    // 커버리지 포인트 정의
    coverpoint trans_collected.addr;
    coverpoint trans_collected.data;
  endgroup

  function new(string name, uvm_component parent);
    super.new(name, parent);
    cov_trans = new();
  endfunction

  virtual protected task collect_transactions();
    forever begin
      @(posedge xmi.sig_clock);
      ... // 신호 수집
      if (coverage_enable) // 커버리지 활성화 여부 확인
        cov_trans.sample();
    end
  endtask
endclass

설명

  • coverage_enable 비트 필드를 선언하여 커버리지 기능을 활성화/비활성화 가능.
  • collect_transactions()에서 coverage_enable 값이 1일 때만 cov_trans.sample() 실행.

(2) uvm_config_db를 사용하여 coverage_enable 값 변경

  • 테스트 환경에서 특정 모니터의 커버리지 기능을 OFF로 설정 가능.

예제: 특정 모니터(master0.monitor)의 커버리지 기능 OFF

uvm_config_db#(int)::set(this, "masters[0].monitor", "coverage_enable", 0);

설명

  • "masters[0].monitor" 경로를 따라 coverage_enable 값을 0으로 설정.
  • "masters[0].monitor"의 커버리지 수집 기능이 비활성화됨.

4. 체크 및 커버리지 기능을 테스트 수준에서 설정하는 방법

  • 테스트(uvm_test) 클래스에서 체크 및 커버리지 기능을 설정 가능.
  • 이를 통해 개별 테스트마다 체크 및 커버리지 활성화 여부를 다르게 설정 가능.

예제: base_test에서 체크 및 커버리지 설정

class base_test extends uvm_test;
  `uvm_component_utils(base_test)

  function new(string name = "base_test", uvm_component parent);
    super.new(name, parent);
  endfunction

  virtual function void build_phase(uvm_phase phase);
    super.build_phase(phase);

    // 체크 비활성화
    uvm_config_db#(int)::set(this, "masters[0].monitor", "checks_enable", 0);

    // 커버리지 비활성화
    uvm_config_db#(int)::set(this, "masters[0].monitor", "coverage_enable", 0);
  endfunction
endclass

설명

  • 테스트 환경에서 특정 에이전트의 모니터링 기능을 제어할 수 있도록 설정.
  • build_phase()에서 uvm_config_db를 이용하여 checks_enable과 coverage_enable 값을 변경 가능.

5. 요약

체크 및 커버리지를 제어할 수 있도록 checks_enable과 coverage_enable을 비트 필드로 선언.
uvm_config_db를 활용하여 특정 컴포넌트의 체크 및 커버리지 기능을 개별적으로 ON/OFF 가능.
테스트(uvm_test) 환경에서 설정을 조정하여 테스트마다 체크 및 커버리지 기능을 다르게 설정 가능.
이러한 방식으로 필요할 때만 체크 및 커버리지를 활성화하여 시뮬레이션 성능을 최적화 가능.

 

 

 


 

본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.