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文章
181瀏覽量
19087 -
sequence
+關注
關注
0文章
23瀏覽量
2820
發布評論請先 登錄
相關推薦
評論