2016-01-22 30 views
0

我試圖掌握UVM,並完全失去了UVM端口。請幫助更好地瞭解端口。UVM端口:放置,獲取,導出,分析

所以我的理解主要有3種港口

  1. Put->獲得:生產者把數據和消費者獲取的數據。這是阻止聲明。
  2. Put-> Export-> Imp
  3. 分析 - >訂戶:生產者傳輸數據和其他訂戶得到它。這是非阻塞語句。

還有TLM_FIFO,它允許緩衝交易以備後用。它有兩種類型:uvm_tlm_fifouvm_tlm_analysis_fifo

而且我的問題是:

  1. 我的理解是正確的?
  2. get和export有什麼區別?
  3. uvm_tlm_fifouvm_tlm_analysis_fifo有什麼區別?

由於
Hayk酒店

回答

1

採用TLM接口隔離在整個環境中其他 成分的變化的每個組件。

有關端口的理解,有兩個常用術語:生產者消費者。代替生產者和消費者,請考慮發起人目標組件之間的通信。

一種引發劑總是具有連接到其上的端口。就像驅動程序有seq_item_ 端口

A 目標始終有一個出口。就像測序儀havng seq_item_ 出口

對於PUT/GET端口:

Initiator/Producer: 
port.put(tr); 

Target/Consumer: (Note the Input in task) 
task pet(input simple_trans t); 
//... 
endtask 

端口,引發生產者提出一個交易消費者啓動器/生產者塊直到放置任務被目標/消費者解鎖。

Initiator/Consumer: 
port.get(tr); 

Target/Producer:(Note the Output in task) 
task get(output simple_trans t); 
//... 
endtask 

在獲取端口時,發起者是消費者。 A 消費者請求/請求交易並且生產者提供它。 啓動器/消費者阻止,直到獲取任務被目標/生產者解鎖。

put/get端口通常用於具有操作系統的行爲。這些端口用於一對一通信

分析端口一般用於廣播的交易。 編寫方法總是非阻塞。可能有零個或多個連接到分析端口。發起者和目標的規則再次保持不變。

Initiator: 
port.write(tr); 

Target:(Note the function, not task) 
function void write(simple_trans tr); 
//... 
endfunction 

所有端口都需要實現用戶類中的方法。 uvm_*_imp用於相同。雖然緩衝的數據可以通過FIFO s完成。

對於分析端口,使用uvm_analysis_fifo,因爲這些FIFO必須具有進一步廣播事務的能力。分析FIFO的默認大小爲無界

雖然uvm_tlm_fifo在使用put/get端口時使用,即用於一對一通信。分析FIFO的默認大小爲,可將其更改爲無界

同樣,FIFO中總是把/根據請求從部件獲取數據,從此有一個出口類型在兩端連接。

有關更多信息,請參閱UVM User Guide

+0

非常感謝sharvil111的詳細解釋! 那麼我們可以說出口和獲得是一樣的嗎? 此外,如果put-get用於一對一通信,那麼爲什麼我們需要uvm_tlm_fifo呢?換句話說,** Initiator/Producer **在發送事務時阻塞,並等待** Target/Consumer **消耗該事務,爲什麼需要在那裏有** FIFO **? – haykp

+0

端口/導出是**連接**的類型。雖然put/get是**端口**的類型。術語發起人 - 生產者,目標消費者是指組件,兩者都是不同的術語。 FIFO用於**緩衝**數據。也就是說,臨時存儲。假設您的顯示器已經向用戶發送了一些數據,並且用戶正在忙於處理某些其他事務,那麼這些數據將保存在FIFO中以便稍後處理,因此FIFO非常有用。 – sharvil111

+0

sharvil111非常感謝你的解釋。 我想我需要閱讀更多關於端口和連接的信息,如果你能指點我一些很棒的文檔! – haykp