亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

factory機制怎么實現

發布時間:2021-12-30 15:38:57 來源:億速云 閱讀:132 作者:iii 欄目:互聯網科技

本篇內容介紹了“factory機制怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    factory其實就是一個宏,當設計set_override等操作時,才有必要去理解factory機制的原理。factory機制更多的是體現在內部編程應用上,它為眾多其他機制的實現提供了可能。換句話說,factory機制是UVM的內功,那么UVM的外功自然就是field automation機制。

1.UVM認證

    在定義一個類時,UVM強烈建議使用uvm_component_utils或uvm_object_utils宏來注冊。UVM就知道我們定義了一個類:

class A extends uvm_component;

`uvm_component_utils(A)

....

endclass

    當使用上述代碼注冊A后,那么要創建一個A的實例可以這樣做:

A a;

a = A::type_id::create(“a”,this);

    假設前面你的A沒有使用uvm_component_utils實例化,那么A實例化只要使用這種方式:

A a;

a = new(“a”,this);

    這種想法看上去比上一種法子更簡單一些,不過上一種法子才是UVM推薦的。使用UVM認證的方式實例化,可以使用UVM的眾多功能,而后者不行。

2.override功能

    假設我們已經自己定義了一個my_driver,在跑80%的case的時候,這個driver是足夠使用的,但是在剩余的20%的case中,我們需要對my_driver的行為做出某些改變,這時就可以用到override功能。使用override功能的第一步要先從my_driver派生出一個類,把這個類的行為定義好:

class new_driver extends my_driver;

...

`uvm_component_utils(new_driver)

endclass

    之后,在具體的case的build_case中,調用override相關函數:

class case_x extends base_test;

function void build_phase(uvm_phase phase);

...

set_type_override_by_type(my_driver::get_type(),new driver::get_type());

endfunction

endclass

    經過上述過程之后,那么在跑case_x的時候,系統中運行的my_driver就是new_driver類型的,其行為是new_driver的行為。不過這有一個前提,那就是my_driver在他的agent中實例化的時候,要使用factory的方式實例化。

class my_agent;

my_driver drv;

function void build_phase(uvm_phase phase);

...

drv=my_driver::type_id::create(“drv”,this);

endfunction

endclass

    假如不使用上面的這種寫法,而是使用drv=new(“drv”,this)的寫法進行實例化,那么override功能是不能實現的。

3.factory的本質:重寫了new函數

    有了factory之后,除了可以使用類名創建實例之外,還可以通過一個代表類名字的字符串來進行實例化,除此之外還可以進行override功能。所以從本質上看,factory機制其實是對systemverilog中new函數的重載。因為這個原始的new函數實在是太簡單了,功能太少,經過factory機制的改良之后,進行實例化的方法就多了很多。

“factory機制怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

慈溪市| 郑州市| 顺昌县| 福州市| 改则县| 洛扎县| 新巴尔虎右旗| 揭西县| 长白| 南涧| 湘潭县| 西乌珠穆沁旗| 太湖县| 民勤县| 永春县| 鄂托克前旗| 南漳县| 盐池县| 嘉义县| 巴彦淖尔市| 延安市| 浪卡子县| 海淀区| 手机| 时尚| 麦盖提县| 河北省| 商洛市| 会泽县| 正安县| 商丘市| 安宁市| 新邵县| 阿尔山市| 原平市| 东辽县| 凤山市| 安多县| 巴林右旗| 东阿县| 宁蒗|