訪問PCIe BAR空間

google了一圈,發現xilinx論壇的一個回答比較好, 連接以下:express

https://forums.xilinx.com/t5/PCI-Express/PCI-express-Base-Address-Register/td-p/685289google

裏面講了如何訪問BAR指定的mem空間。spa

下面對BAR空間以及配置空間的訪問作一個系統的總結,其實就是在回答如下幾個問題:接口

  1. PCIe中四種tlp和BAR空間的關係是怎樣的?
  2. tlp是怎麼發起的?
  3. tlp是怎麼到相應的下游設備的?

1、四種tlp和BAR空間的關係

四種傳輸以下路由

類型 說明
mem req tlp 訪問mem空間
io req tlp 訪問io空間
cfg req tlp 訪問配置空間
message tlp 設備專用

故名思義, mem req就是訪問mem空間的,io req就是訪問io空間的,cfg req就是訪問配置空間的,這個再清楚不過了,應該毫無爭議。文檔

2、tlp是怎麼發起的

結論:tlp是總線接口發起的。這貌似是一句屁話,可是事實確實是這樣的,疑惑可能在於software要作什麼事情,要知道,像usb但是要本身去配置trb的。這裏有個重要的模塊:atu。software要作的就是配置atu。get

atu又是啥? atu是地址轉換單元(Address Translation Unit)的縮寫,負責把cpu域的物理地址轉換到PCI域的總線地址。若是總線上有訪問對應CPU域物理地址的請求,將會經過atu生成tlp,tlp中的地址就是atu轉換後的地址。atu中還有一個重要的配置:tlp類型。不一樣的tlp路由策略是不同的,而路由策略影響對地址的解析。這裏就涉及tlp路由了。it

3、tlp路由

對於配置請求來說,地址被解析成總線號+設備號+功能號+偏移,文檔上講的基於ID的路由,因此訪問的是和設備對應的4KB配置空間。而對於io請求或者mem請求,是基於地址的路由,經過和各個設備的BAR空間範圍的比較來確認地址落在哪一個設備的BAR空間上,而後進行相應的讀寫操做。io

最後記錄一下wiki上關於PCIe各個版本的理論速度table

2017-06-20 22-42-35屏幕截圖.png

相關文章
相關標籤/搜索