訪問PCIe BAR空間

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

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

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

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

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

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

四種傳輸如下

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

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

二、tlp是怎麼發起的

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

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

三、tlp路由

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

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

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

發佈了146 篇原創文章 · 獲贊 81 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章