tlm源碼分析——tlm_fifo
virtual class uvm_tlm_fifo_base從uvm_component繼承過來;
內部定義了兩個imp,兩個port,imp中的兩個參數,一個表示trans的type,另一個指向該fifo_base;
所以imp中的方法實現,是在該fifo實現的;
put_imp,實現trans的put,
get_peek_imp,實現trans的get或peek,
兩個analysis_port主要用來將trans,write出去,put進來的,使用put_ap;
get進來的,使用get_ap;
剩下定義的2個put_export是連接到put_imp上的,
定義的6個get_peek是連接到get_peek_imp上的,
這些export供其他的component進行連接,註意每個export只能來接一個port或export。
定義各種function 原型;
fifo status類型; flush,size,used,is_empty,is_full,
put類型;put,try_put,can_put,ok_to_put,
get和peek類似。
在fifo_base之上,擴展出了兩個fifo,一個tlm_fifo,一個analysis_fifo
tlm_fifo,內部實現了一個類型為T的mailbox,來進行數據的保存;
在new的時候,根據指定的size大小,指定mailbox的大小;
m_pending_blocked_gets,表示目前fifo中,被block住的個數;
put block 沒有相應的標誌
fifo status的function;
flush的操作,在目前有block的get時,會報錯;
put,get,peek task;寫到mailbox的同時,使用analysis port write;
try_get,try_peek,try_put, function;try_peek沒有動作很奇怪;
can_put,can_get,can_peek function;
tlm_analysis_fifo,其中主要支持了write function;
新增加了一個analysis_imp的變量;
調用tlm_fifo的try_put,調用put_ap進行write函數;
tlm源碼分析——tlm_fifo