當(dāng)前位置:首頁(yè) > > ZYNQ
	

PCIE簡(jiǎn)介

PCI Express 是用來(lái)互聯(lián)計(jì)算機(jī)和外圍設(shè)備的高速接口總線,是一種能夠應(yīng)用于移動(dòng)設(shè)備,臺(tái)式電腦,工作站,服務(wù)器,嵌入式計(jì)算機(jī)和通信平臺(tái)等。


PCIe的兩個(gè)設(shè)備之間可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的通信串行通信,如果是多臺(tái)設(shè)備需要通過(guò)交換器(Switch)進(jìn)行互聯(lián),這樣一個(gè)系統(tǒng)可以連接多個(gè)設(shè)備。


PCIe總線作為處理器系統(tǒng)的局部總線,其作用與PCI總線類(lèi)似,主要目的是為了連接處理器系統(tǒng)中的外部設(shè)備,當(dāng)然PCIe總線也可以連接其他處理器系統(tǒng)。在不同的處理器系統(tǒng)中, PCIe體系結(jié)構(gòu)的實(shí)現(xiàn)方法略有不同。但是在大多數(shù)處理器系統(tǒng)中,都使用了RC、 Switch和PCIe-to-PCI這些基本模塊連接PCIe和PCI設(shè)備。在PCIe總線中,基于PCIe總線的設(shè)備,也被稱(chēng)為EP(Endpoint)。


計(jì)算機(jī)通信平臺(tái)中 , PCI Express體系結(jié)構(gòu)代表作高性能的外圍組件互聯(lián)方法


1、 由PCI 和PCI-X 體系結(jié)構(gòu)演變而來(lái)architectures

2、 PCI Express 以一種串行的點(diǎn)對(duì)點(diǎn)的方式互聯(lián)兩個(gè)設(shè)備

3、 信息傳輸基于數(shù)據(jù)包協(xié)議實(shí)現(xiàn)

4、 PCI Express 互聯(lián)中可實(shí)現(xiàn)單通道或多通道的數(shù)據(jù)傳輸

5、 PCI Express 協(xié)議目前已經(jīng)發(fā)布4個(gè)版本



PCIE的特性如下:


1、點(diǎn)對(duì)點(diǎn)傳輸

2、 串行總線意味著使用更少的引腳

3、 通道數(shù)可選擇: x1, x2, x4, x8, x12, x16, x32

4、 全雙工通信

5、 2.5Gbps / 5.0Gbps

6、 基于數(shù)據(jù)包的傳輸協(xié)議


計(jì)算機(jī)體系結(jié)構(gòu)中PCIe的應(yīng)用架構(gòu)如下:



從上面我們可以看出PCIE應(yīng)用架構(gòu)主要包括四部分:


1、FSB總線CPU交互總線:FSB總線(Front Side Bus)是CPU和DDR內(nèi)存交互的總線

2、Root Complex:RC (Root complex)是PCIe結(jié)構(gòu)體系中的一個(gè)重要的結(jié)構(gòu)部件, RC的提出跟X86系統(tǒng)架構(gòu)密切相關(guān),實(shí)際上只有在x86架構(gòu)中才有標(biāo)準(zhǔn)的RC規(guī)范定義,而在其他系統(tǒng)中并不存在標(biāo)準(zhǔn)定義的RC的全部功能。例如X86的架構(gòu)中包含DDR控制器和FSB to PCIe的橋, 而ZynqSoc芯片架構(gòu)中包含AXI to PCIe的橋和DDR控制器,PowerPc只包含一個(gè)PCIe總線控制器。這里需要注意Root complex包括root port。

3、PCIe Switch:Switch PCIe鏈路通過(guò)Switch進(jìn)行鏈路擴(kuò)展

4、PCIe End point:即常見(jiàn)的PCIE終端設(shè)備,F(xiàn)PGA最常用的也是End point。


