這篇文章來詳細(xì)地聊一聊Non-Posted Transaction(包括Ordinary Read、Locked Read和IO/Configuration Writes)與Posted Writes(包括Memory Writes和Message Writes)。
Non-Posted Transaction
o Ordinary Reads
下圖顯示的是一個(gè)Endpoint向System Memory發(fā)送讀請(qǐng)求(Read Request)的例子。
在這個(gè)例子中,Endpoint的讀請(qǐng)求通過了兩個(gè)Switch,然后到達(dá)其目標(biāo),即Root。Root對(duì)讀請(qǐng)求的包進(jìn)行解碼后,并從中識(shí)別出操作的地址,然后鎖存數(shù)據(jù),并將數(shù)據(jù)發(fā)送至Endpoint,即包含數(shù)據(jù)的Completion包,ClpD。需要注意的是,PCIe允許每個(gè)包的最大數(shù)據(jù)量(Max Data Payload)為4KB,但實(shí)際上經(jīng)常需要發(fā)送大于4KB的數(shù)據(jù)。因此,常常一個(gè)讀請(qǐng)求會(huì)對(duì)應(yīng)多個(gè)ClpD,即將大于4KB的數(shù)據(jù)分成多個(gè)包發(fā)送。如果遇到錯(cuò)誤,則Root會(huì)通過Completion包告知相應(yīng)的Endpoint。
注:Root向發(fā)送請(qǐng)求的Endpoint發(fā)送Completion包,是通過Request包中的BDF信息(Bus,Device和Function)進(jìn)行查找對(duì)應(yīng)的Endpoint的。關(guān)于BDF,會(huì)在后面的文章詳細(xì)地介紹。
o Locked Reads
Locked請(qǐng)求實(shí)際上是PCIe為了兼容早期的PCI總線而設(shè)置的一種方式,對(duì)于非PCI兼容的設(shè)計(jì)中,是不允許使用Locked操作的。并且也只有Root可以發(fā)起Locked請(qǐng)求操作,Endpoint是不可以發(fā)起Locked請(qǐng)求操作的。下圖顯示的是一個(gè)簡(jiǎn)單的Locked Read請(qǐng)求操作:
Locked Read主要用于支持一種叫做Atomic Read-Modify-Write操作,這是一種高優(yōu)先級(jí)且不可被打斷的操作。主要用于測(cè)試鏈路狀況等任務(wù)(針對(duì)PCI設(shè)備,PCIe設(shè)備禁止使用Locked操作)。此外,Locked操作采用的是目標(biāo)存儲(chǔ)尋址(Target Memory Address)來尋找Legacy Endpoint(PCI設(shè)備),而不是采用前面介紹的BDF。
o IO/Configuration Writes
下圖是一個(gè)Non-Posted IO寫操作的例子。和Locked操作一樣,IO操作也是為了兼容早期的PCI設(shè)備,在PCIe設(shè)備中也是不建議使用。
Posted Writes
o Memory Writes
前面的文章有所提及,PCIe中的Memory寫操作都是Posted的,因此Requester并不需要來自Completer的Completion。一個(gè)簡(jiǎn)單的Memory Writes例子如下圖所示:
因此沒有返回Completion,所以當(dāng)發(fā)生錯(cuò)誤時(shí),Requester也不會(huì)知道。但是,此時(shí)Completer會(huì)將錯(cuò)誤記錄到日志(Log),然后向Root發(fā)送包含錯(cuò)誤信息的Message。
o Message Writes
和其他的幾種類型不太一樣,Message支持多種Routing方式。比如Requester可以將Message發(fā)送至一個(gè)指定的Completer,但是不管指定的Completer是不是Root,Root都會(huì)自動(dòng)的收到來自任何一個(gè)Endpoint發(fā)送的Message。此外,當(dāng)Requester是Root的時(shí)候,Requester還可以向所有的Endpoint進(jìn)行廣播發(fā)送Message。
不得不說,Message機(jī)制的提出幫助PCIe總線省去了很多PCI總線中的邊帶信號(hào)。PCI中很多用于中斷、功耗管理、錯(cuò)誤報(bào)告的邊帶信號(hào),在PCIe中都通過了Message來進(jìn)行實(shí)現(xiàn)了。
-
pci總線
+關(guān)注
關(guān)注
1文章
203瀏覽量
31874 -
總線
+關(guān)注
關(guān)注
10文章
2898瀏覽量
88231 -
PCIe
+關(guān)注
關(guān)注
15文章
1247瀏覽量
82911
原文標(biāo)題:【博文連載】PCIe掃盲——PCIe總線事務(wù)層入門(二)
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論