基於FPGA的PCIe接口設計---01_PCIe基本概念

    有好幾個月沒來更新博客啦,但是我並不是在偷懶,已經整理好好幾篇的材料,後面陸續會發表出來,敬請期待!哈哈...

    最近這幾個月都在啃PCIe,各種查資料,看文獻。總算有點頭緒了,這不,就急急忙忙跟大夥分享一下勞動成果,如果有理解得不對的地方,請大神不吝賜教啊!

    好了,言歸正傳。關於基於FPGA的PCIe接口設計,我規劃分3篇來闡述。第一篇:介紹PCIe的基本概念;第二篇:以xilinx提供的例程PIO爲例,仿真、板載測試結果等等;第三篇:承接第一篇的成果,進行DMA的介紹。三篇下來,應該可以算是基本入門了吧。

    文中主要是以xilinx的FPGA展開論述。

1.     PCIE總線概述

1.1             PCIE總線的發展歷史

PCIE總線技術,也叫計算機內部總線技術”Peripheral Component Interconnect”,即外圍組件互聯,其前身是PCI總線,但PCI總線真正應用是隨着Intel的Pentium處理器誕生而開始的,在1994的時候,以絕對的優勢,戰勝了VESA總線,成爲了當時的標準,從此,幾乎所有的外圍設備,從硬盤控制器到聲卡,網卡,都用PCI插槽。

在過去的十幾年中,PCI總線得到了廣泛的應用,雖然PCI總線,在往後的10幾年當中也有所發展,先後出現了64位的PCI-/66MHz、PCI-X,但是隨着微處理器、存儲器和互聯網絡的發展,並行數據傳輸的PCI總線技術逐漸成爲系統整體性能提升的瓶頸,首先是高性能的圖像處理芯片從PCI總線分離出來,形成單獨一種總線技術,那就是AGP總線,隨着千兆以太網和其他高帶寬設備在消費級系統上的出現,PCI133MB/s的帶寬明顯不能滿足這些應用的需求。而串行點對點的PCI Express總線的提出徹底改變了原來PCI總線的並行技術,克服了PCI總線在系統帶寬、傳輸速度等方面的固有缺陷。

PCIe總線規範

總線頻率

Lane的峯值帶寬

編碼方式

單個Lane帶寬

1.x

1.25GHz

2.5GT/s

8/10b編碼

250MB/s

2.x

2.5GHz

5GT/s

8/10b編碼

500MB/s

3.0

4GHz

8GT/s

128/130b編碼

1GB/s

 

1.2             PCIE總線的特點:

a)        在數據傳輸的模式上,採用LVDS串行傳輸方式,一條PCIE通道由2對LVDS差分信號線來實現發送和接收。(添加PCIE收發結構圖)

b)        PCIE採用點對點的串行連接,和PCI等其他總線的共享並行架構相比,能夠爲系統內的所有設備分配獨立的通道資源,充分保障設備的帶寬,提高數據傳輸率。

c)        具有很好的靈活性,一個PCIe物理連接可以根據實際需要配置成x1,x2,x4,x8,x16和x32鏈路模式(lanes)(添加傳輸速率對比的表)

 

1.3             PCIE總線的系統架構

