factory機(jī)制的本質(zhì)是什么?
factory機(jī)制本質(zhì)是 對(duì)SystemVerilog中new函數(shù)的重載 ,其帶來了如下好處:
- 提供新的創(chuàng)建實(shí)例的方法:根據(jù)類名創(chuàng)建這個(gè)類的一個(gè)實(shí)例。
- 提供 重載過程控制函數(shù) ,使得重載更加靈活,代碼復(fù)用性更方便。
- 應(yīng)用:通過重載transaction、sequence或component,復(fù)用原有代碼,快速創(chuàng)建新測(cè)試用例。
factory機(jī)制式的重載的過程
// 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
// 打印結(jié)果如下:
// "I am a parrot, I am hungry" // virtual函數(shù)
// "I am a bird, I am hungry2"
解釋如下:
- 第13行進(jìn)行例化時(shí),由于前面set_type_override_by_type描述了bird到parrot的重載記錄,所以bird_inst對(duì)應(yīng)的實(shí)例化對(duì)象為parrot類型。
- 第14行將bird_inst傳遞給print_hungry函數(shù)時(shí),會(huì)被 轉(zhuǎn)換為函數(shù)形參bird類型的b_ptr ,所以
- 執(zhí)行第3行的b_ptr.hungry();時(shí),由于hungry是 virtual修飾的函數(shù),所以會(huì)被重載 ,執(zhí)行parrot類中的hungry,打印 "I am a parrot, I am hungry"
- 執(zhí)行第4行的b_ptr.hungry2();時(shí),由于hungry2未被virtual修飾,所以不會(huì)重載,執(zhí)行bird類中的hungry2,打印 "I am a bird, I am hungry2"
factory機(jī)制式復(fù)雜的重載
UVM支持連續(xù)的重載
set_type_override_by_type(bird::get_type(), parrot::get_type());
set_type_override_by_type(parrot::get_type(), big_parrot::get_type());
注意:調(diào)用virtual函數(shù)/任務(wù)時(shí),會(huì)查詢這兩條記錄后,所以經(jīng)過連續(xù)重載bird中調(diào)用的virtual函數(shù)最后會(huì)調(diào)用big_parrot中對(duì)應(yīng)函數(shù)
替換式的重載:后者的重載記錄會(huì)替換前者的重載記錄
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的第三個(gè)參數(shù)控制,默認(rèn)情況為1
- 為1時(shí),存在對(duì)同一 被重載的類型 的重載記錄時(shí),會(huì)用當(dāng)前重載記錄 覆蓋 前面的重載記錄
- 為0時(shí),存在對(duì)同一 被仲裁的類型 的重載記錄時(shí),不會(huì) 用當(dāng)前重載記錄 覆蓋 前面的重載記錄
-
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19228 -
SRC
+關(guān)注
關(guān)注
0文章
61瀏覽量
18049
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論