前言
通過寫部落格,可以檢查你是否了解設計,這像是一個提問題并自我解讀的過程。 如果你提出問題但發現無法解決,則問題就在這裡。例程是從某個IP核心開始的最佳方法,它可以用作以後設計的基礎。
本文基于K7325tFPGA晶片進行分析的,7 Series Integrate Block for PCI Express核配置,本根據自己的了解分享Xilinx的例子代碼和仿真分析,可将例子用于自己的工程項目上,本文章不注重講解PCIE協定,隻是結合PCIE協定,注重分析例子中的代碼和仿真,PCIE配置成ROOT端,即FPGA作為主機,對裝置端進行操作。
生成PCIE例子工程的步驟
1. 打開IP CORE進行設定
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxgWbihGayMmb1cVWxgmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0UTO2QjMzEjMzADNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
7 Series Integrate Block for PCI Express配置
2.點選該IP核,右鍵點選 Open IP Example Design,點選OK,即可生成例子工程。
标題
PCIE例子工程例子架構圖
一、 PCIE系統架構
1.1 PCIE分層結構
PCIE結構
1.2 TLP包
四種TLP類型。
Memory (記憶體空間操作)
IO (IO空間操作)
Configuration (配置操作)
Message (資訊操作)
四種類型TLP,如果有需要響應,稱為Non-Posted TLP,如果沒有需要響應,稱為Posted TLP。
TLP包類型
1.2.1 TLP結構
TLP資料格式
1.2.2 Header各個字段的含義
Header格式
深色部分為公共部分,不同類型的TLP包格式在Header上對應不同字段。各個字段的含義:
标題
- Fmt:Format,決定頭的資料大小,3DW和4DW
- Type:TLP類型。
- R:保留
- TC:傳輸優先級,數值越大,優先級越高
- Attr:屬性,共3bit
- TH:訓示何時包含TLP提示,以便讓系統了解如何最好地處理這個TLP
- TD:是否接受CRC校驗
- EP:如果EP=1,則應該認為伴随該資料的資料無效,事務被允許正常完成。
- AT:位址的種類
- Length:TLP負載的資料長度,機關DW (32bit)
- Last DW BE:
- 1st DW BE:在PCIe 總線以位元組為基本機關資料傳遞,但是 Length 字段以 DW 為最小機關。為此TLP 使用 Last DW BE 和 First DW BE 返兩個字段迕行位元組使能,使得在一個 TLP中,有效資料以位元組為機關。
标題
1.2.3 Memory TLP
标題
3dw與4dw差別在于位址的寬度不同。
Tag:Requester ID、Tag合起來組成Transaction ID,在同一時間段内,PCIe裝置發出的每一個Non-Posted資料請求TLP,其Transaction ID必須唯一。也就是Tag必須唯一。
Request ID:該字段字段包含生成TLP封包的PCIe裝置的總線号(Bus Number)、裝置号(Device Number)和功能号(Function Number)。唯一的找到目标裝置,那是因為不同的Endpoint裝置空間會映射到Host記憶體空間的不同位置。
Memoty Write
例子:仿真模型的測試
Memoty仿真
S_axis_tx_tdata:face010f_60000001, 80000000_10000000, 00000000_12345678
可分析為:
{ Fmt ,Type } = 0110_0000;寫TLP,4DW帶資料
Length = 1dw,
{Requester ID, Tag} = face01
{Last DW BE, 1st DW BE} = 0f
Address [63:0] = 80000000_10000000
data負載= 12345678;
Memory Read
例子:仿真模型的測試
Memory仿真
S_axis_tx_tdata:face050f_20000001, 80000000_10000000,
可分析為:
{ Fmt ,Type } = 0010_0000;讀TLP,4DW不帶資料
Length = 1dw,
{Requester ID, Tag} = face01
{Last DW BE, 1st DW BE} = 0f
Address [63:0] = 80000000_10000000
無資料負載
1.2.4 Completion TLP
标題
字段含義:
compl Status:完成情況訓示。000--成功完成;001--不支援該請求。其餘情況可查閱規範。
000b (SC) Successful Completion:表示請求(Request)被正确的處理;
001b (UR) Unsupported Request:表示請求是非法的或者不能被Completer所識别的。在PCIe V1.1以及之後的版本将這作為Advisory Non-Fatal Error;
010b (CRS) Configuration Request Retry Status:Completer暫時不能響應的配置請求,需要Requester稍後再次嘗試;
100b (CA) Completer Abort:Completer可以響應該請求,但是卻發生了其他的錯誤,該錯誤是Uncorrectable Error。
Byte Count:是指還剩下多少位元組的資料需要讀取。其餘字段可自行查閱規範。
例子:仿真模型的測試
标題
S_axis_tx_tdata:01000004_4a000001, 12345678_face0500,
可分析為:
{ Fmt ,Type } = 0100_1010;響應TLP,3DW帶資料
響應讀TLP,傳回要讀的資料。
compl Status = 3’b000(正确處理讀TLP)
Byte Count = 4
Length = 1dw,
{Requester ID, Tag} = face05
{Last DW BE, 1st DW BE} = 0f
Data = 12345678
1.2.5 Message TLP
用于傳輸中斷,錯誤,電源管理等資訊。Header大小總為4DW
标題
字段含義
标題
例子:仿真模型的測試
标題
S_axis_tx_tdata:10ee0050_74000001, 00000000_00000000, 00000000_00000019
可分析為:
{ Fmt ,Type } = 0111_0100;資訊TLP,4DW
Meaasage Code = 50
{Requester ID, Tag} = 10ee
由資訊的指令的代碼,此資訊為電源裝置資訊。
1.2.6 Configuration TLP
配置TLP,Type 0是endpoint的配置,Type1為switch的配置。
主機軟體通路pcie 裝置的配置空間,RC會生成Configuration TLP與switch互動,進行配置裝置的資料。
标題
字段含義
Ext Reg Number:它們提供DW空間的前四位,用于通路擴充的配置空間。它們與寄存器号結合,建立通路1024 DW(4096位元組)空間所需的10位位址。對于pci相容的配置空間,該字段必須為零。
Register Number:配置DW空間的較低的8位指定了寄存器号。最低的兩個位總是零,強制dwl對齊通路。
Bus Number+Device Function Number 決定唯一目标裝置。
例子:仿真模型的測試
标題
S_axis_tx_tdata:10ee000f_04000001, 00000000_01000000
可分析為:
{ Fmt ,Type } = 0000_0100;配置讀TLP,3DW帶資料
Length = 1dw,
{Requester ID, Tag} = 10ee00
{Last DW BE, 1st DW BE} = 0f
Address [31:0] =01000000
Data =00000000
标題
S_axis_tx_tdata:00000004_4a000001, ee101170_10ee0000
可分析為:
{ Fmt ,Type } = 0100_1010;響應配置讀TLP,3DW帶資料
Length = 1dw,
{Requester ID, Tag} = 10ee00
Data =ee101170(傳回配置讀資料)
标題
S_axis_tx_tdata:10ee000f_44000001, ffffffff_01000010
可分析為:
{ Fmt ,Type } = 0100_0100;響應配置寫TLP,3DW帶資料
Length = 1dw,
{Requester ID, Tag} = 10ee00
Data =ffffffff
Address [31:0] = 01000010
2.1 pcie 配置空間和位址
标題
每個pcie裝置都有自己的配置空間,主機通過通路這些空間讀取裝置的資訊,pcie配置空間是協定規定好存放的内容有自己的定義。
PCI總線具有32位資料/位址複用總線,是以其存儲位址空間為2的32次方=4GB。也就是PCI上的所有裝置共同映射到這4GB上,每個PCI裝置占用唯一的一段PCI位址,以便于PCI總線統一尋址。每個PCI裝置通過PCI寄存器中的基位址寄存器來指定映射的首位址。
标題
2.1.1 BAR(Base Address Register)
Endpoint configuration提供最多6個BAR.Switch提供兩個。
标題
主機通路配置空間過程:
CPU不能直接通路配置空間,讓RC(Root Complex)去辦。若想讀取pcie外設的資料,先讓RC通過TLP把資料從pcie外設讀到主機記憶體中,後CPU從主機記憶體讀資料。若CPU要往外設寫資料,則先把資料寫到主機記憶體中,然後叫RC通過TLP寫到PCLe裝置。
配置設定映射空間
對于pcie裝置,系統軟體如何為其配置設定映射空間。
标題
pcie上電後BAR的配置過程:
上電時:系統軟體首先讀取pcie裝置的BAR0(見圖5-33),得到資料。
标題
後系統軟體往BAR0寫入全1(見圖5-34),如有保持不變,則是廠家固化的。
标題
解讀:(圖5-34)低12位沒變,表明裝置空間為4KB,低4位表明是存儲空間屬性(映射類型),是廠家設定好的然後系統軟體根據這些資訊,在系統記憶體空間找到地方來映射着4KB的空間,把配置設定的空間寫入到BAR0.(圖5-35)
标題
在pcie拓撲結構中,一條總線下可挂幾個裝置,而每個裝置可以具有對個功能。(見圖5-36)
标題
在整個pcie系統中,隻要知道BUS No + Device No + Function No,就找到唯一的function尋址基本單元是功能,它的ID由Bus + Device + Fun組成。
一個pcie可以有最多256Bus,每條Bus上最多挂32裝置,而每個裝置上最多可實作8個function,每個function對應4KB的配置空間。上電時這些配置空間都需要映射到主機記憶體空間。
系統軟體讀取configuration空間:
系統軟體通路configuration,隻需指定相應function對應的記憶體空間,RC發現這個是configuration映射空間,就會産生相應的configuration Read TLP去獲得相應的function 的 configuration。
下期将繼續更新pcie例子工程的代碼分析。
水準有限,如有錯誤,請指教不勝感情。如果您有其他看法,歡迎在下方讨論,謝謝!