SystemVerilog:在工厂注册UVM测试

时间:2014-02-25 16:07:38

标签: class factory system-verilog uvm

我对以下用于向工厂注册UVM测试的SystemVerilog构造感到困惑:

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

这里我们有一个类random_test的定义,在定义里面我们调用一个方法,而它的参数是被定义的类。 所以这是我的问题:

  1. 甚至在使用random_test类构造任何对象之前,是否在时间0调用`uvm_component_utils
  2. 如何在类定义中将类传递给`uvm_component_utils
  3. 感谢。

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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 (...

最好的问候