본문 바로가기

UVM

[UVM] uvm_config_db 관련 uvm에서 처음 접했을대 낯선것중에 하나가 uvm_config_db라는 구문입니다. 이것의 주요특징들은 아래와 같습니다. 돌아다니는 uvm 기본 예제들을 보면, 이것은 주로 interface를 만들어서 이것을 uvm_config_db로 각각의 agent, driver, monitor등에 일괄적으로 설정하는 예제들을 많이 볼수 있습니다. 이번글에서는 이 uvm_config_db를 왜 사용하는지랑 어떻게 해야 이것을 잘 쓸 수 있는지 적어 보려고 합니다. 먼저, 왜 uvm_config_db인지인데요, 이것은 uvm자체가 object기반이기때문에, object내부에서는 각각의 변수들을 관리하기가 그나마 낫지만, object가 부모라든지, 서로 관련 접점이 없다고 하면, access가 쉽지 않습니다. 그래서 이.. 더보기
[UVM] Agent 에이전트는 드라이버, 모니터, 그리고 시퀀서 세 가지 주요 구성 요소로 이루어져 있다. 활성 모드에서는 시퀀서와 드라이버가 구성되고, 시퀀서를 통해 드라이버에 시퀀스 아이템을 전달하여 자극이 생성된다. 동시에 모니터는 핀 레벨 활동을 분석 트랜잭션으로 조립한다. 반면에 수동 모드에서는 오직 모니터만 구성되며, 이는 Active Agent와 같은 기능을 수행한다. 따라서 Passive Agent에서는 시퀀서가 필요 없다. 에이전트의 필요성에 대해 말하자면, 이는 필수적인 요소라기보다는 복잡성을 줄이고 재사용성을 높이는 도구로 볼 수 있다. 에이전트를 사용하지 않으면 환경 수준에서 개별 인스턴스화를 해야 하는데, 이는 불필요하게 복잡하게 만들 수 있다. 따라서 검증 환경에서 에이전트를 사용하지 않는 것은 드.. 더보기
[UVM] Drivers UVM Driver는 testbench에서 Transaction을 전송하는 형태이다. UVM Driver의 예제코드들은 대부분 아래와 같이 사용된다. 여기에 짝으로 UVM Monitor등을 달아서 트랜잭션이 제대로 전달되었는지를 확인한다. 이것 처음보다보면, 왜 이 지점에서 이런것들이 나오는지 이해하기가 쉽지 않은 면이 있다. 갑자기 uvm_config_db가 나오는 것도 그렇고, build_phase라든지, run_phase라든지, 처음보는 입장에서는 맥락없는 장치들이 다수 있다. 이것들은 UVM으로 merge되기전에 OVM이라든지 VMM이라든지 각 회사들의 철학이 녹아들어있던것을 UVM으로 merge하다보니 몇몇 부분에서는 설명이 메뉴얼에도 없고, 잘안되어 있는 부분들이 존재한다. 그래서 일단은 익숙.. 더보기
UVM Tests (테스트 시나리오) uvm_tests는 가장 최상단에 위치한 class로, 여기서부터 다른것들을 호출한다고 보면된다. 아래와 같이 basic_test 라는 것을 한번 보도록 하자, class basic_test extends uvm_test; `uvm_component_utils(basic_test) virtual interface apb_if apb_vif; function new (string name, uvm_component parent); super.new(name, parent); if (!uvm_config_db #(virtual interface apb_if)::get(null, "*", "apb_vif", apv_vif)) $fatal("Failed to get apb if"); endfunction end.. 더보기