PCI Express總線(xiàn)是新一代的I/O局部總線(xiàn)標(biāo)準(zhǔn),是取代PCI總線(xiàn)的革命性總線(xiàn)架構(gòu)。PCI總線(xiàn)曾經(jīng)是PC體系結(jié)構(gòu)發(fā)展史上的一個(gè)里程碑,但是隨著技術(shù)的不斷發(fā)展,新涌現(xiàn)出的一些外部設(shè)備對(duì)傳輸速度和帶寬有更高的要求,PCI設(shè)計(jì)之初并沒(méi)有考慮這些因素,因此并不能完全滿(mǎn)足這些外部設(shè)備的需求。PCI Express總線(xiàn)正是在這種背景下應(yīng)運(yùn)而生的。
一個(gè)PCI Express連接可以被配置成x1、x2、x4、x8、x12、x16和x32的數(shù)據(jù)帶寬。Xilinx公司的Virtex5系列FPGA芯片內(nèi)嵌PCI-Express-Endpoint BLOCk硬核,為實(shí)現(xiàn)單片可配置PCI-Express總線(xiàn)解決方案提供了可能。
本文在研究PCI-Express接口協(xié)議和PCI-Express Endpoint Block硬核的基礎(chǔ)上,使用Virtex5LXT系列的XC5VLX50T FPGA芯片設(shè)計(jì)PCI- Express接口硬件電路,現(xiàn)YPCI-Express x4總線(xiàn)數(shù)據(jù)的傳輸。
1 PCI-Express總線(xiàn)概述
PCI-Express是一種高性能、通用的I/O互連技術(shù),可以廣泛應(yīng)用于計(jì)算和通訊的平臺(tái)。與傳統(tǒng)的PCI/PCI-X總線(xiàn)相比,PCI Express用高速串行接口替代了PCI-X的并行接口;用點(diǎn)到點(diǎn)的基于Switch的交換式通訊替代了PCI-X的基于總線(xiàn)的通訊;用基于包的傳輸協(xié)議(PACketbasedprotocol)替代TPCI-X的基于總線(xiàn)的傳輸協(xié)議。此外,它還引入了一些新的特性:更強(qiáng)的電源管理、服務(wù)質(zhì)量控制(QoS),支持熱拔插,以及完善的錯(cuò)誤處理和恢復(fù)。
1.1 PCI-Express設(shè)備/拓?fù)浣Y(jié)構(gòu)
PCI-Express的典型拓?fù)浣Y(jié)構(gòu)如圖1所示。PCI-Express協(xié)議中共定義了三種設(shè)備:RootComplex、Endpoint和Switeh。
Root Complex在系統(tǒng)中的位置類(lèi)似于PCI-X中的主橋,它是I/O層次的根,它將CPU和MM連接至I/O部件。每個(gè)Root Complex可以有一個(gè)或多個(gè)PCI-Express Port(Root Port),每個(gè)接口定義一個(gè)層次域。Endpoint是PCI-Express的端點(diǎn)設(shè)備,可以分為PCI-Express Endpoint和LegacyEndpoint兩類(lèi)。
Switch是PCI-Express的交換設(shè)備,可以理解為邏輯上由多個(gè)PCI-PCI橋組合而成,每個(gè)橋?qū)?yīng)于一個(gè)SwiSh端口。從配置軟件來(lái)看,Swi-tch是兩個(gè)或更多個(gè)邏輯的PCI-PCI橋。
1.2 PCI-Express的層次
PCI-Express協(xié)議中定義了三層結(jié)構(gòu):事務(wù)層(Transaction Layer)、數(shù)據(jù)鏈路層(Data Link Layer)和物理層(PhysICal Layer)。其結(jié)構(gòu)如圖2所示。
事務(wù)層主要負(fù)責(zé)組包和拆包,負(fù)責(zé)管理基于信用的流控制。
數(shù)據(jù)鏈路層主要負(fù)責(zé)鏈路的管理和數(shù)據(jù)完整性的管理,包括錯(cuò)誤的檢測(cè)和錯(cuò)誤的糾正。
物理層包含接口的所有電路:驅(qū)動(dòng)器和輸入緩沖、并-串/串-并轉(zhuǎn)換、鎖相環(huán)、阻抗匹配電路,具有接口初始化和維護(hù)的功能。物理層可以更進(jìn)一步細(xì)分為邏輯物理層(Logical Physical Layer)和電氣物理層(EleCTRical Physical Laycr)。邏輯物理層在發(fā)送方向上負(fù)責(zé)從數(shù)據(jù)鏈路層接收包,處理后發(fā)送上鏈路;在接收方向上負(fù)責(zé)將從鏈路收到的包經(jīng)過(guò)處理轉(zhuǎn)發(fā)到數(shù)據(jù)鏈路層。電氣物理層是連接到鏈路的模擬接口,包含每個(gè)通道的差分收發(fā)器。
1.3 PCI-Express的包
對(duì)應(yīng)于協(xié)議定義的三層結(jié)構(gòu),PCI Express定義了三種包:
(1)TLP:對(duì)應(yīng)于事務(wù)層,主要完成協(xié)議中定義的存儲(chǔ)器事務(wù)、I/O事務(wù)、配置事務(wù)和消息事務(wù)。
(2)DLLP:對(duì)應(yīng)于數(shù)據(jù)鏈路層,主要用于鏈路管理的功能,包括和TLP確認(rèn)相關(guān)的ACK/NAK協(xié)議、電源管理和流控制信息的交換。在這一層提供了點(diǎn)到點(diǎn)的鏈路重傳機(jī)制和鏈路層的ECC校驗(yàn),從而提供了可靠的容錯(cuò)機(jī)制。
(3)PLP:對(duì)應(yīng)于物理層,能夠支持物理層的鏈路訓(xùn)練,時(shí)鐘容忍/補(bǔ)償,自治的硬件電源管理。
2Virtex-5Lxt簡(jiǎn)介
綜合考慮了實(shí)現(xiàn)PCI Express總線(xiàn)的周期、難易、成本等因素,最后本文采用了Xilinx公司65nm工藝的Virtex5 LXT系列芯片來(lái)實(shí)現(xiàn)PCI-Express的總線(xiàn)接口以及應(yīng)用。
Virtex 5 Lxt PCIE Endpoint block具有PCI-Express的完整功能,完全符合PCIe基本規(guī)格v1.1版要求,作為FPGA內(nèi)部的硬核,它是可配置的PCIe端點(diǎn)解決方案,大大增加設(shè)計(jì)的靈活性,降低設(shè)計(jì)的RNE費(fèi)用,并且支持1x、2x、4x或8x通道的實(shí)現(xiàn),為系統(tǒng)的功能擴(kuò)張?zhí)峁┝擞行У耐緩健?/p>
該系列芯片內(nèi)嵌PCIE Endpoint block集成了PCIE協(xié)議中的物理層(PHY)、數(shù)據(jù)鏈接層(DLL)和傳輸層(TL),同時(shí)它還實(shí)現(xiàn)了PCI-Express設(shè)備的功能配置寄存器,其結(jié)構(gòu)框圖如圖3所示,包含有以下幾個(gè)接口:時(shí)鐘和復(fù)位接口、配置和狀態(tài)接口、電源管理接口、用戶(hù)接口和傳輸層接口。該P(yáng)CIE Endpoint block完成了PCI-SIG兼容性專(zhuān)題研討會(huì)的嚴(yán)格測(cè)試步驟,保證了產(chǎn)品的兼容性,降低了風(fēng)險(xiǎn);集成了Rocket IO-TMGTP收發(fā)器,該GTP收發(fā)器能提供100Mb/s到3.2Gb/s的串行連接性能,可以支持PCI-Express協(xié)議所需的2.5Gb/s的速率,與PCI-Expre-ss協(xié)議每通道2.5Gb/s工作模式兼容,這使得它在數(shù)據(jù)的編解碼上滿(mǎn)足PCI-Express協(xié)議的要求。本文使用該系列中的XC5VLX50T芯片設(shè)計(jì)PCI-Express接口硬件電路,實(shí)現(xiàn)PCI-Express x4的數(shù)據(jù)傳輸。
3 PCI-Express總線(xiàn)接口設(shè)計(jì)
本文的硬件主要就是單片XC5VLX50T實(shí)現(xiàn)PCI-Express總線(xiàn)接口,并在該FPGA內(nèi)設(shè)計(jì)具體應(yīng)用,完成PCI-Express總線(xiàn)接口的測(cè)試和使用。本文實(shí)現(xiàn)的應(yīng)用有如下幾個(gè)特性:
(1)主機(jī)通過(guò)控制FPGA內(nèi)部的寄存器文件來(lái)啟動(dòng)和停止DMA操作,支持endpoint到root的全雙工DMA讀寫(xiě)。
(2)使用LogICORE產(chǎn)生的Endpoint BLOCk Plus進(jìn)行PCI-Express總線(xiàn)接口設(shè)計(jì)。該硬核集成了PCIE協(xié)議中的物理層、數(shù)據(jù)鏈接層的解析,提供傳輸層接口(TRN)供設(shè)計(jì)者對(duì)相應(yīng)的事務(wù)層數(shù)據(jù)包的處理。
(3)PCI-Express總線(xiàn)接口支持x4通道的實(shí)現(xiàn),主機(jī)操作系統(tǒng)為嵌入式Linux 2.6.10系統(tǒng)。在Windows XP下也進(jìn)行PCI-Express接口測(cè)試。
FPGA是整個(gè)設(shè)計(jì)的最關(guān)鍵部分,主要實(shí)現(xiàn):PCI-Express硬核;在硬核的用戶(hù)接口和傳輸接口實(shí)現(xiàn)PCI-Express傳輸本地總線(xiàn)的時(shí)序邏輯;并且在其內(nèi)部完成DMA控制時(shí)序邏輯。FPGA是PCI-Express總線(xiàn)接口和應(yīng)用模塊數(shù)據(jù)傳輸?shù)耐ǖ?。在Host端使用嵌入式的MPC8548作為主機(jī)系統(tǒng)應(yīng)用CPU,設(shè)計(jì)相應(yīng)的驅(qū)動(dòng)和應(yīng)用程序配合FPGA內(nèi)部代碼的調(diào)試。圖4為該系統(tǒng)的拓?fù)淇驁D。
使用LogiCORE產(chǎn)生的Endpoint Block Plus中,定義了兩個(gè)基地址memory空間,一個(gè)用于DMA寄存器的操作,一個(gè)用于用戶(hù)邏輯空間。本文主要介紹的就是用戶(hù)應(yīng)用層接口的實(shí)現(xiàn),該接口將通過(guò)TRN進(jìn)行相應(yīng)的事務(wù)層數(shù)據(jù)包的處理。
用戶(hù)應(yīng)用層接口主要包括如下幾個(gè)模塊:a.TX Engine模塊;b.RX Engine模塊;c.Egress Data Presenter模塊;d.Read Request Wrapper模塊;e.DMA Control/Status Registers模塊。這幾個(gè)模塊之間的拓?fù)潢P(guān)系如圖5所示。
TX Engine:該模塊主要用于產(chǎn)生和發(fā)送事務(wù)層數(shù)據(jù)包:Posted事務(wù)包(存儲(chǔ)器、I/O、配置讀寫(xiě)事務(wù))、non_Posted事務(wù)包(該總線(xiàn)事務(wù)包分兩步進(jìn)行,首先是發(fā)送端向接收端提交總線(xiàn)讀寫(xiě)請(qǐng)求,之后接收端再向發(fā)送端發(fā)送完成包)和completion(完成)包。該模塊通過(guò)發(fā)送posted memory寫(xiě),non_Posted memory讀,和接收completion包來(lái)完成DMA的讀寫(xiě)請(qǐng)求。該模塊的啟動(dòng)由DMA Control/Status Registers模塊控制。該模塊又包括若干子模塊:posted PACket generator模塊、non posted packet generator模塊、completion packet generator模塊和transmit TRN state machine模塊,上述三個(gè)generator模塊均由transmit TRN狀態(tài)機(jī)模塊控制,該狀態(tài)機(jī)的控制信號(hào)來(lái)自Endpoint Block Plus核以及DMA Control/StatusRegisters模塊。
RX Engine:該模塊主要用于接收Endpoint BlockPlus模塊從RX TRN接口送出的事務(wù)層數(shù)據(jù)包,對(duì)不同的事務(wù)包進(jìn)行解析,根據(jù)相應(yīng)的包做相應(yīng)的處理,該模塊能處理如下三種事務(wù)包:完成包、memory讀包和memory寫(xiě)包。該模塊又包括如下子模塊:接收TRN狀態(tài)機(jī)模塊、接收TRN監(jiān)控模塊、接收數(shù)據(jù)狀態(tài)機(jī)模塊以及兩個(gè)fifo用于存放完成包的接收數(shù)據(jù)和完成包中目的和源的地址以及數(shù)據(jù)包的長(zhǎng)度,用于設(shè)置DMA Control/Status Registers模塊中的各個(gè)狀態(tài)。接收TRN狀態(tài)機(jī)模塊只負(fù)責(zé)TRN接口處的數(shù)據(jù)包的狀態(tài)和接收收據(jù),送給后面的模塊;接收TRN監(jiān)控模塊負(fù)責(zé)根據(jù)不同的TLP包來(lái)分配數(shù)據(jù)和狀態(tài),是直接將帶數(shù)據(jù)的完成包的數(shù)據(jù)寫(xiě)到用戶(hù)應(yīng)用接口fifo,還是讀請(qǐng)求或?qū)懻?qǐng)求TLP包通知TX engine,組成相應(yīng)的包發(fā)送出去或者通知DMA控制器進(jìn)行相應(yīng)的DMA傳送控制;接收數(shù)據(jù)狀態(tài)機(jī)模塊對(duì)接收到的數(shù)據(jù)進(jìn)行相應(yīng)的處理。
Egress Data Presenter:該模塊是專(zhuān)門(mén)為T(mén)X Engine模塊提供發(fā)送數(shù)據(jù)的模塊,要發(fā)送到主機(jī)的數(shù)據(jù)都在該模塊中進(jìn)行處理,它和TX Engine模塊間的數(shù)據(jù)位寬定義為64bit。
Read Request Wrapper:該模塊主要用于TX Engine模塊和RX Engine模塊之間的通信控制接口,本文中設(shè)計(jì)DMA的讀寫(xiě)操作每包可能的數(shù)據(jù)長(zhǎng)度為:1KDW、2KDW、3KDW、4KDW、8 KDW、16 KDW之間可選。該選擇是由主機(jī)通過(guò)寫(xiě)寄存器文件來(lái)進(jìn)行長(zhǎng)度策略選擇的。
DMA Control/Status Register:該模塊主要用于主機(jī)系統(tǒng)通過(guò)控制FPGA內(nèi)部的寄存器文件的設(shè)置來(lái)啟動(dòng)和停止endpoint到root的DMA讀寫(xiě)操作。包括一個(gè)控制寄存器以及若干個(gè)配置寄存器,配置寄存器有主機(jī)的目的地址、源地址信息,本地的目的地址、源地址信息,以及每次DMA的數(shù)據(jù)包長(zhǎng)度等信息。由控制寄存器中的bit位的狀態(tài)來(lái)啟動(dòng)所有的狀態(tài)機(jī)的控制,所以控制寄存器是整個(gè)操作的關(guān)鍵信號(hào)。
評(píng)論
查看更多