FPGA在PCIE中可以成為Root Complex、Switch和 End point:



PCIe總線層次結(jié)構(gòu)主要包括三層主要是事務(wù)層、數(shù)據(jù)鏈路層、物理層。


1、事務(wù)層:PCIe總線層次結(jié)構(gòu)的最高層,該層次將接收PCIe設(shè)備核心層的數(shù)據(jù)請(qǐng)求,并將其轉(zhuǎn)換為PCIe總線事務(wù), PCIe總線使用的這些總線事務(wù)在TLP頭中定義。PCIe總線使用的數(shù)據(jù)報(bào)文首先在事務(wù)層中形成, 這個(gè)數(shù)據(jù)報(bào)文也被稱(chēng)之為事務(wù)層數(shù)據(jù)報(bào)

文,即TLP。(解釋?zhuān)褐饕馑家簿褪鞘聞?wù)層將數(shù)據(jù)封裝成TLP包發(fā)給下層使用)

2、數(shù)據(jù)連路層:TLP在經(jīng)過(guò)數(shù)據(jù)鏈路層時(shí)被加上Sequence Number前綴和CRC后綴,然后發(fā)向物理層。

3、物理層:PCIe的電氣特性、電路等。在PCIe鏈路可以正常工作之前,需要對(duì)PCIe鏈路進(jìn)行鏈路訓(xùn)練,在這個(gè)過(guò)程中,就會(huì)用。


LTSSM狀態(tài)機(jī)。LTSSM全稱(chēng)是Link Training and Status State Machine。這個(gè)狀態(tài)機(jī)在PCIe總線的物理層之中。狀態(tài)轉(zhuǎn)移圖如下:



Detect狀態(tài)是PCIe鏈路訓(xùn)練的開(kāi)端。此外, Detect,顧名思義,需要實(shí)現(xiàn)檢測(cè)工作。因?yàn)樵谶@個(gè)狀態(tài)時(shí),發(fā)送端TX需要檢測(cè)接收端RX是否存在且可以正常工作,如果檢測(cè)正常,才能進(jìn)入其他狀態(tài)。判斷RX是否存在的邏輯比較簡(jiǎn)單,就是通過(guò)一個(gè)“Detect logic”電路比較RC時(shí)間常數(shù)的大小。



從上圖可以發(fā)現(xiàn)PCIe終端連接上,時(shí)間常數(shù)會(huì)變大。多以也就以此決定Detect狀態(tài)是否進(jìn)入下一個(gè)狀態(tài)。


Polling 狀態(tài)的目的是"對(duì)暗號(hào)",實(shí)現(xiàn)無(wú)障礙溝通。進(jìn)入這個(gè)狀態(tài)后, TX和RX之間通過(guò)發(fā)送TS1、 TS2 OS序列來(lái)確定Bit Lock, Symbol Lock以及解決Lane極性反轉(zhuǎn)的問(wèn)題。


Bit Lock: 在Bit傳輸過(guò)程中, RX PLL鎖定TX Clock頻率,這個(gè)過(guò)程稱(chēng)為RX實(shí)現(xiàn)"Bit Lock。(解釋?zhuān)阂簿褪俏煌剑?/span>


Symbol Lock: RX端串并轉(zhuǎn)化器知道如何區(qū)別一個(gè)有效的10-bit Symbol,這個(gè)過(guò)程稱(chēng)為“Symbol Lock”. 這里用到的是COM控制符。(解釋?zhuān)阂簿褪菐剑?/span>



常見(jiàn)的視頻方案如下:



FPGA中PCIE的實(shí)現(xiàn):


1、7系列FPGA支持實(shí)現(xiàn)Gen1與Gen2的PCIE協(xié)議

2、Virtex-7 FPGA支持實(shí)現(xiàn)Gen3的PCIE協(xié)議

3、UltraScale與UltraScale+支持Gen3的PCIE協(xié)議

4、支持x1,x2,x4,x8,x16lanes的通路

