天天看點

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

前言

通過寫部落格,可以檢查你是否了解設計,這像是一個提問題并自我解讀的過程。 如果你提出問題但發現無法解決,則問題就在這裡。例程是從某個IP核心開始的最佳方法,它可以用作以後設計的基礎。

本文基于K7325tFPGA晶片進行分析的,7 Series Integrate Block for PCI Express核配置,本根據自己的了解分享Xilinx的例子代碼和仿真分析,可将例子用于自己的工程項目上,本文章不注重講解PCIE協定,隻是結合PCIE協定,注重分析例子中的代碼和仿真,PCIE配置成ROOT端,即FPGA作為主機,對裝置端進行操作。

生成PCIE例子工程的步驟

1. 打開IP CORE進行設定

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

7 Series Integrate Block for PCI Express配置

2.點選該IP核,右鍵點選 Open IP Example Design,點選OK,即可生成例子工程。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

PCIE例子工程例子架構圖

一、 PCIE系統架構

1.1 PCIE分層結構

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

PCIE結構

1.2  TLP包

四種TLP類型。

Memory (記憶體空間操作)

IO (IO空間操作)

Configuration (配置操作)

Message (資訊操作)

四種類型TLP,如果有需要響應,稱為Non-Posted TLP,如果沒有需要響應,稱為Posted TLP。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

TLP包類型

1.2.1  TLP結構

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

TLP資料格式

1.2.2  Header各個字段的含義

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

Header格式

深色部分為公共部分,不同類型的TLP包格式在Header上對應不同字段。各個字段的含義:

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

  1. Fmt:Format,決定頭的資料大小,3DW和4DW
  2. Type:TLP類型。
  3. R:保留
  4. TC:傳輸優先級,數值越大,優先級越高
  5. Attr:屬性,共3bit
  6. TH:訓示何時包含TLP提示,以便讓系統了解如何最好地處理這個TLP
  7. TD:是否接受CRC校驗
  8. EP:如果EP=1,則應該認為伴随該資料的資料無效,事務被允許正常完成。
  9. AT:位址的種類
  10. Length:TLP負載的資料長度,機關DW (32bit)
  11. Last DW BE:
  12. 1st DW BE:在PCIe 總線以位元組為基本機關資料傳遞,但是 Length 字段以 DW 為最小機關。為此TLP 使用 Last DW BE 和 First DW BE 返兩個字段迕行位元組使能,使得在一個 TLP中,有效資料以位元組為機關。
基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

1.2.3 Memory TLP

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

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

例子:仿真模型的測試

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

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

例子:仿真模型的測試

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

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

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

字段含義:

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:是指還剩下多少位元組的資料需要讀取。其餘字段可自行查閱規範。

例子:仿真模型的測試

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

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

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

字段含義

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

例子:仿真模型的測試

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

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互動,進行配置裝置的資料。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

字段含義

Ext Reg Number:它們提供DW空間的前四位,用于通路擴充的配置空間。它們與寄存器号結合,建立通路1024 DW(4096位元組)空間所需的10位位址。對于pci相容的配置空間,該字段必須為零。

Register Number:配置DW空間的較低的8位指定了寄存器号。最低的兩個位總是零,強制dwl對齊通路。

Bus Number+Device Function Number 決定唯一目标裝置。

例子:仿真模型的測試

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

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

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

S_axis_tx_tdata:00000004_4a000001, ee101170_10ee0000

可分析為:

{ Fmt ,Type } = 0100_1010;響應配置讀TLP,3DW帶資料

Length = 1dw,

{Requester ID, Tag} = 10ee00

Data =ee101170(傳回配置讀資料)

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

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 配置空間和位址

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

每個pcie裝置都有自己的配置空間,主機通過通路這些空間讀取裝置的資訊,pcie配置空間是協定規定好存放的内容有自己的定義。

PCI總線具有32位資料/位址複用總線,是以其存儲位址空間為2的32次方=4GB。也就是PCI上的所有裝置共同映射到這4GB上,每個PCI裝置占用唯一的一段PCI位址,以便于PCI總線統一尋址。每個PCI裝置通過PCI寄存器中的基位址寄存器來指定映射的首位址。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

2.1.1 BAR(Base Address Register)

Endpoint configuration提供最多6個BAR.Switch提供兩個。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

主機通路配置空間過程:

CPU不能直接通路配置空間,讓RC(Root Complex)去辦。若想讀取pcie外設的資料,先讓RC通過TLP把資料從pcie外設讀到主機記憶體中,後CPU從主機記憶體讀資料。若CPU要往外設寫資料,則先把資料寫到主機記憶體中,然後叫RC通過TLP寫到PCLe裝置。

配置設定映射空間

對于pcie裝置,系統軟體如何為其配置設定映射空間。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

pcie上電後BAR的配置過程:

上電時:系統軟體首先讀取pcie裝置的BAR0(見圖5-33),得到資料。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

後系統軟體往BAR0寫入全1(見圖5-34),如有保持不變,則是廠家固化的。

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

解讀:(圖5-34)低12位沒變,表明裝置空間為4KB,低4位表明是存儲空間屬性(映射類型),是廠家設定好的然後系統軟體根據這些資訊,在系統記憶體空間找到地方來映射着4KB的空間,把配置設定的空間寫入到BAR0.(圖5-35)

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

在pcie拓撲結構中,一條總線下可挂幾個裝置,而每個裝置可以具有對個功能。(見圖5-36)

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)前言一、 PCIE系統架構

标題

在整個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例子工程的代碼分析。

水準有限,如有錯誤,請指教不勝感情。如果您有其他看法,歡迎在下方讨論,謝謝!