採用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。
非常感謝sharvil111的詳細解釋! 那麼我們可以說出口和獲得是一樣的嗎? 此外,如果put-get用於一對一通信,那麼爲什麼我們需要uvm_tlm_fifo呢?換句話說,** Initiator/Producer **在發送事務時阻塞,並等待** Target/Consumer **消耗該事務,爲什麼需要在那裏有** FIFO **? – haykp
端口/導出是**連接**的類型。雖然put/get是**端口**的類型。術語發起人 - 生產者,目標消費者是指組件,兩者都是不同的術語。 FIFO用於**緩衝**數據。也就是說,臨時存儲。假設您的顯示器已經向用戶發送了一些數據,並且用戶正在忙於處理某些其他事務,那麼這些數據將保存在FIFO中以便稍後處理,因此FIFO非常有用。 – sharvil111
sharvil111非常感謝你的解釋。 我想我需要閱讀更多關於端口和連接的信息,如果你能指點我一些很棒的文檔! – haykp