編 者 按
續(xù)接上文,接續(xù)扒一扒PCIe中的Flow Control
鏈路層把TLP分為幾類?
在處理TLP報(bào)文時(shí),根據(jù)Fmt字段以及Type字段可以將TLP報(bào)文分為二十多種,當(dāng)TLP報(bào)文送至數(shù)據(jù)鏈路層時(shí),數(shù)據(jù)鏈路層在進(jìn)行流量控制處理時(shí)則不會考慮這么多種情況。數(shù)據(jù)鏈路層里面的Flow Control,則會將報(bào)文分為三類:
Post:不需要Target端返回響應(yīng)報(bào)文的TLP請求。
Non-Post:需要Target端返回響應(yīng)報(bào)文的TLP請求。
Cmpl:響應(yīng)TLP報(bào)文。
而同時(shí),數(shù)據(jù)鏈路層在進(jìn)行流量管理時(shí)會將TLP的數(shù)據(jù)報(bào)文頭、數(shù)據(jù)負(fù)載分開進(jìn)行流量控制。也就意味著數(shù)據(jù)鏈路層的流量控制每個(gè)VC分為了六個(gè)通道:
Post Header
Post Data
Non-Post Header
Non-Post Data
Cmpl Header
Cmpl Data
這在cocotb-ext中的FcChannelState中可以看出:
Flow Control初始化
Flow Control的初始化在DL_INIT中:
所用到的DLLP報(bào)文為:
按照Spec里面的規(guī)定,F(xiàn)low Control的初始化順序?yàn)椋?/p>
InitFC1-NP (second)
InitFC1-Cpl (third)
無論是InitFC1、InitFC2,其報(bào)文格式定義基本相同。InitFC1、InitFC2所做的事情也基本相同,就是告知發(fā)送端Header、Data的令牌數(shù)。看到一段網(wǎng)上的解釋:“FC_Init1和FC_Init2干的活不是差不多嘛,為什么還需要FC_Init2呢?原因是,不同的設(shè)備完成FC_Init1的時(shí)間可能是不同的,增加FC_Init2是為了保證每個(gè)設(shè)備都能收到FC初始化DLLP。”
如果FC為0,則表示該通道不受令牌限制,即無流量控制(EP設(shè)備以及不支持P2P的RC的Cmpl常設(shè)為0,故建議在涉及時(shí)對于Cmpl時(shí)建議仔細(xì)考慮。像Xilinx PCIe IP EP模式的的RC接口,不建議做反壓)。
這里著重看下 Scale和FC域,F(xiàn)C域?yàn)?2bit,隨著PCIe鏈路速度的提升,Spec規(guī)定了Scale域以擴(kuò)大令牌數(shù):
按照協(xié)議里,最大可以支持到16bit。而FC域僅有12bit,協(xié)議里規(guī)定了FC的定義:
在cocotbext-pcie里,關(guān)于FC位寬的定義,Header、Data采用12、16bits:
Flow Control的初始化在cocotbext-pcie中也很明了簡單:
可以看到,由于FC_INIT1、FC_INIT2內(nèi)容基本一致,F(xiàn)C2基本沒有做什么處理(具體真實(shí)的實(shí)現(xiàn)不了解)。
》令牌消耗
發(fā)送端發(fā)送一個(gè)TLP報(bào)文,在數(shù)據(jù)鏈路層需消耗Header、Data令牌。每一個(gè)TLP報(bào)文需消耗一個(gè)TLP,而如果有數(shù)據(jù)負(fù)載則每四個(gè)DW消耗一個(gè)Data令牌:
數(shù)據(jù)鏈路層進(jìn)行判定是否能發(fā)送該數(shù)據(jù)出去:
》令牌更新
令牌周期性的更新所用到的DLLP格式為:
接收端按照HdrFC、DataFC中的內(nèi)容更新其令牌:
這里面看起來有一點(diǎn)不太合適的地方就是沒有考慮Scale,按照DLLP里面的報(bào)文解析:
由于FC只有12bit,這里對于16bit的場景支持欠妥。
更新周期
無論是Flow Control還是之前所說到的ACK/NAK,協(xié)議中都規(guī)定了最大發(fā)送間隔時(shí)間。在cocotbext-pcie中的計(jì)算方式如下:
這里面的計(jì)算單位是Symbol Time(物理層發(fā)送1Byte數(shù)據(jù)的時(shí)間)。這里面可能乍看懵逼,這部分在PCIe Spec 5.0里對應(yīng)Appendixes H里:
Flow Control Latency:
ACK Latency:
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1644文章
21990瀏覽量
615249 -
PCIe
+關(guān)注
關(guān)注
16文章
1329瀏覽量
84824 -
TLP
+關(guān)注
關(guān)注
0文章
34瀏覽量
15958 -
Flow
+關(guān)注
關(guān)注
0文章
10瀏覽量
8973 -
報(bào)文
+關(guān)注
關(guān)注
0文章
39瀏覽量
4165
原文標(biāo)題:原來如此—PCIe的Flow Control
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
扒一扒與無線網(wǎng)絡(luò)相關(guān)的那些事
扒一扒我看過的那些Linux相關(guān)的書籍
扒渣機(jī)產(chǎn)品有哪些參數(shù)
扒一扒C語言hello world背后的內(nèi)幕
Flow Control機(jī)制可以顯著地提高總線的傳輸效率

美容儀哪個(gè)牌子好?來扒一扒令人眼花繚亂的日本美容儀

扒一扒好用的日本家用美容儀品牌,讓你享受清潔肌膚的樂趣
扒店saas系統(tǒng)創(chuàng)新性服務(wù)平臺的優(yōu)勢是什么
扒一扒中斷為什么不能調(diào)printf?

扒一個(gè)超棒的stm32的開源usb-can項(xiàng)目,canable及PCAN固件

扒一扒PCIe中的Flow Control

評論