uvm_recorder.svh裡實現了兩個類:uvm_recorder
和uvm_text_recorder
。uvm recorder規定了如何把field記錄到record中,是uvm_tr_stream中record的抽象表示方法。
uvm_recorder類直接派生自uvm_object,定義的主要方法如下表所示。uvm_text_recorder類直接派生自uvm_recorder,是uvm_text_tr_database的預設recorder,具體實現了uvm_recorder類中的鉤子函式及空函式。
序號方法描述1
get_stream
返回建立當前record的stream引用引數reference,若record未初始化就呼叫了該函式會報warning,do_open函式值會對record進行初始化
2close
在uvm_tr_stream::open_recorder開啟recorder之後,呼叫該函式關閉recorder並記錄close_time。關閉recorder意味著當前transaction的結束。如果已關閉則直接退出,否則呼叫鉤子函式do_close進行關閉。
3free
free,釋放recorder,用於解決資料庫實現跨語言邊界的問題。釋放recorder意味著當前stream及資料庫可以釋放recorder的reference引數。若recorder已被釋放則世界退出,若recorder未close先close再呼叫鉤子函式do_free釋放,並清理stream/recorder狀態。
4is_open
返回recorder是否open,1代表open
5get_open_time
返回recorder open時間
6is_closed
返回recorder是否close,1代表close
7get_close_time
返回recorder close時間
8m_do_open
呼叫鉤子函式do_open初始化recorder內部狀態,free前重複初始化會報error,
9m_free_id
根據recorder id刪除recorder及其對應的id
10get_handle
採用inst_id作為recorder的handle並返回handler,若當前recorder的id不是inst_id,以inst_id取而代之
11get_recorder_from_handle
根據handle(inst_id)獲取recorder
12record_feild
呼叫對應的鉤子函式來記錄當前型別的引數
13record_field_int
呼叫對應的鉤子函式來記錄當前型別的引數
14record_real
呼叫對應的鉤子函式來記錄當前型別的引數
15record_object
呼叫對應的鉤子函式來記錄當前型別的引數
16record_string
呼叫對應的鉤子函式來記錄當前型別的引數
17record_time
呼叫對應的鉤子函式來記錄當前型別的引數
18record_generic
呼叫對應的鉤子函式來記錄當前型別的引數
19use_record_attribute
用以表示是否支援使用uvm_record_attribute巨集,預設返回0不支援
20get_record_attribute_handle
提供相容uvm_record_attribute巨集的工具指定的handle,預設採用get_handle的值
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 barrier
uvm barrier直接擴充套件自uvm object,提供多程序間的同步機制。簡單講就是使用者設定乙個閾值,每個等待同步的程序在執行完之後進入wait for等待事假觸發,當進入wait for的程序數達到閾值時觸發該事件,所有等待同步的程序跳出wait for繼續執行,從而實現多個程序的同步。...