1. 程式人生 > >tlm源碼分析——tlm_fifo

tlm源碼分析——tlm_fifo

使用 write images 一個表 報錯 表示 width 增加 寫到

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