1. 程式人生 > >tlm源碼分析——uvm**port/export/imp class的實現

tlm源碼分析——uvm**port/export/imp class的實現

master es2017 一個 接收 new 都是 包括 ges str

uvm在各種port,export,impclass的聲明,都是通過宏來定義的;

對於port的定義;有四種,put,get,peek,get_peek,

        每一種都分為blocking,non_blocking,和都包含的部分;

    技術分享

在這種的port中,發出與接收的trans都是相同的,也是就不需要resp,是單向的。

uvm也提供了雙向的master,slave的需要resp的class;跟transport不同的是,它分別定義了put和get的function,而不是

    通過transport的方法;

    技術分享

    transport的三種function,block,non_block,transport_port;

    技術分享  

export類似;

imp中最重要的一部分是進行m_imp的重載,實現通信一方調用imp的parent的function;

    通信一方,拿到imp的指針,是在resolve_bindings中實現的。

    imp的class聲明中,也會包括兩個參數,第一個表示trans的類型,第二個表示聲明該tmp的class;

    技術分享

    imp_common中主要實現new函數的聲明,和一個imp parent變量的賦值;imp的parent設為this;

    技術分享

    BLOCKING_PUT_IMP函數,調用m_imp中的函數,所以在imp的parent那個class中,必須實現相應的方法;

    技術分享

  之上的imp,也是會實現put/get/peek/get_peek的imp,對於存在resp的imp,其中會定義兩個m_imp,要求在imp所在的

    parent上的實現多個方法;兩個m_imp指向的其實是同一個;

    技術分享

    技術分享     

以上這些函數在new的時候,都會設置min_szie和max_size都設置為1,所以,這些定義了之後有且只能連接一個;

analysis_port 在new時,一般min_size賦值為0,max_size不規定上限,

    技術分享     

      對於port和export,重載的write函數,會遍歷其中的m_if接口,依次調用其中的write函數;

    技術分享

      imp函數,則只是調用m_imp中的write函數,m_imp也是imp parent的一個類型;

    技術分享

以上這些函數在聲明時,都會定義uvm_port_base從uvm_tlm_if_base中進行擴展;

          

tlm源碼分析——uvm**port/export/imp class的實現