factory機制的本質是什么?
factory機制本質是 對SystemVerilog中new函數的重載 ,其帶來了如下好處:
- 提供新的創建實例的方法:根據類名創建這個類的一個實例。
- 提供 重載過程控制函數 ,使得重載更加靈活,代碼復用性更方便。
- 應用:通過重載transaction、sequence或component,復用原有代碼,快速創建新測試用例。
factory機制式的重載的過程
// src/ch8/section8.2/8.2.1/correct/my_case0.sv
function void my_case0::print_hungry(bird b_ptr);
b_ptr.hungry();
b_ptr.hungry2();
endfunction
...
function void my_case0::build_phase(uvm_phase phase);
bird bird_inst;
super.build_phase(phase);
set_type_override_by_type(bird::get_type(), parrot::get_type());
bird_inst = bird::type_id::create("bird_inst");
print_hungry(bird_inst);
endfunction
// 打印結果如下:
// "I am a parrot, I am hungry" // virtual函數
// "I am a bird, I am hungry2"
解釋如下:
- 第13行進行例化時,由于前面set_type_override_by_type描述了bird到parrot的重載記錄,所以bird_inst對應的實例化對象為parrot類型。
- 第14行將bird_inst傳遞給print_hungry函數時,會被 轉換為函數形參bird類型的b_ptr ,所以
- 執行第3行的b_ptr.hungry();時,由于hungry是 virtual修飾的函數,所以會被重載 ,執行parrot類中的hungry,打印 "I am a parrot, I am hungry"
- 執行第4行的b_ptr.hungry2();時,由于hungry2未被virtual修飾,所以不會重載,執行bird類中的hungry2,打印 "I am a bird, I am hungry2"
factory機制式復雜的重載
UVM支持連續的重載
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(parrot::get_type(), big_parrot::get_type());
注意:調用virtual函數/任務時,會查詢這兩條記錄后,所以經過連續重載bird中調用的virtual函數最后會調用big_parrot中對應函數
替換式的重載:后者的重載記錄會替換前者的重載記錄
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(bird::get_type(), sparrow::get_type());
注意:這里是否替換重載記錄可以通過set_type_override_by_type的第三個參數控制,默認情況為1
- 為1時,存在對同一 被重載的類型 的重載記錄時,會用當前重載記錄 覆蓋 前面的重載記錄
- 為0時,存在對同一 被仲裁的類型 的重載記錄時,不會 用當前重載記錄 覆蓋 前面的重載記錄
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
UVM
+關注
關注
0文章
181瀏覽量
19139 -
SRC
+關注
關注
0文章
60瀏覽量
17961
發布評論請先 登錄
相關推薦
factory demo編譯報錯的原因?
sdkconfig \'F:/01_ESP_STM_PRJ/ESP32/ESP-BOX/esp-box-master/examples/factory_demo/sdkconfig
發表于 06-27 06:43
關于C++中的函數重載機制
函數重載是C++的新增機制,是在同一個作用域中能聲明定義多個同名字的函數.(我們知道函數的名字是函數代碼塊的起始地址,這個首地址能夠將函數的控制權轉移給這個代碼塊的區域).在定義多個同名函數的時候
發表于 10-01 17:18
IC驗證"UVM驗證平臺加入factory機制"(六)
加入factory機制 上一節《IC驗證"一個簡單的UVM驗證平臺"是如何搭建的(五)》給出了一個只有driver、使用UVM搭建的驗證平臺。嚴格來說這根本就不算是UVM驗證
發表于 12-08 12:07
IC驗證“UVM驗證平臺加入objection機制和virtual interface機制“(七)
在上一節中,**《IC驗證"UVM驗證平臺加入factory機制"(六)》**雖然輸出了“main_phase is called”,但是“data is drived”并沒有
發表于 12-09 18:28
深入了解Factory機制的實現方式
的create_object函數完成實例化。簡而言之,整個利用Factory機制實例化對象的過程實際上是在代理和工廠之間繞了一圈,我們通過代理提交實例化請求,代理會將該請求發給工廠,工廠找到重
發表于 09-16 14:35
編譯出廠工程(factory_demo)失敗的原因?
系統:win10 64位 企業版idf用的v4.4 release已經按照README應用了補丁.編譯到最后link階段就報錯了[1466/1468] Linking CXX executable factory_demo.elfFAILED: factory_demo.
發表于 03-09 07:42
MAX9491 pdf datasheet (Factory
factory-programmablePLL output that can be set to almost any frequency,ranging from 4MHz to 200MHz. The MAX9491 uses aone-time-pro
發表于 10-22 21:49
?18次下載
基于Proxy Factory 的WSRF服務調度與監控
以WS-Resource 工廠模式和EPR 的可傳遞性為基礎,提出一種Web 服務資源框架(WSRF)服務調度和資源監控的機制。通過建立Proxy Factory 服務,在代替客戶端創建資源實例,并在進行端點引用
發表于 03-20 17:16
?20次下載
LM26NV,datasheet,pdf(Factory P
reference, DAC, temperaturesensor and comparator. Utilizing factory programming,it can be manufactured with different trip points as
發表于 10-20 14:51
?19次下載
LM26,datasheet,pdf(Factory Pre
reference, DAC, temperaturesensor and comparator. Utilizing factory programming, it canbe manufactured with different trip points as w
發表于 10-20 14:53
?27次下載
Lip Factory推AI算法為顧客定制口紅
據外媒報道,很多女性有過在選擇唇膏色號時猶豫不決的經歷。Lip Factory則使用人工智能來確定--并為每個客戶創建“最佳”的唇膏色號。Lip Factory系統將這一概念發揮到了極致,通過現場創建客戶特定的口紅。
MAX22005: 12-Channel Factory-Calibrated Configurable Industrial-Analog Input Data Sheet MAX22005: 12-Channel Factory-Calibrated Configurable
電子發燒友網為你提供ADI(ADI)MAX22005: 12-Channel Factory-Calibrated Configurable Industrial-Analog Input Data
發表于 10-16 19:14
評論