Flow ControlFlow Control即流量控制,這一概念起源于網絡通信中。PCIe總線采用Flow Control的目的是,保證發送端的PCIe設備永遠不會發送接收端的PCIe設備不能接收的TLP(事務層包)。也就是說,發送端在發送前可以通過Flow Control機制知道接收端能否接收即將發送的TLP。
在PCI總線中,并沒有Flow Control這樣的機制,因此發送端并不知道當前時刻,接收端能夠接收對應的TLP。因此,發送端只能先嘗試發送,期間可能會被插入多個等待周期(接收設備尚未就緒等原因),甚至是重發(Retries)等。
PCIe Spec規定,PCIe設備的每一個端口(Ports)都必須支持Flow Control機制,在發送TLP之前,Flow Control必須先檢查接收端口是否有足夠的Buffer空間來接收這個TLP。當PCIe設備支持多個VC(Virtual Channel)時,Flow Control機制可以顯著地提高總線的傳輸效率。
PCIe Spec規定,每個PCIe設備最多支持8個VC,并且每個VC的Flow Control Buffer是完全獨立的。也就是說,某一個VC的Flow Control Buffer滿了,并不會影響其他的VC的通信。
前面的文章中介紹過,Flow Control機制是通過相鄰兩個端口(Ports)的數據鏈路層之間發送DLLP(Flow Control DLLPs)來實現的。在進行初始化的時候,接收端需要向發送端報告(reports)其Buffer的大小,在正常運行狀態(Run-time)時,會周期性地通過Flow Control DLLPs來告知發送端,接收端的各個Buffer的大小。
需要注意的是,雖然Flow Control DLLP只在相鄰的數據鏈路層之間傳輸,但是相關的Buffer和計數器(FC Counter)確實存在于事務層(Transaction Layer)的。如下圖所示:
前面的文章中多次介紹過,TLP一共有三大類:
Posted Transactions(包括Memory Writes和Messages)、Non-Posted Transactions(包括Memory Reads、Configuration Reads and Writes、IO Reads and Writes)以及Completions(包括Read and Write Completion)。并且知道,TLP可以分為兩個部分,Header和Data部分。Flow Control為了獲得更高的數據傳輸效率,將這三類TLP分開存放,同時將Header與Data部分也分開存放。因此,一共存在六種不同的Flow Control Buffer類型,如下圖所示:
Flow Control Buffer的存儲單元(Unit)被稱作Flow Control Credits。對于Header來說,Requests TLP每個unit等于5DW,而Completions TLP每個unit等于4DW。對于Data來說,每個unit等于4DW,即Data Buffer是按照16個字節對齊的。對于各種類型的Buffer的最小值如下表所示:
最大值如下表所示:
注:0 unit表示無限(Infinite)。
-
總線
+關注
關注
10文章
2869瀏覽量
87995 -
PCIe
+關注
關注
15文章
1227瀏覽量
82452
原文標題:【博文連載】PCIe掃盲——Flow Control基礎(一)
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論