UVM中uvm_component之間的transaction傳輸

有5個uvm component class:A, B, C, D, E,需要把一個transaction從A通過B, C, D傳到E,怎麼傳輸?

        方法一:使用TLM通信傳輸,利用多層PORT端口級聯實現,如圖1所示。

圖1 多層PORT連接

        A component的代碼爲:

圖2 A component代碼

        B component的代碼爲:

圖3 B component的代碼

       C component和D component的代碼類似於B component。在每個component中定義一個uvm_blocking_put_port端口(PORT)和次內層component的句柄,然後再build_phase中實例化,最後在connect_phase中連接起來。

        E component的代碼爲:

圖4 E component的代碼

        env的代碼爲:

圖5 env的代碼

       TLM是Transaction Level Modeling(事務級建模)的縮寫,它起源於SystemC的一種通信標準。TLM通信中有三個常用的術語:put操作、get操作和transport操作。有三種端口PORT、EXPORT和IMP。在UVM中,只有IMP才能作爲連接關係的終點,如果PORT或者EXPORT作爲終點,則會報錯。

       除了以上三種端口外,UVM中還有兩種特殊的端口:analysis_portanalysis_export,用於傳遞transactionanalysis_portanalysis_export如果直接相連會出錯,只有在analysis_export後面再連接一級uvm_analysis_imp纔不會出錯。

在此基礎上,可以引入FIFO來進行通信,FIFO的本質是一塊緩存加兩個IMPFIFO中的analysis_exportblocking_get_export雖然名字中有關鍵字export,但是其類型卻是IMP(uvm_analysis_imp)

       不過無論使用FIFO還是使用IMP,都能實現同樣的目標,兩者各有其優勢與劣勢,在實際應用中,讀者可以根據自己的習慣來選擇合適的連接方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章