PCIe的基本結構包括根組件(Root Complex,交換器(Switch各種終端設備(Endpoint。根組件可以繼承在北橋芯片中,用於處理器和內存子系統與I/O設備之間的連接,而交換器的功能通常是以軟件形式提供,它包括兩個或者更多的邏輯PCI到PCI的連接橋(PCI-PCI Bridge),以保持與現有的PCI兼容。下圖列出了PCIe 1.0的拓撲結構圖。

 

2.     目前PCIE開發的常用方法

A.       利用專用的PCIe協議接口芯片設計。

專用PCIe協議接口芯片主要功能是實現了PCIe物理層、數據鏈路層和事物層的邏輯控制。常見的橋接芯片有PEX8311,、PEX8111等。雖然這種方式的開發難度不算太大,但是它並不能夠有效發揮出PCIe高帶寬的優勢(橋接芯片提供的通道數有限),也缺乏可配置性核靈活性,難以提高系統性能。

B.       使用可編程邏輯器件的方式來實現。

使用可編程邏輯來實現PCIe也有三種方法。1採用第三方PHY接口器件和非集成GTP接口的FPGA芯片實現,PCIe的物理層協議由PHY接口芯片負責,而事物層以及邏輯設計在FPGA芯片實現,PHY器件和FPGA之間有個PIPE(PCIe的物理接口);2基於軟核的思想,利用FPGA內部的軟核,實現PCIe的協議,FPGA執行並實現PCIe協議中的物理層、事物層,但是部分協議需要用戶自己編寫;並且利用軟核的話,會耗費FPGA內部的邏輯資源。3基於硬核的設計思想,FPGA裏面提供的硬核就相當於完整地實現PCIe中的物理層和數據鏈路層的協議,只需用戶自行設計事物層數據傳輸內容以及配置空間信息,可以大大縮短開發週期。

 

3.     PCIE協議概述

和TCP/IP 協議一樣,PCIe數據傳輸也有它自己的協議,PCIe設備根據協議功能也有分層,下面將分別加以介紹。

3.1             PCIe的事務類型

PCIE運用數據包實現設備之間的數據傳輸。根聯合體可以與各種端點進行通信。一個端點也可以與另一個端點通信。通信就是處理層數據包傳輸。

         PCIe事務可以分爲四大類:

a)        存儲器事務

b)        IO事務

c)        配置事務

d)        消息事務

其中事務是指請求者和完成者之間完成一次消息傳送需要完成的一系列一個或者多個數據包的傳送過程。

報告事務與非報告事務的區別是:請求者發起一個非報告事務給完成者,完成者完成事務之後要發起一個完成數據包給請求者。而報告事務不需要完成者發送完成數據包。

3.2             非報告事務與報告事務

非報告讀事務的傳輸過程爲:請求者發送一個非報告請求TLP給它打算讀取其數據的完成者。其中非報告讀請求TLP包括存儲器讀請求,IO讀請求和配置讀請求,請求者可以是根聯合體或者端點設備。

非報告寫事務與非報告讀事務的傳輸過程類似,請求者發送非報告寫請求TLP給它打算寫入數據的完成者。非報告寫請求TLP包括IO寫請求和配置寫請求。存儲器寫請求和消息請求是報告事務。請求者爲根聯合體或者端點設備。

當完成者接收該請求數據包並解碼其中的內容時,它接收數據。完成者創建一個沒有數據的完成數據包,確認成功接收到寫請求。這是完成的目的。

 

3.3             PCIE的分層結構協議

針對三種設備層,PCIE有三類數據包,每一類語氣中一個設備層相關,與處理層相關的是處理層數據包(TLP),與數據鏈路層相關的是鏈路層數據包(DLLP),與物理層相關的是物理層數據包(PLP)。PCIE事務使用的TLP起源於發送器設備的處理層終止於接收器設備的處理層。當TLP通過發送設備的數據鏈路層和物理層時,他們對TLP的裝備也起作用,在接收TLP鏈路的另外一端,由物理層、數據鏈路層和處理層拆解該TLP。

 

3.4             各種TLP包頭格式

TLP包頭長可能爲3DW或者4DW,其每一位所代表的意義隨着事務類型的不同而不同,其中,所有事務類型TLP包頭的通用字段如圖一所示:

圖一 TLP包頭中的通用字段

 

PCIE的存儲器事務包括兩類:讀請求(完成)和寫請求。圖二和圖三分別給出3DW 和4DW存儲器讀請求包的格式。

圖二 3DW存儲器讀請求TLP包頭

圖三 4DW存儲器讀請求TLP包頭

下圖附上常見的幾種TLP包類型:

4.     Xilinx公司PCIe硬核簡介

PCIe硬核內部結構

從圖中我們可以看出整個PCIe硬核的接口,可以分爲以下4種接口,分別是System(SYS)interface; PCI Express(PCI EXP) inteeface;Transaction(TRN) interface和Configurationinterface(CFG)。其中Host InterfaceCGF)可以對PCIE進行配置,以控制器件的狀態,或者讀取PCIE的配置寄存器的值,讓主機知道器件的狀態。User logicTRN)是需要自己設計的部分,用戶根據自己的需要設計一個符合PCIE規範的local interface將user logic 和Endpoint連起來;PCIe Fabric 是器件的物理接口,接口可以傳輸2.5Gbps的差分信號,它直接與橋或者根聯合體的物理層接口相連;系統時鐘和復位(SYS)提供給PCIE工作時鐘信號和復位信號

