테스트 환경에서 사용할 수있는 일반적인 작업과 기능이 포함 된 패키지를 작성하려고합니다. 예를 들어 ,패키지에서 가상 인터페이스를 한 번만 가져옵니다.
package test_misc_pkg;
`include "uvm_macros.svh"
import uvm_pkg::*;
task wait_rest();
virtual test_if test_vif;
if (!uvm_config_db #(virtual test_if)::get(null, "uvm_test_top.env", "test_vif", test_vif))
`uvm_fatal("NOVIF", "virtual interface should be set")
@(posedge test_vif.clk);
//do something...
endtask
endpackage : test_misc_pkg
그런 다음, 테스트 ENV는 wait_rest() 후 수입 test_misc_pkg를 호출 할 수 있습니다.
하지만 다른 작업에서 동일한 test_vif를 사용하는 경우 모든 작업을 시작할 때 db를 가져와야합니다. 제 질문은 패키지에서 uvm_config_db를 한 번만 가져올 수 있습니다. 모든 작업에서 test_vif를 직접 사용할 수 있습니까?
아니면 더 좋은 방법이 있을까요?
감사합니다. 글로벌 가상 인터페이스에게 가치를 제공하기 위해 (예를 들어 set_vif()
)
package test_misc_pkg;
`include "uvm_macros.svh"
import uvm_pkg::*;
virtual test_if test_vif;
function void set_vif();
if (!uvm_config_db #(virtual test_if)::get(null, "uvm_test_top.env", "test_vif", test_vif))
`uvm_fatal("NOVIF", "virtual interface should be set")
endfunction
task wait_rest();
@(posedge test_vif.clk);
//do something...
endtask
endpackage : test_misc_pkg
와는 함수를 작성 :
예, 불필요한 uvm_config_db :: get()을 줄이고 코드를 깨끗하게 유지하려고합니다. 어쩌면 변수를 검사하기위한 하위 작업을 작성할 수도 있고, 사용하기 전에 모든 작업에 넣을 수도 있습니다. 귀하의 의견에 감사드립니다. – DexterH