RUN_TEST는 테스트 케이스를 실행하는 uvm_root 클래스의 RUN_TEST 함수를 호출 도우미 전역 함수입니다. 함수에 테스트 이름을 전달할 수있는 두 가지 방법이 있습니다. 첫 번째는 함수 인수를 사용하고 두 번째는 명령 줄 인수를 통해 수행합니다. 명령 행 인수는 함수 인수를 통해 전달 된 테스트 이름보다 우선합니다.
+UVM_TESTNAME=YOUR_TEST_NAME
run_test("YOUR_TEST_NAME");
uvm_root에
RUN_TEST 함수 umm_test 클래스의 해당 인스턴스를 생성하는 공장 메커니즘을 사용하고 있으므로 상기 테스트 케이스가 작동하는 공장 메커니즘 (create_component_by_name)를 매크로`uvm_component_utils을 이용한 공장 자체를 등록해야 .
class YOUR_TEST_NAME extends umm_test ;
// register the class with the factory
// so that run_test can find this class when the
// string test_name is passed to it.
`uvm_component_utils(YOUR_TEST_NAME)
.....
endclass
run_test 함수는 uvm_phases (.., build_phase, connect_phase ...)를 실행합니다.) 시뮬레이션의 uvm 부분을 시작합니다. run_phase가 시작되기 전에 시간 틱이 소비되지 않아야하므로 run_test 대소 문자가 초기 블록 자체에서 호출되어야합니다. 또한 우리는 uvm과 테스트 벤치가 RTL이 준비되는 즉시 데이터를 운전하고 수신 할 준비가되어 있어야합니다.이 테스트를 위해 우리는 가장 빨리 run_test를 시작해야합니다. 이 작업을 지연하면 오류가 발생합니다.
`uvm_field_int/uvm_field_object/.. 필드 자동화 매크로라고합니다. 클래스 정의에서 필수는 아니며 uvm_object의 많은 공통/일상적인 기능을 쉽게 사용할 수 있도록 도우미 매크로로 제공됩니다. uvm_object의 thse 함수의 예는 - copy, compare, pack, unpack, print 등이며이 매크로는 이러한 함수를 자동으로 사용하는 코드를 생성합니다.
uvm_object 공통 함수를 사용하지 않는 경우 클래스 정의에서이 매크로를 제외해도 오류가 발생하지 않습니다. 일반적인 작업의 버전을 구현 한 경우 클래스에서이 매크로를 제외 할 수도 있습니다.
UVM_ALL_ON - 특정 필드에 대해 compare/copy/...와 같은 모든 기능을 구현할 수 있습니다. 예에
링크 - uvm_object가 동일 클래스의 두 인스턴스를 비교하고 클래스의 모든 변수가 동일한 경우 true를 돌려 비교하는 기능을 갖고, 예를 들어 http://www.testbench.in/UT_04_UVM_TRANSACTION.html
.
virtual function bit do_compare(uvm_object rhs, uvm_comparer comparer);
.....
// return 1 if all the variables match
return (super.do_compare(rhs, comparer) &&
this.var_1 == rhs.var_1 &&
this.var_2 == rhs.var_2 &&
......
this.var_n == rhs.var_n);
endfunction: do_compare
// use in main code
if (new_class.compare(old_classs))
...
//instead of
if (new_class.var1 == old_class.var1 && new_class.var2 == old_class.var2 && ... new_class.varn == old_class.varn)
...
위의 비교는 각 클래스에 대해 작성되어야하며 클래스에 추가 된 모든 새 변수에 대해 업데이트되고 유지되어야합니다. 새로운 변수가 추가되면 오류가 발생할 수 있습니다. uvm_object가 제공하는 모든 표준 함수에 대해 유사한 프로세스를 따라야합니다.
필드 자동화 매크로는 이러한 모든 기능을 자동으로 처리하는 기능을 생성합니다. 매크로를 사용하여 클래스에 대해 do_print를 수행하면 명시 적으로 코드를 작성하지 않고 모든 필드가 인쇄됩니다. 그들이 클래스에 코드의 상당 금액을 추가로
// compare/print/.. functions for class simpleadder_transaction are provided by using `uvm_field_int macro.
`uvm_object_utils_begin(simpleadder_transaction)
`uvm_field_int(ina, UVM_ALL_ON)
`uvm_object_utils_end
하지만주의의 단어
,이 매크로의 사용은 권장되지 않습니다.. 이러한 함수의 대부분은 클래스에서 필요하지 않을 수도 있지만 기본적으로 생성됩니다.