0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

factory機(jī)制的本質(zhì)是什么?factory機(jī)制式的重載的過(guò)程

冬至子 ? 來(lái)源:多讀點(diǎn)書 ? 作者:夕文x ? 2023-05-26 14:55 ? 次閱讀

factory機(jī)制的本質(zhì)是什么?

factory機(jī)制本質(zhì)是 對(duì)SystemVerilog中new函數(shù)的重載 ,其帶來(lái)了如下好處:

  • 提供新的創(chuàng)建實(shí)例的方法:根據(jù)類名創(chuàng)建這個(gè)類的一個(gè)實(shí)例。
    • 應(yīng)用:根據(jù)run_test的參數(shù)AAA創(chuàng)建了一個(gè)AAA的實(shí)例
  • 提供 重載過(guò)程控制函數(shù) ,使得重載更加靈活,代碼復(fù)用性更方便。
    • 應(yīng)用:通過(guò)重載transaction、sequence或component,復(fù)用原有代碼,快速創(chuàng)建新測(cè)試用例。

factory機(jī)制式的重載的過(guò)程

圖片

// 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)過(guò)連續(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());

注意:這里是否替換重載記錄可以通過(guò)set_type_override_by_type的第三個(gè)參數(shù)控制,默認(rèn)情況為1

  • 為1時(shí),存在對(duì)同一 被重載的類型 的重載記錄時(shí),會(huì)用當(dāng)前重載記錄 覆蓋 前面的重載記錄
  • 為0時(shí),存在對(duì)同一 被仲裁的類型 的重載記錄時(shí),不會(huì) 用當(dāng)前重載記錄 覆蓋 前面的重載記錄
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    19086
  • SRC
    SRC
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    17901
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    factory demo編譯報(bào)錯(cuò)的原因?

    sdkconfig \'F:/01_ESP_STM_PRJ/ESP32/ESP-BOX/esp-box-master/examples/factory_demo/sdkconfig
    發(fā)表于 06-27 06:43

    關(guān)于C++中的函數(shù)重載機(jī)制

    函數(shù)重載是C++的新增機(jī)制,是在同一個(gè)作用域中能聲明定義多個(gè)同名字的函數(shù).(我們知道函數(shù)的名字是函數(shù)代碼塊的起始地址,這個(gè)首地址能夠?qū)⒑瘮?shù)的控制權(quán)轉(zhuǎn)移給這個(gè)代碼塊的區(qū)域).在定義多個(gè)同名函數(shù)的時(shí)候
    發(fā)表于 10-01 17:18

    IC驗(yàn)證"UVM驗(yàn)證平臺(tái)加入factory機(jī)制"(六)

      加入factory機(jī)制 上一節(jié)《IC驗(yàn)證"一個(gè)簡(jiǎn)單的UVM驗(yàn)證平臺(tái)"是如何搭建的(五)》給出了一個(gè)只有driver、使用UVM搭建的驗(yàn)證平臺(tái)。嚴(yán)格來(lái)說(shuō)這根本就不算是UVM驗(yàn)證
    發(fā)表于 12-08 12:07

    IC驗(yàn)證“UVM驗(yàn)證平臺(tái)加入objection機(jī)制和virtual interface機(jī)制“(七)

    在上一節(jié)中,**《IC驗(yàn)證"UVM驗(yàn)證平臺(tái)加入factory機(jī)制"(六)》**雖然輸出了“main_phase is called”,但是“data is drived”并沒有
    發(fā)表于 12-09 18:28

    深入了解Factory機(jī)制的實(shí)現(xiàn)方式

    的create_object函數(shù)完成實(shí)例化。簡(jiǎn)而言之,整個(gè)利用Factory機(jī)制實(shí)例化對(duì)象的過(guò)程實(shí)際上是在代理和工廠之間繞了一圈,我們通過(guò)代理提交實(shí)例化請(qǐng)求,代理會(huì)將該請(qǐng)求發(fā)給工廠,工廠找到
    發(fā)表于 09-16 14:35

    編譯出廠工程(factory_demo)失敗的原因?

    系統(tǒng):win10 64位 企業(yè)版idf用的v4.4 release已經(jīng)按照README應(yīng)用了補(bǔ)丁.編譯到最后link階段就報(bào)錯(cuò)了[1466/1468] Linking CXX executable factory_demo.elfFAILED: factory_demo.
    發(fā)表于 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
    發(fā)表于 10-22 21:49 ?18次下載

    基于Proxy Factory 的WSRF服務(wù)調(diào)度與監(jiān)控

    以WS-Resource 工廠模式和EPR 的可傳遞性為基礎(chǔ),提出一種Web 服務(wù)資源框架(WSRF)服務(wù)調(diào)度和資源監(jiān)控的機(jī)制。通過(guò)建立Proxy Factory 服務(wù),在代替客戶端創(chuàng)建資源實(shí)例,并在進(jìn)行端點(diǎn)引用
    發(fā)表于 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
    發(fā)表于 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
    發(fā)表于 10-20 14:53 ?27次下載

    機(jī)制式類型

    機(jī)制式類型     &n
    發(fā)表于 12-19 10:08 ?462次閱讀

    機(jī)制式

    機(jī)制式              目前,手機(jī)制式主要包括GSM、CDMA、3G三種,手機(jī)自問(wèn)世至今,經(jīng)歷了第一代模擬制式手機(jī)(
    發(fā)表于 12-31 11:19 ?447次閱讀

    什么是手機(jī)制式

    什么是手機(jī)制式     目前,全球手機(jī)制式主要包括GSM、CDMA、3G三種,手機(jī)自問(wèn)世至今,經(jīng)歷了第一代模擬制式手機(jī)(1G
    發(fā)表于 01-28 10:20 ?368次閱讀

    Lip Factory推AI算法為顧客定制口紅

    據(jù)外媒報(bào)道,很多女性有過(guò)在選擇唇膏色號(hào)時(shí)猶豫不決的經(jīng)歷。Lip Factory則使用人工智能來(lái)確定--并為每個(gè)客戶創(chuàng)建“最佳”的唇膏色號(hào)。Lip Factory系統(tǒng)將這一概念發(fā)揮到了極致,通過(guò)現(xiàn)場(chǎng)創(chuàng)建客戶特定的口紅。
    的頭像 發(fā)表于 01-06 11:38 ?1243次閱讀

    MAX22005: 12-Channel Factory-Calibrated Configurable Industrial-Analog Input Data Sheet MAX22005: 12-Channel Factory-Calibrated Configurable

    電子發(fā)燒友網(wǎng)為你提供ADI(ADI)MAX22005: 12-Channel Factory-Calibrated Configurable Industrial-Analog Input Data
    發(fā)表于 10-16 19:14
    MAX22005: 12-Channel <b class='flag-5'>Factory</b>-Calibrated Configurable Industrial-Analog Input Data Sheet MAX22005: 12-Channel <b class='flag-5'>Factory</b>-Calibrated Configurable