2014-02-25 234 views
1

我很困惑与用于与工厂登记UVM测试以下SystemVerilog的构造:的SystemVerilog:注册UVM测试与工厂

class random_test extends uvm_test; 
    `uvm_component_utils(random_test); 
    ... 
    function new (... 

在这里,我们有一流的random_test的定义,以及内部定义我们调用一个方法,而它的参数是正在定义的类。 因此,这里是我的问题:

  1. `uvm_component_utils在0时被调用的任何对象,构建了random_test类偶数过吗?
  2. 如何在类定义中将类传递给`uvm_component_utils

谢谢。

回答

4

`uvm_component_utils不是一种方法,它是在编译时评估的宏。

您可以看到宏在UVM源代码中的作用。在UVM分布中查看src/macros/uvm_object_defines.svh

您的random_test类的例子将扩大到这样的事情:

typedef uvm_component_registry #(random_test,"random_test") type_id; 
static function type_id get_type(); 
    return type_id::get(); 
endfunction 
virtual function uvm_object_wrapper get_object_type(); 
    return type_id::get(); 
endfunction const static string type_name = "random_test"; 
virtual function string get_type_name(); 
    return type_name; 
endfunction 
0

我正在学习UVM,建设一些测试,并有同样的错误。经过一段时间的搜索,我发现了一个细节,也就是你的代码。

在:

class random_test extends uvm_test; 
`uvm_component_utils(random_test); 
... 
function new (... 

我们不需要uvm_component_utils后`分号(random_test)

所以,正确的代码是:

class random_test extends uvm_test; 
`uvm_component_utils(random_test) 
... 
function new (... 

问候