5、PCIE的硬核使用了GTP接口用來(lái)串行傳輸數(shù)據(jù)


PCIE的速度傳輸速度如下:



FPGA中PCIE硬核的介紹,整體框圖如下:



1、該硬核PCIE支持Endpoint和Root Port

2、支持AXI4-Stream用戶(hù)接口:

x1, x2, x4, 和x8 lanes; 64-bit 和128-bit位寬


Root Port簡(jiǎn)要介紹


Xilinx FPGAs支持硬核root port,但是沒(méi)有硬核root complex。root complex包括一個(gè)或多個(gè)root port、內(nèi)存,IO子系統(tǒng)等等。root port只是提供給switch或者endpoint連接的端口。二者之間的關(guān)系如下:



root port經(jīng)常使用在簡(jiǎn)單的設(shè)計(jì)中,比如與單個(gè)的endpoint相連。root complex則有配套的軟件環(huán)境與復(fù)雜的設(shè)計(jì)。


FPGA構(gòu)建root port的常見(jiàn)案例如下:



FPGA構(gòu)建root complex的常見(jiàn)案例如下:



root port與endpoint也有許多不同點(diǎn)。root port使用Type 1配置頭空間。endpoint使用Type 0配置頭空間。兩者主要的區(qū)別如下:



PCIE協(xié)議簡(jiǎn)述


PCIE的地址空間


PCI Express實(shí)現(xiàn)了四種地址空間:


1、 PCIe配置空間(多達(dá)4KB)

– 必須有,每個(gè)PCI設(shè)備都有其映射到內(nèi)存上的配置空間

– 前256字節(jié)與PCI兼容

2、 PCIe內(nèi)存映射空間

– 可選的,根據(jù)設(shè)備功能選擇是否需要映射內(nèi)存空間

3、 PCIe IO映射空間

– 可選的

4、PCIe消息空間

其中PCIe消息空間主要用于中斷的使用,內(nèi)存映射空間用于大量數(shù)據(jù)的傳輸,IO映射空間用于少量數(shù)據(jù)的傳輸。



Type0型:


– 用于配置端點(diǎn)設(shè)備

– 由根復(fù)合體發(fā)起,配置預(yù)定義的PCI系統(tǒng)端點(diǎn)設(shè)備頭部區(qū)域

– 設(shè)備號(hào)/ID號(hào)

– BAR


Type1型:


– 用于配置Switches/Bridges/end point


PCIE TLP包的數(shù)據(jù)類(lèi)型


上面已經(jīng)講解PCIE分別包括事務(wù)層、數(shù)據(jù)鏈路層、物理層,每一層對(duì)TLP包的作用如下:



這里的3DW與4DW其實(shí)是與地址是32位還是64位掛鉤。


具體TLP包在每層協(xié)議的情況如下:



PCIE中TLP包的類(lèi)型如下:



PCIE的路由類(lèi)型


PCIE每一種請(qǐng)求或者完成報(bào)文頭都會(huì)有類(lèi)型標(biāo)注,每個(gè)數(shù)據(jù)包的路由都基于以下三種方式:


1、 地址路由

2、 ID 路由

3、 隱含式路由


端點(diǎn)的地址路由


端點(diǎn)設(shè)備檢查T(mén)LP包中的地址與BAR中所有地址進(jìn)行比較,如果不屬于本端點(diǎn)范圍,則拒絕。


端點(diǎn)的ID路由


端點(diǎn)設(shè)備檢查T(mén)LP包里的 總線 ID 和 設(shè)備 ID 功能ID是否與本端點(diǎn)一致,這些信息在Type0的配置信息里可以捕獲。


不同類(lèi)型的TLP包與路由類(lèi)型的對(duì)應(yīng)關(guān)系如下:



PCIE點(diǎn)對(duì)點(diǎn)的傳輸框圖


1、配置IO傳輸



