2014-02-25 314 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 (... 

問候