uvm_sequence_library是從uvm_sequence擴展而來的,它是一個容納了一系列其它sequences類型的容器,在啟動時,它會根據模式從這系列sequences中選擇并執行它們。
如果處于UVM_SEQ_LIB_RAND模式,它的select_rand屬性將會隨機并作為選擇sequences的索引。
如果處于UVM_SEQ_LIB_RANDC模式,它的selec_randc屬性將會隨機并作為索引。
如果處于UVM_SEQ_LIB_ITEM模式,僅生成并執行REQ類型的sequence items。
如果處于UVM_SEQ_LIB_USER模式時,select_sequence()方法用來獲取下一個執行sequence的索引,用戶可以在子類中overwrite這個方法來實現自定義的選擇算法。
既然uvm_sequence_library是一系列sequences類型的集合,那么如何將sequences類型添加或注冊到sequence library里呢?UVM提供兩類方式:全局方式和私有方式。
1. 全局方式
全局方式添加到uvm_sequence_library的sequences類型會被該類的所有實例(instances)選擇,也就是所有實例里都會注冊了這些sequences類型。與這功能相關的函數和變量有:
從上述變量和函數可以看出,UVM是利用systemverilog的static機制來實現全局注冊方式,sequences類型必須在sequence library被創建之前都注冊進去。
需要注意的是,要用這種方式,在創建sequence library的子類時,必須需要在其聲明中調用uvm_sequence_library_utils宏,并在其構造函數中調用init_sequence_library()方法。
另外,全局的注冊方式也可以使用uvm_add_to_seq_lib(TYPE,LIBTYPE)宏來完成。
2. 私有方式
私有方式添加到uvm_sequence_library的sequences類型會被該類的每個實例(instances)獨享,也就是每個實例注冊的sequences類型互不影響。與這功能相關的函數和變量有:
從上述變量和函數可以看出,它們都不是static的,也就是必須要等sequence library創建出實例后,才能注冊到實例里,因此每個實例注冊的sequences類型可以互不影響了。
3. 總結
這兩種方式都有自己的使用場景,如果想讓所有sequence library的實例都有的sequence類型,那么使用全局方式會更方便點。
如果想讓sequence library的實例想有一些額外的sequence類型,那么私有方式是最好的選擇。下圖總結了注冊的兩種方式以及涉及到的相關變量和函數。
-
UVM
+關注
關注
0文章
182瀏覽量
19228 -
sequence
+關注
關注
0文章
23瀏覽量
2862
發布評論請先 登錄
相關推薦
急急急,如何將modbus library加載到lv的express vis中
如何將兩個或多個相同類型的記錄寫入動態NFC標簽?
請問一下在UVM中的UVMsequences是什么意思啊
如何配置sequence的仲裁算法和優先級及中斷sequence的執行
如何將RAFL添加到我的項目的適當示例和/或文檔?
UVM中seq.start()和default_sequence執行順序
如何將TDM業務添加到WiMAX平臺上
如何將Crosswalk添加到Cordova應用程序中
如何將WizFi360 EVB Mini添加到樹莓派Pico Python
![<b class='flag-5'>如何將</b>WizFi360 EVB Mini<b class='flag-5'>添加</b>到樹莓派Pico Python](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何將Klayout Cell動態導入Lumerical Multiphysics
![<b class='flag-5'>如何將</b>Klayout Cell動態導入Lumerical Multiphysics](https://file1.elecfans.com/web2/M00/BE/AE/wKgaomWuCyyADTvNAAApyulFE8I582.png)
評論