2、DMA傳輸



3、end point與end piont之間的傳輸



PCIE的中斷類(lèi)型


PCIE的中斷類(lèi)型主要有兩種:


1、MSI:消息中斷

2、INTx:引腳中斷


真正的PCIe設(shè)備:必須使用MSI發(fā)送中斷,可選擇性地支持INTx消息。


PCI設(shè)備:必須支持INTx消息



PCIE的理論帶寬


Gen2單向鏈路速率5Gbps


1、 使用8B/10B編碼,產(chǎn)生20%的數(shù)據(jù)開(kāi)銷(xiāo)

2、 理論帶寬=鏈路速率 80% 通道數(shù)

3、 對(duì)于單通道:

– Gen1: 2.5Gbps0.8=250MBps

– Gen2: 5Gbps0.8=500MBps

– Gen3: 8Gbps*1=1GBps

4、 更多的開(kāi)銷(xiāo)是由協(xié)議導(dǎo)致

– 數(shù)據(jù)頭

– 校驗(yàn)位

– 鏈路訓(xùn)練

– 錯(cuò)誤通信


TLP包格式簡(jiǎn)述


上面我們已經(jīng)講解了TLP包常見(jiàn)的類(lèi)型,那么這部分內(nèi)容講解每種TLP包的具體格式。


一個(gè)TLP包的格式如下:



每位的詳細(xì)信息如下:



接下來(lái)對(duì)上面的每一位進(jìn)行粗略的介紹。


1、Fmt :用來(lái)指明TLP包是3DW還是4DW

2、Type :用來(lái)確定TLP包的類(lèi)型,

Memory read or write

Completion packet

Configuration packet

Message

3、Traffic Class:除了MemoryRead/Write TLPs必須是零,一般情況是默認(rèn)為0

4、Attr :包含有關(guān)處理事務(wù)時(shí)核心行為的特定信息

5、TD :當(dāng)該位位1是,TLP包中包括CRC檢驗(yàn),為零時(shí)不包括CRC校驗(yàn)

6、EP :指示此TLP包含錯(cuò)誤且應(yīng)忽略

7、AT :地址類(lèi)型,一般默認(rèn)為零即可。

Default/Untranslated (00)

Translation Request (10)

Translated (11)

8、Length Field :描述TLP包種有效數(shù)據(jù)的長(zhǎng)度,注意單位時(shí)DW,最大長(zhǎng)度時(shí)1024個(gè)DW長(zhǎng)度

9、First/Last Byte Enables:四位中的每一位分別對(duì)應(yīng)TLP包中的第一個(gè)DW和最后一個(gè)DW中的每個(gè)字節(jié)是否有效。一個(gè)DW正好也是4個(gè)字節(jié)。


Memory Write TLP Header格式


Memory Write TLP Header格式如下:


3DW的TLP包頭:



4DW的TLP包頭:



1、Requester ID:包括bus, device, and function numbers這些在ID路由的時(shí)候時(shí)必備信息

2、Tag :由用戶(hù)定義,具體的內(nèi)容與作用,用戶(hù)進(jìn)行商議。

3、Address:byte address,最低的兩位總是零對(duì)齊到DWord尋址。


Memory Read TLP Header格式


Memory Read TLP Header格式如下:


3DW的TLP包頭:



4DW的TLP包頭:



1、Tag – 這里得Tag主要用于返回得CplDs包得重組,因?yàn)轱埢貋?lái)得完成包不一定是按照順序返回的。


這里沒(méi)有什么新的位介紹,在前面我們已經(jīng)介紹完畢。


Memory Read 是 Non‐Posted:

Non‐Posted的請(qǐng)求總是生成一個(gè)完成包來(lái)回應(yīng)。除非出現(xiàn)錯(cuò)誤,否則Posted的請(qǐng)求永遠(yuǎn)不會(huì)生成完成包。一般的MRd會(huì)產(chǎn)生一個(gè)帶有數(shù)據(jù)包的完成。一個(gè)讀請(qǐng)求可以生成一個(gè)或多個(gè)完成包。


