본문 바로가기

HDL/UVM

[UVM] Agent

반응형

에이전트는 드라이버, 모니터, 그리고 시퀀서 세 가지 주요 구성 요소로 이루어져 있다. 활성 모드에서는 시퀀서와 드라이버가 구성되고, 시퀀서를 통해 드라이버에 시퀀스 아이템을 전달하여 자극이 생성된다. 동시에 모니터는 핀 레벨 활동을 분석 트랜잭션으로 조립한다. 반면에 수동 모드에서는 오직 모니터만 구성되며, 이는 Active Agent와 같은 기능을 수행한다. 따라서 Passive Agent에서는 시퀀서가 필요 없다.

에이전트의 필요성에 대해 말하자면, 이는 필수적인 요소라기보다는 복잡성을 줄이고 재사용성을 높이는 도구로 볼 수 있다. 에이전트를 사용하지 않으면 환경 수준에서 개별 인스턴스화를 해야 하는데, 이는 불필요하게 복잡하게 만들 수 있다. 따라서 검증 환경에서 에이전트를 사용하지 않는 것은 드문 경우다.

다음으로, 테스트 벤치 구조에서는 종종 두 개의 동일한 에이전트가 포함되는 것이 일반적이다. 한 에이전트는 기본 활성 시퀀서-드라이버 쌍을 사용하고, 다른 하나는 is_active 비트를 uvm_passive로 설정하여 시퀀서-드라이버 쌍을 비활성화한다. 두 모니터는 동일하게 작동하며, VIF 신호를 샘플링하여 표준 트랜잭션을 재구성하고, 이를 모니터 분석 포트를 통해 에이전트 분석 포트로 보내고 이를 통해 스코어보드의 양쪽으로 전송한다.

Active Agent는 DUT에 자극을 제공하는 역할을 하고, Passive Agent는 DUT 자체를 모델링하거나 반영하는 역할을 한다. 두 가지 작업은 서로 다른 목적을 가지지만, 기술적으로 두 가지 작업에 동일한 모니터를 사용하는 것에는 문제가 없다. 그러나 이것은 테스트 벤치의 구조를 이해하고 각 부분이 어떤 기능을 수행하는지 직관적으로 파악하는 것이 중요하기 때문에, 명확성을 위해 두 개의 모니터를 사용하는 것이 심리적으로 바람직할 수 있다.

이러한 방식은 벤더에서 제공하는 VIP의 사용자 가이드 문서에서 권장되는 구조로, Active Agent는 핸드셰이크 메커니즘을 가진 인터페이스에서 자극을 구동하고, 동일한 인터페이스에 연결된 Passive Agent는 DUT의 핸드셰이크를 모니터링하여 모든 것이 순서대로 이루어지는지 확인한다. 이 두 모니터는 동일한 데이터를 수집하므로 어느 쪽을 선택하여 스코어 보드에 피드를 제공해도 된다.

 

아래는 Agent의 예제이다. 

// UVM Agent
class simple_agent extends uvm_agent;
   `uvm_component_utils(simple_agent)

   simple_sequencer sequencer;
   simple_driver driver;

   // Constructor
   function new(string name, uvm_component parent);
      super.new(name, parent);
   endfunction

   // Component build phase
   function void build_phase(uvm_phase phase);
      super.build_phase(phase);
      
      // Create sequencer
      sequencer = simple_sequencer::type_id::create("sequencer", this);
      // Create driver
      driver = simple_driver::type_id::create("driver", this);
   endfunction

   // Component connect phase
   function void connect_phase(uvm_phase phase);
      super.connect_phase(phase);

      // Connect driver to sequencer
      driver.seq_item_port.connect(sequencer.seq_item_export);
   endfunction
endclass

이 에이전트는 simple_sequencer와 simple_driver 두 개의 하위 컴포넌트를 가지고 있다. 이는 build_phase에서 생성되며, connect_phase에서 연결된다



 

 

반응형

'HDL > UVM' 카테고리의 다른 글

[UVM] uvm_config_db 관련  (0) 2023.09.15
[UVM] Drivers  (0) 2023.07.18
[UVM] virtual sequencer를 사용하는 목적  (0) 2023.07.17
UVM Tests (테스트 시나리오)  (0) 2019.12.24