PCIE簡介
PCI Express 是用來互聯(lián)計算機和外圍設(shè)備的高速接口總線,是一種能夠應(yīng)用于移動設(shè)備,臺式電腦,工作站,服務(wù)器,嵌入式計算機和通信平臺等。
PCIe的兩個設(shè)備之間可以實現(xiàn)點對點的通信串行通信,如果是多臺設(shè)備需要通過交換器(Switch)進(jìn)行互聯(lián),這樣一個系統(tǒng)可以連接多個設(shè)備。
PCIe總線作為處理器系統(tǒng)的局部總線,其作用與PCI總線類似,主要目的是為了連接處理器系統(tǒng)中的外部設(shè)備,當(dāng)然PCIe總線也可以連接其他處理器系統(tǒng)。在不同的處理器系統(tǒng)中, PCIe體系結(jié)構(gòu)的實現(xiàn)方法略有不同。但是在大多數(shù)處理器系統(tǒng)中,都使用了RC、 Switch和PCIe-to-PCI橋這些基本模塊連接PCIe和PCI設(shè)備。在PCIe總線中,基于PCIe總線的設(shè)備,也被稱為EP(Endpoint)。
計算機通信平臺中 , PCI Express體系結(jié)構(gòu)代表作高性能的外圍組件互聯(lián)方法
1、 由PCI 和PCI-X 體系結(jié)構(gòu)演變而來architectures2、 PCI Express 以一種串行的點對點的方式互聯(lián)兩個設(shè)備3、 信息傳輸基于數(shù)據(jù)包協(xié)議實現(xiàn)4、 PCI Express 互聯(lián)中可實現(xiàn)單通道或多通道的數(shù)據(jù)傳輸5、 PCI Express 協(xié)議目前已經(jīng)發(fā)布4個版本
PCIE的特性如下:
1、點對點傳輸2、 串行總線意味著使用更少的引腳3、 通道數(shù)可選擇: x1, x2, x4, x8, x12, x16, x324、 全雙工通信5、 2.5Gbps / 5.0Gbps6、 基于數(shù)據(jù)包的傳輸協(xié)議
計算機體系結(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)體系中的一個重要的結(jié)構(gòu)部件, RC的提出跟X86系統(tǒng)架構(gòu)密切相關(guān),實際上只有在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只包含一個PCIe總線控制器。這里需要注意Root complex包括root port。3、PCIe Switch:Switch PCIe鏈路通過Switch進(jìn)行鏈路擴展4、PCIe End point:即常見的PCIE終端設(shè)備,FPGA最常用的也是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ù)請求,并將其轉(zhuǎn)換為PCIe總線事務(wù), PCIe總線使用的這些總線事務(wù)在TLP頭中定義。PCIe總線使用的數(shù)據(jù)報文首先在事務(wù)層中形成, 這個數(shù)據(jù)報文也被稱之為事務(wù)層數(shù)據(jù)報文,即TLP。(解釋:主要意思也就是事務(wù)層將數(shù)據(jù)封裝成TLP包發(fā)給下層使用)2、數(shù)據(jù)連路層:TLP在經(jīng)過數(shù)據(jù)鏈路層時被加上Sequence Number前綴和CRC后綴,然后發(fā)向物理層。3、物理層:PCIe的電氣特性、電路等。在PCIe鏈路可以正常工作之前,需要對PCIe鏈路進(jìn)行鏈路訓(xùn)練,在這個過程中,就會用。
LTSSM狀態(tài)機。LTSSM全稱是Link Training and Status State Machine。這個狀態(tài)機在PCIe總線的物理層之中。狀態(tài)轉(zhuǎn)移圖如下:
Detect狀態(tài)是PCIe鏈路訓(xùn)練的開端。此外, Detect,顧名思義,需要實現(xiàn)檢測工作。因為在這個狀態(tài)時,發(fā)送端TX需要檢測接收端RX是否存在且可以正常工作,如果檢測正常,才能進(jìn)入其他狀態(tài)。判斷RX是否存在的邏輯比較簡單,就是通過一個“Detect logic”電路比較RC時間常數(shù)的大小。
從上圖可以發(fā)現(xiàn)PCIe終端連接上,時間常數(shù)會變大。多以也就以此決定Detect狀態(tài)是否進(jìn)入下一個狀態(tài)。
Polling 狀態(tài)的目的是“對暗號”,實現(xiàn)無障礙溝通。進(jìn)入這個狀態(tài)后, TX和RX之間通過發(fā)送TS1、 TS2 OS序列來確定Bit Lock, Symbol Lock以及解決Lane極性反轉(zhuǎn)的問題。
Bit Lock: 在Bit傳輸過程中, RX PLL鎖定TX Clock頻率,這個過程稱為RX實現(xiàn)“Bit Lock。(解釋:也就是位同步)
Symbol Lock: RX端串并轉(zhuǎn)化器知道如何區(qū)別一個有效的10-bit Symbol,這個過程稱為“Symbol Lock”。 這里用到的是COM控制符。(解釋:也就是幀同步)
常見的視頻方案如下:
FPGA中PCIE的實現(xiàn):
1、7系列FPGA支持實現(xiàn)Gen1與Gen2的PCIE協(xié)議2、Virtex-7 FPGA支持實現(xiàn)Gen3的PCIE協(xié)議3、UltraScale與UltraScale+支持Gen3的PCIE協(xié)議4、支持x1,x2,x4,x8,x16lanes的通路5、PCIE的硬核使用了GTP接口用來串行傳輸數(shù)據(jù)
PCIE的速度傳輸速度如下:
FPGA中PCIE硬核的介紹,整體框圖如下:
1、該硬核PCIE支持Endpoint和Root Port2、支持AXI4-Stream用戶接口:x1, x2, x4, 和x8 lanes; 64-bit 和128-bit位寬
Root Port簡要介紹
Xilinx FPGAs支持硬核root port,但是沒有硬核root complex。root complex包括一個或多個root port、內(nèi)存,IO子系統(tǒng)等等。root port只是提供給switch或者endpoint連接的端口。二者之間的關(guān)系如下:
root port經(jīng)常使用在簡單的設(shè)計中,比如與單個的endpoint相連。root complex則有配套的軟件環(huán)境與復(fù)雜的設(shè)計。
FPGA構(gòu)建root port的常見案例如下:
FPGA構(gòu)建root complex的常見案例如下:
root port與endpoint也有許多不同點。root port使用Type 1配置頭空間。endpoint使用Type 0配置頭空間。兩者主要的區(qū)別如下:
PCIE協(xié)議簡述
PCIE的地址空間
PCI Express實現(xiàn)了四種地址空間:
1、 PCIe配置空間(多達(dá)4KB)– 必須有,每個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型:
– 用于配置端點設(shè)備– 由根復(fù)合體發(fā)起,配置預(yù)定義的PCI系統(tǒng)端點設(shè)備頭部區(qū)域– 設(shè)備號/ID號– BAR
Type1型:
– 用于配置Switches/Bridges/end point
PCIE TLP包的數(shù)據(jù)類型
上面已經(jīng)講解PCIE分別包括事務(wù)層、數(shù)據(jù)鏈路層、物理層,每一層對TLP包的作用如下:
這里的3DW與4DW其實是與地址是32位還是64位掛鉤。
具體TLP包在每層協(xié)議的情況如下:
PCIE中TLP包的類型如下:
PCIE的路由類型
PCIE每一種請求或者完成報文頭都會有類型標(biāo)注,每個數(shù)據(jù)包的路由都基于以下三種方式:
1、 地址路由2、 ID 路由3、 隱含式路由
端點的地址路由
端點設(shè)備檢查TLP包中的地址與BAR中所有地址進(jìn)行比較,如果不屬于本端點范圍,則拒絕。
端點的ID路由
端點設(shè)備檢查TLP包里的 總線 ID 和 設(shè)備 ID 功能ID是否與本端點一致,這些信息在Type0的配置信息里可以捕獲。
不同類型的TLP包與路由類型的對應(yīng)關(guān)系如下:
PCIE點對點的傳輸框圖
1、配置IO傳輸
2、DMA傳輸
3、end point與end piont之間的傳輸
PCIE的中斷類型
PCIE的中斷類型主要有兩種:
1、MSI:消息中斷2、INTx:引腳中斷
真正的PCIe設(shè)備:必須使用MSI發(fā)送中斷,可選擇性地支持INTx消息。
PCI設(shè)備:必須支持INTx消息
PCIE的理論帶寬
Gen2單向鏈路速率5Gbps
1、 使用8B/10B編碼,產(chǎn)生20%的數(shù)據(jù)開銷2、 理論帶寬=鏈路速率 80% 通道數(shù)3、 對于單通道:– Gen1: 2.5Gbps0.8=250MBps– Gen2: 5Gbps0.8=500MBps– Gen3: 8Gbps*1=1GBps4、 更多的開銷是由協(xié)議導(dǎo)致– 數(shù)據(jù)頭– 校驗位– 鏈路訓(xùn)練– 錯誤通信
TLP包格式簡述
上面我們已經(jīng)講解了TLP包常見的類型,那么這部分內(nèi)容講解每種TLP包的具體格式。
一個TLP包的格式如下:
每位的詳細(xì)信息如下:
接下來對上面的每一位進(jìn)行粗略的介紹。
1、Fmt :用來指明TLP包是3DW還是4DW2、Type :用來確定TLP包的類型,Memory read or writeCompletion packetConfiguration packetMessage3、Traffic Class:除了MemoryRead/Write TLPs必須是零,一般情況是默認(rèn)為04、Attr :包含有關(guān)處理事務(wù)時核心行為的特定信息5、TD :當(dāng)該位位1是,TLP包中包括CRC檢驗,為零時不包括CRC校驗6、EP :指示此TLP包含錯誤且應(yīng)忽略7、AT :地址類型,一般默認(rèn)為零即可。Default/Untranslated (00)Translation Request (10)Translated (11)8、Length Field :描述TLP包種有效數(shù)據(jù)的長度,注意單位時DW,最大長度時1024個DW長度9、First/Last Byte Enables:四位中的每一位分別對應(yīng)TLP包中的第一個DW和最后一個DW中的每個字節(jié)是否有效。一個DW正好也是4個字節(jié)。
Memory Write TLP Header格式
Memory Write TLP Header格式如下:
3DW的TLP包頭:
4DW的TLP包頭:
1、Requester ID:包括bus, device, and function numbers這些在ID路由的時候時必備信息2、Tag :由用戶定義,具體的內(nèi)容與作用,用戶進(jìn)行商議。3、Address:byte address,最低的兩位總是零對齊到DWord尋址。
Memory Read TLP Header格式
Memory Read TLP Header格式如下:
3DW的TLP包頭:
4DW的TLP包頭:
1、Tag – 這里得Tag主要用于返回得CplDs包得重組,因為飯回來得完成包不一定是按照順序返回的。
這里沒有什么新的位介紹,在前面我們已經(jīng)介紹完畢。
Memory Read 是 Non‐Posted:Non‐Posted的請求總是生成一個完成包來回應(yīng)。除非出現(xiàn)錯誤,否則Posted的請求永遠(yuǎn)不會生成完成包。一般的MRd會產(chǎn)生一個帶有數(shù)據(jù)包的完成。一個讀請求可以生成一個或多個完成包。
Completions TLPs格式
1、Tag :這里需要注意Tag標(biāo)志主要是為了接收端按照發(fā)送的順序組包2、Lower Address :指示第一個啟用的數(shù)據(jù)字節(jié)的字節(jié)地址的低位,較低的地址和長度不能跨越一個RCBRCB: Read Completion Boundary3、Byte count :表示在滿足請求之前剩余的字節(jié)數(shù)4、Completion status :只是完成包的狀態(tài):Successful completion (“000”)Unsupported request (“001”)Configuration request retry status (“010”)Completer abort (“100”)5、Requester ID :請求CplD的設(shè)備的ID(bus, device, function)6、Completer ID :正在構(gòu)建CplD的設(shè)備的ID(bus, device, function)返回的時候必須是RCB的整數(shù)倍。而且第一個要與RCB對齊,且不能超過MPS,這里給出一個官方的示例:
示例1:
示例2:
題目:
解答:
Message/Message with Data TLP格式
因為一般用不到我們進(jìn)行手動組信息包,所以這里我們也就不詳細(xì)介紹。
PCIE IP核配置需要的注意點
這里簡單介紹一下PCIE核配置過程中的注意點,這次我們先不使用XDMA IP,使用下面的PCIE IP:
為了盡可能多的了解PCIE IP中的細(xì)節(jié),我們選擇高級IP定制:
1、選擇高級IP定制,供用戶選擇的功能增多2、這里可以選擇這個PCIE IP核是當(dāng)作endpoint還是root port來使用3、這是指明這個PCIE IP再硬件中的位置編號4、指明PCIE的lanes數(shù)目5、指明一條lanes的最大通信速度6、將PCIE轉(zhuǎn)換成AXI4協(xié)議的時鐘7、將PCIE轉(zhuǎn)換成AXI4協(xié)議的數(shù)據(jù)位寬8、PCIE IP的參考頻率
1、廠商ID,專屬于Xilinx的PCIE的ID,是固定的。2、設(shè)備ID,與廠商ID一起指明數(shù)據(jù)的類型,被使用選擇PCIE上位機的軟件驅(qū)動。3、版本ID,指明使用該PCIE IP進(jìn)行設(shè)置的版本4、子廠商ID,用來更近一步的區(qū)分Xilinx旗下的廠商5、子系統(tǒng)ID,用來識別板卡的的ID
上面的值一般默認(rèn)即可,不需要做太多的處理
1、選擇使能Bar空間。這里需要注意的是,root port對于endpoint的訪問只能訪問bar空間,而endpoint對root port的讀寫操作可以訪問整個內(nèi)存。2、選擇Bar的地址是32位還是64位,空間大小一般選擇1K即可,只是用來傳輸一些命令。其值的大小與空間大小有關(guān),具體的關(guān)系這里不清楚。
上面整個設(shè)置,再PCIE的頭配置空間中均有體現(xiàn):
1、這里可以加上buffer進(jìn)行優(yōu)化,其余的默認(rèn)即可。
1、這里我們一般不選擇共享邏輯
1、引腳中斷,傳統(tǒng)意義下的中斷,在PCIE中基本上不再使用2、消息中斷,在PCIE中較為常用
參考文獻(xiàn)[1]V3學(xué)院
總結(jié)
由于水平有限,對PCIE的認(rèn)識不到位,文章中的闡述有可能存在錯誤,歡迎大家指正。編輯:黃飛
評論
查看更多