UVM原始碼學習 uvm registry

2021-10-12 02:49:47 字數 1366 閱讀 5674

如果對每個factory註冊的component/object都建立其實例,記憶體、**/編譯的開銷會很大。為了減小這種開銷,可以採用uvm_registry對factory註冊的componnet/object類建立乙個輕量級的**(僅含有get/get_type/get_type_name等方法),只有使用到該component/object時才手動建立其實例(type_name::type_id::create(name,parent),只有使用uvm_component_utils這類巨集註冊的才能使用type_name:;type_id::create,type_def直接定義的沒有type_id)。

序號方法描述1

create_component

建立component

2create_object

建立object

3get_type_name

返回type_name

4get

呼叫uvm_object的get,若get()為null,factory.register()並返回

5create

呼叫factory的create_component_by_type來例項化類。只有使用uvm factory機制註冊的類才能使用type_name::type_id::create的方式進行例項化

6set_type_override

呼叫了factory的set_type_override_by_type

7set_inst_override

呼叫了factory的set_inst_override_by_type

可以採用以下方法來註冊component**:

type_def uvm_component_registry #(mycomp, 「mycomp」) type_id;
不同**器實現方法或存在不同,常用方法是採用以下巨集:

`uvm_component_utils

(mycomp)

//非引數化的類

`uvm_component_param_utils

(mycomp, #(t)

)// 引數化的類:

對於引數化的類,由於傳進來的type_name不固定,因而採用uvm_component_param_utils及uvm_object_param_utils巨集註冊引數化類的時候,沒有實現get_type_name的方法,即採用以上兩個巨集註冊的引數化的類不能使用get_type_name。引數化的類本意是通過傳入引數消除多個type_name相同的類之間的干擾,因而不建議通過type_name在uvm_factory中查詢相關類。

UVM原始碼學習 uvm queue

uvm queue從uvm object擴充套件而來,是對sv queue的擴充套件。sv中,佇列queue有以下幾種方法 假設已定義int q q.push back a 元素a壓入隊尾 q.push front a 元素a壓入隊首 q.pop front 彈出隊首元素 q.pop back 彈出...

UVM原始碼學習 uvm misc

uvm misc,uvm雜貨鋪,定義了uvm用到但不好歸類的雜散的task function class。uvm void,基類,所有uvm類都直接或間接擴充套件自uvm void。uvm void中沒有任何成員變數或方法,是個抽象類,其作用與c語言中的void相似。uvm scope stack,...

UVM原始碼學習 uvm barrier

uvm barrier直接擴充套件自uvm object,提供多程序間的同步機制。簡單講就是使用者設定乙個閾值,每個等待同步的程序在執行完之後進入wait for等待事假觸發,當進入wait for的程序數達到閾值時觸發該事件,所有等待同步的程序跳出wait for繼續執行,從而實現多個程序的同步。...