【UVM原始碼學習】uvm_registry
如果對每個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)。
uvm_registry.svh 中主要實現了兩個類,uvm_component_registry及uvm_object_registry,分別為component及object的代理類。兩個類均直接派生自uvm_object_wrapper。類中實現的主要方法有:
序號 | 方法 | 描述 |
---|---|---|
1 | create_component | 建立component |
2 | create_object | 建立object |
3 | get_type_name | 返回type_name |
4 | get | 呼叫uvm_object的get,若get()為null,factory.register()並返回 |
5 | create | 呼叫factory的create_component_by_type來例項化類。只有使用uvm factory機制註冊的類才能使用type_name::type_id::create的方式進行例項化 |
6 | set_type_override | 呼叫了factory的set_type_override_by_type |
7 | set_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學習雜記
- vue原始碼學習Vue原始碼
- MMKV原始碼學習原始碼
- EventBus原始碼學習原始碼
- fishhook原始碼學習Hook原始碼
- 學習HashMap原始碼HashMap原始碼
- koa原始碼學習原始碼
- express原始碼學習Express原始碼
- redis原始碼學習Redis原始碼
- Ember原始碼學習原始碼
- go原始碼學習Go原始碼
- Java容器原始碼學習--ArrayList原始碼分析Java原始碼
- PHP 原始碼加密學習PHP原始碼加密
- Okio 框架原始碼學習框架原始碼
- Vue 原始碼學習(一)Vue原始碼
- Masonry 原始碼學習整理原始碼
- 精讀《原始碼學習》原始碼
- java原始碼學習-SpliteratorJava原始碼
- jQuery原始碼學習之$()jQuery原始碼
- Mybatis 原始碼學習(二)MyBatis原始碼
- java原始碼學習-AbstractSequentialListJava原始碼
- 【原始碼學習】ThreadLocal原始碼thread
- EOS原始碼學習系列原始碼
- ObjectMapper原始碼學習ObjectAPP原始碼
- 來聊聊原始碼學習原始碼
- vue observer 原始碼學習VueServer原始碼
- Dialog原始碼學習原始碼
- 關於原始碼學習原始碼
- VeraCrypt原始碼學習-序原始碼
- 【菜鳥讀原始碼】halo✍原始碼學習 (一)原始碼
- 學習RadonDB原始碼(二)原始碼
- Go Gin原始碼學習(一)Go原始碼
- Retrofit原始碼學習筆記原始碼筆記
- 學習RadonDB原始碼(一)原始碼
- goFrame 原始碼學習之 ServerGoFrame原始碼Server
- jQuery原始碼學習之eventjQuery原始碼
- YYImage原始碼剖析與學習原始碼
- 原始碼學習VUE之Observe原始碼Vue