1

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

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

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

  1. 甚至在从random_test`uvm_component_utils类构造任何对象之前就在时间 0 调用?
  2. 我们如何`uvm_component_utils在该类定义中传递一个类?

谢谢。

4

2 回答 2

4

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

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

您的课程示例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 
于 2014-02-25T17:12:45.287 回答
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 (...

此致

于 2016-01-20T16:40:52.343 回答