UVM原始碼學習 uvm barrier

2021-10-11 22:42:17 字數 1050 閱讀 8802

uvm_barrier直接擴充套件自uvm_object,提供多程序間的同步機制。簡單講就是使用者設定乙個閾值,每個等待同步的程序在執行完之後進入wait_for等待事假觸發,當進入wait_for的程序數達到閾值時觸發該事件,所有等待同步的程序跳出wait_for繼續執行,從而實現多個程序的同步。uvm_barrier中主要實現了以下方法:

序號方法描述1

new建立並初始化barrier object,auto_reset預設為1

2wait_for

程序等待事件觸發。若已達到閾值且事件已被觸發,直接退出;若等待事件的程序達到閾值且未觸發,則觸發事件;若未達到閾值,呼叫event.wait_trigger等待觸發

3reset

reset barrier,閾值不變,計數器清零。若已有程序進入等待事件,則觸發事件。

4set_auto_reset

設定auto_reset值。預設auto reset,在一次達到閾值之後,繼續進行下一輪,程序進入wait_for後被阻塞;若設定為非auto reset,達到閾值之後接下來的wait_for中不會等待事件觸發而是直接退出,即程序不會阻塞住

5set_threshold

設定要阻塞的程序數目閾值,若當前等待事件觸發的程序數目已經超出此刻所設定的閾值,則呼叫reset barrier

6get_threshold

獲取閾值

7get_num_waiters

獲取當前等待事件觸發的程序數目

8cancel

當前等待事件觸發的程序數目減一,常用於某程序被kill之後

9get_type_name

獲取型別名稱

10do_print

鉤子函式,把threshold、num_waiters、at_threshold、auto_reset等值註冊進field_int,呼叫print時列印這幾個變數的值

11do_copy

copy前的型別轉換

uvm_barrier使用簡介

uvm——同步通訊元件(uvm_event、uvm_barrier)

UVM原始碼學習 uvm queue

uvm queue從uvm object擴充套件而來,是對sv queue的擴充套件。sv中,佇列queue有以下幾種方法 假設已定義int q q.push back a 元素a壓入隊尾 q.push front a 元素a壓入隊首 q.pop front 彈出隊首元素 q.pop back 彈出...

UVM原始碼學習 uvm misc

uvm misc,uvm雜貨鋪,定義了uvm用到但不好歸類的雜散的task function class。uvm void,基類,所有uvm類都直接或間接擴充套件自uvm void。uvm void中沒有任何成員變數或方法,是個抽象類,其作用與c語言中的void相似。uvm scope stack,...

UVM原始碼學習 uvm registry

如果對每個factory註冊的component object都建立其實例,記憶體 編譯的開銷會很大。為了減小這種開銷,可以採用uvm registry對factory註冊的componnet object類建立乙個輕量級的 僅含有get get type get type name等方法 只有使用...