XILINX的PCIE通過數據包實現不同模塊之間的信息交換。數據包形成於IP核的傳輸層或數據鏈路層,攜帶必要的信息從發送部分傳輸到接受部分。在接收端對數據包進行處理,一層一層往上傳輸,即從物理層經過數據鏈路層最終傳輸到傳輸層。

根據PCIE規範的定義,IP核包含以下幾個功能:產生並處理傳輸層數據包(TLPs),流控制管理,初始化及電源管理,數據保護,錯誤檢查及重試,串行化,去串行化等功能。根據協議,該核包括如下三層:

傳輸層(處理層,事務層):傳輸層是PCIE的最上層,它的首要功能是接收、緩存和傳輸傳輸層數據包,並負責處理層數據包的合成與分解,進行流量控制管理,數據包隊列管理以及利用對虛擬通道提供服務質量功能。

數據鏈路層:數據鏈路層如同聯繫傳輸層和物理層的媒介,它的首要功能是爲TLPs在兩層之間的傳輸提供可靠性支持,他可以進行錯誤檢查以及恢復,產生並解析數據鏈路層包(DLLP),DLLP被用來在兩個互聯的PCIE的數據鏈路層之間傳輸信息,從而實現電源管理,流量控制以及TLP確認等功能。

物理層物理層可分爲邏輯物理層和電氣物理層,邏輯物理層完成對PLP的合成和分解,8b/10b編碼,10b/8b解碼,並串轉換和串並轉換。電氣物理層負責所有通道的數據差分驅動傳輸與接收。

注意:下面論述的是舊版本總線。新版本的IP核全部換成了AXI4總線接口,道理是相通的,根據IP核的用戶手冊依樣畫葫蘆就是了。

System(SYS) interface:主要包括系統時鐘和復位信號:

系統復位信號是異步復位信號,低電平有效。系統時鐘輸入必須是100MHz或者125MHz,可以在生成ip核的GUI界面中設定。

 

Ø  PCI Express(PCI EXP)PCIe物理接口由發送和接收的差分對組成。一個PCI Express通道包含一對發送信號差分對和一對接收信號差分對。

 

Ø  Transaction(TRN) interface事務層接口,該接口給用戶提供了一種產生和分解TLPs的機制。也可以叫用戶邏輯接口,是連接PCIE和User Logic的接口,他輸出符合PCIE規範的TLP包給用戶邏輯,或者接收來自用戶邏輯的數據包。用戶需要自行設計自己的電路對接收到的數據包進行解碼,然後根據解碼結果做出相應的相應,:如果是非報告事物,用戶邏輯就需要組織自己的數據包通過用戶邏輯接口發送給PCIE。該接口可以細分爲3類,即Common TRN InterfaceTransmit TRN InterfaceReceiveTRN Interface,具體信號的描述如下:

其他部分信號,請參照用戶手冊,這裏就不意義列出了。

Ø  Configuration interfaceCFG:配置接口可以讓用戶訪問並檢測PCIe Endpoint的配置空間,10位的地址信號可以讓用戶尋址所有的1024個DW配置空間。對配置空間的訪問是由配置請求來實現的,配置請求頭有兩個字段來表示配置空間各寄存器的偏移地址,分別是:寄存器數號和擴展寄存器數號。寄存器的數號爲10位地址的低6比特,他可以訪問64個雙字的地址。擴展寄存器數號爲高4比特,他跟寄存器數號的組合可以訪問1024個雙字地址,這樣的設置爲後向兼容PCI設備提供了方便。MSI中斷方式以及傳統的中斷也都是通過配置接口發送。配置接口的具體描述如下:

這裏也僅列出部分信號,詳細的請參考用戶手冊。

5.     Xilinx PCIe硬核配置

PCIe硬核的配置主要需要完成以下內容:基礎參數設置基址地址寄存器(BAR)設置配置寄存器設置等。其中基礎參數設置包括通道寬度、接口頻率、器件ID值以及類碼等。BAR設置是指用戶完成對BAR地址空間的設置。配置寄存器允許用戶定義設置設備功能寄存器和鏈接功能寄存器。設備在默認設置下高級設置被保留。(這一部分留到下一篇再論述...待續)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章