Completions TLPs格式



1、Tag :這里需要注意Tag標(biāo)志主要是為了接收端按照發(fā)送的順序組包

2、Lower Address :指示第一個(gè)啟用的數(shù)據(jù)字節(jié)的字節(jié)地址的低位,較低的地址和長(zhǎng)度不能跨越一個(gè)RCB

RCB: Read Completion Boundary

3、Byte count :表示在滿足請(qǐng)求之前剩余的字節(jié)數(shù)

4、Completion status :只是完成包的狀態(tài):

Successful completion (“000”)

Unsupported request (“001”)

Configuration request retry status (“010”)

Completer abort (“100”)

5、Requester ID :請(qǐng)求CplD的設(shè)備的ID(bus, device, function)

6、Completer ID :正在構(gòu)建CplD的設(shè)備的ID(bus, device, function)

返回的時(shí)候必須是RCB的整數(shù)倍。而且第一個(gè)要與RCB對(duì)齊,且不能超過(guò)MPS,這里給出一個(gè)官方的示例:


示例1:



示例2:


題目:



解答:



Message/Message with Data TLP格式



因?yàn)橐话阌貌坏轿覀冞M(jìn)行手動(dòng)組信息包,所以這里我們也就不詳細(xì)介紹。


PCIE IP核配置需要的注意點(diǎn)


這里簡(jiǎn)單介紹一下PCIE核配置過(guò)程中的注意點(diǎn),這次我們先不使用XDMA IP,使用下面的PCIE IP:



為了盡可能多的了解PCIE IP中的細(xì)節(jié),我們選擇高級(jí)IP定制:



1、選擇高級(jí)IP定制,供用戶(hù)選擇的功能增多

2、這里可以選擇這個(gè)PCIE IP核是當(dāng)作endpoint還是root port來(lái)使用

3、這是指明這個(gè)PCIE IP再硬件中的位置編號(hào)

4、指明PCIE的lanes數(shù)目

5、指明一條lanes的最大通信速度

6、將PCIE轉(zhuǎn)換成AXI4協(xié)議的時(shí)鐘

7、將PCIE轉(zhuǎn)換成AXI4協(xié)議的數(shù)據(jù)位寬

8、PCIE IP的參考頻率



1、廠商ID,專(zhuān)屬于Xilinx的PCIE的ID,是固定的。

2、設(shè)備ID,與廠商ID一起指明數(shù)據(jù)的類(lèi)型,被使用選擇PCIE上位機(jī)的軟件驅(qū)動(dòng)。

3、版本ID,指明使用該P(yáng)CIE IP進(jìn)行設(shè)置的版本

4、子廠商ID,用來(lái)更近一步的區(qū)分Xilinx旗下的廠商

5、子系統(tǒng)ID,用來(lái)識(shí)別板卡的的ID


上面的值一般默認(rèn)即可,不需要做太多的處理



1、選擇使能Bar空間。這里需要注意的是,root port對(duì)于endpoint的訪問(wèn)只能訪問(wèn)bar空間,而endpoint對(duì)root port的讀寫(xiě)操作可以訪問(wèn)整個(gè)內(nèi)存。

2、選擇Bar的地址是32位還是64位,空間大小一般選擇1K即可,只是用來(lái)傳輸一些命令。其值的大小與空間大小有關(guān),具體的關(guān)系這里不清楚。


上面整個(gè)設(shè)置,再PCIE的頭配置空間中均有體現(xiàn):



1、這里可以加上buffer進(jìn)行優(yōu)化,其余的默認(rèn)即可。



1、這里我們一般不選擇共享邏輯



1、引腳中斷,傳統(tǒng)意義下的中斷,在PCIE中基本上不再使用

2、消息中斷,在PCIE中較為常用


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