Universal Verification Methodology(UVM)는 다양한 컴포넌트 간의 설정 매개변수를 설정하고 가져오는 유연하고 강력한 구성 메커니즘을 제공합니다. 이 가이드에서는 uvm_config_db
를 사용하여 설정 매개변수를 설정하고 가져오는 방법을 예제와 함께 설명합니다.
uvm_config_db
란 무엇인가?
uvm_config_db
는 UVM에서 설정 정보를 중앙 집중식으로 관리할 수 있도록 하는 클래스입니다. 이를 통해 테스트벤치의 다양한 부분이 직접 연결 없이 설정 정보를 공유할 수 있어 모듈화와 재사용성을 높일 수 있습니다.
uvm_config_db
사용 방법
uvm_config_db
를 사용하여 설정 매개변수를 설정(set)하고 가져오는(get) 방법을 알아보겠습니다.
설정 매개변수 설정 예제
먼저, uvm_config_db
를 사용하여 가상 인터페이스(virtual interface)를 설정하는 예제입니다.
class my_env extends uvm_env;
`uvm_component_utils(my_env)
virtual bus_if vif;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
if (!uvm_config_db#(virtual bus_if)::get(this, "", "vif", vif)) begin
`uvm_fatal("NO_VIF", {"Virtual interface must be set for: ", get_full_name(), ".vif"});
end
endfunction
endclass
module top;
import uvm_pkg::*;
virtual bus_if vif;
initial begin
uvm_config_db#(virtual bus_if)::set(null, "my_env", "vif", vif);
run_test("my_env");
end
endmodule
위 코드에서는 uvm_config_db
를 사용하여 my_env
클래스의 vif
설정을 설정하고 있습니다.
설정 매개변수 가져오기 예제
다음은 설정 매개변수를 가져오는 예제입니다.
class my_test extends uvm_test;
`uvm_component_utils(my_test)
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
virtual bus_if vif;
if (!uvm_config_db#(virtual bus_if)::get(this, "", "vif", vif)) begin
`uvm_fatal("NO_VIF", {"Virtual interface must be set for: ", get_full_name(), ".vif"});
end
endfunction
endclass
module top;
import uvm_pkg::*;
virtual bus_if vif;
initial begin
uvm_config_db#(virtual bus_if)::set(null, "my_test", "vif", vif);
run_test("my_test");
end
endmodule
이 예제에서는 uvm_config_db
를 사용하여 my_test
클래스의 vif
설정을 가져오고 있습니다.
uvm_config_db
매개변수 설명
- cntxt (context): 설정이 적용될 범위를 정의합니다. 일반적으로
null
또는 특정 컴포넌트 인스턴스를 지정합니다. - inst_name (instance name): 설정이 적용될 인스턴스의 이름을 정의합니다.
- field_name (field name): 설정할 필드의 이름을 정의합니다.
- value (값): 설정할 값입니다.
결론
uvm_config_db
는 UVM 테스트벤치에서 설정 매개변수를 중앙에서 관리할 수 있게 해주는 강력한 도구입니다. 이를 통해 테스트벤치의 다양한 컴포넌트가 설정 정보를 쉽게 공유하고, 모듈화된 구조를 유지할 수 있습니다. 위의 예제와 설명을 통해 uvm_config_db
를 효과적으로 사용하는 방법을 이해할 수 있습니다.
'IT > ASIC | FPGA' 카테고리의 다른 글
표준 RTL 코드 스타일 - 기본에서 출발하자 (0) | 2024.05.31 |
---|---|
SDC clock group 이해: asynchronous vs exclusive 차이점 (0) | 2024.05.30 |
UVM Error 메시지 출력 - report_phase() in uvm_test (0) | 2024.05.29 |
UVM sequence - 메인함수는 body task (0) | 2024.05.29 |
UVM Factory Pattern - 무슨 디자인 패턴까지.. (0) | 2024.05.29 |