uvm_sequence_library是從uvm_sequence擴(kuò)展而來(lái)的,它是一個(gè)容納了一系列其它sequences類型的容器,在啟動(dòng)時(shí),它會(huì)根據(jù)模式從這系列sequences中選擇并執(zhí)行它們。
如果處于UVM_SEQ_LIB_RAND模式,它的select_rand屬性將會(huì)隨機(jī)并作為選擇sequences的索引。
如果處于UVM_SEQ_LIB_RANDC模式,它的selec_randc屬性將會(huì)隨機(jī)并作為索引。
如果處于UVM_SEQ_LIB_ITEM模式,僅生成并執(zhí)行REQ類型的sequence items。
如果處于UVM_SEQ_LIB_USER模式時(shí),select_sequence()方法用來(lái)獲取下一個(gè)執(zhí)行sequence的索引,用戶可以在子類中overwrite這個(gè)方法來(lái)實(shí)現(xiàn)自定義的選擇算法。
既然uvm_sequence_library是一系列sequences類型的集合,那么如何將sequences類型添加或注冊(cè)到sequence library里呢?UVM提供兩類方式:全局方式和私有方式。
1. 全局方式
全局方式添加到uvm_sequence_library的sequences類型會(huì)被該類的所有實(shí)例(instances)選擇,也就是所有實(shí)例里都會(huì)注冊(cè)了這些sequences類型。與這功能相關(guān)的函數(shù)和變量有:
從上述變量和函數(shù)可以看出,UVM是利用systemverilog的static機(jī)制來(lái)實(shí)現(xiàn)全局注冊(cè)方式,sequences類型必須在sequence library被創(chuàng)建之前都注冊(cè)進(jìn)去。
需要注意的是,要用這種方式,在創(chuàng)建sequence library的子類時(shí),必須需要在其聲明中調(diào)用uvm_sequence_library_utils宏,并在其構(gòu)造函數(shù)中調(diào)用init_sequence_library()方法。
另外,全局的注冊(cè)方式也可以使用uvm_add_to_seq_lib(TYPE,LIBTYPE)宏來(lái)完成。
2. 私有方式
私有方式添加到uvm_sequence_library的sequences類型會(huì)被該類的每個(gè)實(shí)例(instances)獨(dú)享,也就是每個(gè)實(shí)例注冊(cè)的sequences類型互不影響。與這功能相關(guān)的函數(shù)和變量有:
從上述變量和函數(shù)可以看出,它們都不是static的,也就是必須要等sequence library創(chuàng)建出實(shí)例后,才能注冊(cè)到實(shí)例里,因此每個(gè)實(shí)例注冊(cè)的sequences類型可以互不影響了。
3. 總結(jié)
這兩種方式都有自己的使用場(chǎng)景,如果想讓所有sequence library的實(shí)例都有的sequence類型,那么使用全局方式會(huì)更方便點(diǎn)。
如果想讓sequence library的實(shí)例想有一些額外的sequence類型,那么私有方式是最好的選擇。下圖總結(jié)了注冊(cè)的兩種方式以及涉及到的相關(guān)變量和函數(shù)。
-
UVM
+關(guān)注
關(guān)注
0文章
181瀏覽量
19121 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
2828
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論