一,posted事務和non-posted事務
https://blog.csdn.net/icxiaoge/article/details/80456837
https://blog.csdn.net/fzhykx/article/details/79718744
簡單來說:posted事務就是在request傳到下一級時,上游請求就結束了(此時事務還沒有到達target,也還沒有完成),又下一 級繼續完成request。
non-posted事務,需要等到completion的response結束後,才能結束一次request。
由於non-posted事務會一直等到事務完成才釋放總線,所以很影響總線的帶寬,爲此出現了delayed事務和split事務。
二、delayed事務以及delayed事務的順序要求
PCI橋接受上游的request後,向下傳遞request,如果16個週期後依舊沒有迴應,這時候下游的橋就使用retry信號中斷請求,PCI橋收到Retay信號後,就中斷request信號,釋放總線,計數一段時間後,重新發起一個delayed-request,若依舊16個週期沒有反應,下游繼續發送retay,pci橋在停止request,計數一段時間後再重新發起,如此反覆直到target 準備好數據完成(此時的完成標記成delayed總線完成。)
只有memory write(PMW(posted-memory write))和message可以是posted 事務
三、delayed事務執行過程中要注意的順序問題
總的來講:
1、PMW不能越過之前的PMW執行(如果前後兩個posted寫,A是寫,B是標記寫好,B先於A執行,如果此時出現讀事務,就會出現讀舊數據的錯誤),PMW要能夠越過其他的non-posted事務執行(爲了防止死鎖/提高總線利用率)
2、DRC/DWC要可以越過DRR/DWR事務執行,也是爲了避免死鎖的問題
3、delayed read/write request 都只是一個request,只有得到grant後,事務纔開始執行,所以爲了防止死鎖和提高總線利用率,這個request可能因爲之前提到的優先級問題被discard掉。(而一個橋處理delayed事務的能力是有限度的,假設多個delayed事務都在執行,又來了新的delayed事務,可能會導致其中一個delayed事務被bypass 掉,所以南橋有一個針對LPC事務的處理,爲防止對LPC的事務被bypass,會計數retry的次數,達到閾值後,就將該request移到pending-request buffer中,過一會兒再重新發起一個request。)