基于FPGA的PCI Express應(yīng)用平臺(tái)設(shè)計(jì)
傳統(tǒng)的數(shù)據(jù)傳輸應(yīng)用平臺(tái)是基于PCI總線設(shè)計(jì)實(shí)現(xiàn)的。PCI總線是并行共享總線,具有數(shù)據(jù)傳輸速率慢等缺點(diǎn)。隨著點(diǎn)對(duì)點(diǎn)高速串行PCI Express(Peripheral Component Int erconnect Express,PCI—E)總線的發(fā)展,基于PCI—E總線的新型數(shù)據(jù)傳輸應(yīng)用平臺(tái)已逐漸取代了傳統(tǒng)的基于PCI總線數(shù)據(jù)傳輸應(yīng)用平臺(tái)。PCI-E總線不僅在系統(tǒng)軟件級(jí)與PCI總線兼容,且與PCI等傳統(tǒng)總線相比具有更高的帶寬和靈活的可配置通道數(shù)。
本文引用地址:http://2s4d.com/article/201610/308362.htm以FPGA為核心設(shè)計(jì)數(shù)據(jù)傳輸應(yīng)用平臺(tái),具有硬件電路設(shè)計(jì)簡(jiǎn)單、可重構(gòu)性、提供片上PCI—E IP硬核、并可實(shí)現(xiàn)SOPC功能等特點(diǎn)。所以在計(jì)算機(jī)、通信等領(lǐng)域獲得了廣泛應(yīng)用,更使得高速系統(tǒng)設(shè)計(jì)不必過(guò)多地關(guān)注PCI—E總線的復(fù)雜設(shè)計(jì),大幅提高了設(shè)計(jì)的可靠性,縮短了設(shè)計(jì)的研發(fā)周期。本文設(shè)計(jì)實(shí)現(xiàn)了基于FPGA的PCI Express應(yīng)用平臺(tái)。
1 方案實(shí)施基礎(chǔ)
1.1 PCI-E協(xié)議規(guī)范
PCI—E作為第三代I/O技術(shù)由Intel公布,并隨后被PCI—SIG (Peripheral Component Interconne—ct Special Interest Group)正式命名為“PCI Expres—s。作為串行連接方式的總線,PCI—E協(xié)議規(guī)范定義了一種分層的設(shè)備體系結(jié)構(gòu),包括事務(wù)層(Transaction Layer)、數(shù)據(jù)鏈路層(Data Link Layer)和物理層(PhysicalLayer),所有數(shù)據(jù)的接收和發(fā)送過(guò)程中均以包的形式在各層之間傳輸。PCI—E總線的層次結(jié)構(gòu)如圖1所示。
(1)事務(wù)層是PCI—E中的最上層,負(fù)責(zé)事務(wù)層包(Transaction Layer Packet,TLP)的封裝與分解,并進(jìn)行流速控制管理、數(shù)據(jù)包隊(duì)列管理以及利用多虛擬通道提供服務(wù)質(zhì)量(Quality of Service)。
(2)數(shù)據(jù)鏈路層是PCI—E的中間層,主要負(fù)責(zé)完成數(shù)據(jù)完整性檢查、錯(cuò)誤檢測(cè)與糾正。數(shù)據(jù)鏈路層實(shí)現(xiàn)了包的應(yīng)答和重傳機(jī)制,每個(gè)包用一個(gè)唯一的標(biāo)識(shí)來(lái)確保應(yīng)答可正確地定位請(qǐng)求,若出錯(cuò)則重傳出錯(cuò)標(biāo)識(shí)的所有后續(xù)包,以此保證數(shù)據(jù)的可靠性。
(3)物理層分為邏輯物理子層和電氣物理子層。邏輯物理子層完成與數(shù)據(jù)鏈路層的數(shù)據(jù)交換、8b/10b編解碼、并串和串并轉(zhuǎn)換。電氣物理子層負(fù)責(zé)對(duì)每路串行數(shù)據(jù)進(jìn)行差分驅(qū)動(dòng)傳輸。
(4)設(shè)備核心層并不屬于PCI—E協(xié)議規(guī)范。其主要向事務(wù)層提供封裝TLP所需的數(shù)據(jù),或接收事務(wù)層拆包后的數(shù)據(jù)。
1.2 FPGA器件選型
選用Altera公司的Cyclone IV GX系列FPGA為核心實(shí)現(xiàn)PCI—E數(shù)據(jù)傳輸應(yīng)用平臺(tái)。該系列FPGA器件包含多達(dá)8個(gè)3.125 Gbit·s-1速率的全雙工高速收發(fā)器,并支持物理編碼子層(PCS)、物理介質(zhì)附加子層(PMA)和PCI—E IP硬核,可完全實(shí)現(xiàn)PCI—E基本規(guī)范所需的2.5 Gbit·s-1速率、8b/10b編解碼和PCI—E分層協(xié)議棧,并可減少應(yīng)用平臺(tái)設(shè)計(jì)的難度,且加快了研發(fā)周期。
2 應(yīng)用平臺(tái)設(shè)計(jì)
基于PCI—E總線設(shè)計(jì)了一種Windows XP操作系統(tǒng)下的數(shù)據(jù)傳輸及處理應(yīng)用平臺(tái),滿足PCI—E基本規(guī)范所需的總線傳輸速率和分層體系結(jié)構(gòu),并可通過(guò)多種數(shù)據(jù)傳輸模式來(lái)適用于不同的應(yīng)用場(chǎng)合,如數(shù)據(jù)采集、數(shù)據(jù)下發(fā)和數(shù)據(jù)處理等。應(yīng)用平臺(tái)設(shè)計(jì)包括軟件和硬件兩部分組成,硬件部分包括FPGA內(nèi)部邏輯電路,PCI—E IP硬核等;軟件部分包括上位機(jī)控制程序和應(yīng)用平臺(tái)在Windows操作系統(tǒng)下的驅(qū)動(dòng)程序。
2.1 硬件設(shè)計(jì)
硬件設(shè)計(jì)主要包括PCI—E IP硬核接口、控制模塊、DMA模塊和數(shù)據(jù)處理/接口電路,應(yīng)用平臺(tái)的硬件結(jié)構(gòu)如圖2所示。
(1)PCI—E IP硬核接口完成PCI—E IP硬核與設(shè)備核心層之間的數(shù)據(jù)橋接功能。PCI—E IP硬核實(shí)現(xiàn)了PCI—E的協(xié)議規(guī)范,還提供了與設(shè)備核心層的接口。Cyclone IV GX系列器件提供的PCI—E IP硬核與設(shè)備核心層的接口為一組內(nèi)存映射(Avalon Memory Map)接口,其中包括TX接口、RX接口和CRA接口。
TX接口是指由設(shè)備核心層發(fā)起的數(shù)據(jù)傳輸接口,映射了事務(wù)層存儲(chǔ)器的讀和寫請(qǐng)求事務(wù)。TX接口支持突發(fā)數(shù)據(jù)傳輸,實(shí)現(xiàn)設(shè)備核心層與PCI—E硬核接口的高速數(shù)據(jù)傳輸。
RX接口是指由上位機(jī)發(fā)起的數(shù)據(jù)傳輸接口,是對(duì)事務(wù)層存儲(chǔ)器讀和寫事務(wù)的映射。用作上位機(jī)發(fā)送控制命令的接口。
CRA接口是PCI—E IP硬核配置空間訪問(wèn)接口,通過(guò)此接口可訪問(wèn)PCI—E IP硬核的配置寄存器,并完成對(duì)PCI—E IP硬核的初始化和配置。此接口可由設(shè)備核心層直接訪問(wèn)或上位機(jī)通過(guò)RX接口訪問(wèn)。
(2)控制模塊主要完成設(shè)備核心層數(shù)據(jù)傳輸和數(shù)據(jù)處理控制。上位機(jī)通過(guò)RX接口向控制寄存器寫入命令字,控制模塊則通過(guò)解析命令字,啟動(dòng)相應(yīng)的模塊完成命令。根據(jù)應(yīng)用的不同,控制模塊可由CPU或電路實(shí)現(xiàn)。CPU可通過(guò)編寫不同的應(yīng)用軟件來(lái)完成相對(duì)復(fù)雜的控制,但運(yùn)行速率有限。雖然電路的運(yùn)行速率較高,但復(fù)雜的控制命令將使電路的設(shè)計(jì)變得復(fù)雜。
(3)DMA模塊實(shí)現(xiàn)上位機(jī)與應(yīng)用平臺(tái)之間高速數(shù)據(jù)傳輸。該模塊包含兩個(gè)獨(dú)立的DMA通道,通道1控制數(shù)據(jù)從上位機(jī)到應(yīng)用平臺(tái)的數(shù)據(jù)下發(fā)傳輸;通道2控制數(shù)據(jù)從應(yīng)用平臺(tái)到上位機(jī)的數(shù)據(jù)上傳。上位機(jī)通過(guò)RX接口控制應(yīng)用平臺(tái)上的DMA模塊實(shí)現(xiàn)數(shù)據(jù)下發(fā)和上傳操作。應(yīng)用平臺(tái)上包含下發(fā)和上傳緩存,分別緩存來(lái)自上位機(jī)的下發(fā)數(shù)據(jù)和來(lái)自外設(shè)輸入的上傳數(shù)據(jù)。每個(gè)緩存均由兩塊獨(dú)立的8 kB RAM組成,兩塊8 kB RAM采用乒乓工作方式,實(shí)現(xiàn)不間斷的高速數(shù)據(jù)傳輸。
(4)數(shù)據(jù)處王里/接口電路是PCI—E設(shè)備的功能模塊,實(shí)現(xiàn)PCI—E應(yīng)用平臺(tái)的數(shù)據(jù)處理或接口電路功能,如數(shù)據(jù)采集中實(shí)現(xiàn)采集設(shè)備的接口電路,或在圖像處理中完成對(duì)圖像信號(hào)的處理算法等。
2.2 傳輸模式一
適用于高速數(shù)據(jù)上傳,這種模式主要是將外設(shè)采集到的數(shù)據(jù)通過(guò)PCI—E總線數(shù)據(jù)傳輸應(yīng)用平臺(tái)高速上傳至上位機(jī)。其工作流程如下:
(1)將平臺(tái)配置為上傳模式。
(2)由上位機(jī)通過(guò)RX接口向控制模塊寫入數(shù)據(jù)上傳命令,而控制模塊在接到命令后啟動(dòng)外設(shè)開始采集數(shù)據(jù),外設(shè)將采集的數(shù)據(jù)通過(guò)數(shù)據(jù)處理/接口電路送入FPGA內(nèi)部?jī)蓧K8 kB的緩存RAM中。
(3)控制模塊同時(shí)啟動(dòng)DMA模塊,將FPGA內(nèi)部?jī)蓧K8 kB RAM緩存的輸入數(shù)據(jù)采用乒乓工作方式上傳到上位機(jī)。
(4)當(dāng)DMA數(shù)據(jù)傳輸完成時(shí),通過(guò)RX接口通知上位機(jī)數(shù)據(jù)傳輸完成,上位機(jī)采用查詢方式進(jìn)行數(shù)據(jù)提取等項(xiàng)操作,至此一次傳輸任務(wù)完成。
2.3 傳輸模式二
傳輸模式二適用于高速數(shù)據(jù)下發(fā),這種模式主要是將上位機(jī)數(shù)據(jù)通過(guò)PCI—E總線數(shù)據(jù)傳輸應(yīng)用平臺(tái)高速下發(fā)至外設(shè)。其工作流程如下:
(1)將平臺(tái)配置為下發(fā)模式。
(2)由上位機(jī)通過(guò)RX接口向控制模塊寫入數(shù)據(jù)下發(fā)命令,控制模塊在接到命令后啟動(dòng)DMA模塊從上位機(jī)中讀出數(shù)據(jù),并寫入到8 kB RAM中。
(3)同時(shí)數(shù)據(jù)處理/接口電路采用乒乓工作方式從8 kB RAM中讀出數(shù)據(jù),并輸出到外設(shè)。
(4)當(dāng)DMA數(shù)據(jù)傳輸完成時(shí),通過(guò)RX接口通知上位機(jī)數(shù)據(jù)傳輸完成,上位機(jī)采用查詢方式獲取DMA數(shù)據(jù)傳輸狀態(tài),至此一次傳輸任務(wù)完成。
2.4 傳輸模式三
傳輸模式三適用于高速數(shù)據(jù)上傳或下發(fā),這種模式中PCI—E應(yīng)用平臺(tái)先完成對(duì)上位機(jī)中待處理數(shù)據(jù)的下發(fā),然后將FPGA處理后的數(shù)據(jù)再上傳到上位機(jī)。傳輸模式三可看作模式一與模式二的混合應(yīng)用。其不同之處在于,模式三執(zhí)行模式一操作,或執(zhí)行模式二操作,不能兩種同時(shí)執(zhí)行。模式三適用于高速數(shù)據(jù)靈活收發(fā)的工作方式。相對(duì)于模式一或模式二來(lái)說(shuō),模式三收發(fā)速率較低。
2.5 軟件設(shè)計(jì)
軟件設(shè)計(jì)包括應(yīng)用平臺(tái)的設(shè)備驅(qū)動(dòng)和不同傳輸模式下的控制軟件設(shè)計(jì)。傳輸模式一的控制軟件流程如圖3所示。
傳輸模式二的控制軟件流程如圖4所示。
傳輸模式三的控制軟件流程如圖5所示。
設(shè)備驅(qū)動(dòng)是計(jì)算機(jī)系統(tǒng)中軟硬件的交互接口,此應(yīng)用平臺(tái)的設(shè)備驅(qū)動(dòng)基于Windows下的WDF(Windows Driver Foundation)框架完成。為提高驅(qū)動(dòng)效率及通用性,此設(shè)計(jì)的設(shè)備驅(qū)動(dòng)將內(nèi)核態(tài)的硬件資源全部映射到了應(yīng)用空間,具體控制由各模式控制軟件完成。
3 驗(yàn)證與實(shí)現(xiàn)
應(yīng)用平臺(tái)采用Altera公司型號(hào)為EP4CGX50CF23C6的FPGA器件為核心,研發(fā)設(shè)計(jì)出PCI—E X4通道PCB板卡,使用Verilog HDL語(yǔ)言設(shè)計(jì)FPGA內(nèi)部硬件電路,并在Qusrtus II 12.0開發(fā)環(huán)境下進(jìn)行設(shè)計(jì)實(shí)現(xiàn)?;赪indows XP操作系統(tǒng)編寫PCI—E應(yīng)用平臺(tái)驅(qū)動(dòng),進(jìn)行驗(yàn)證測(cè)試。受所選FPGA器件的PCI—EIP硬核限制,僅以PCI—E基礎(chǔ)規(guī)范1.1版本進(jìn)行驗(yàn)證。在傳輸模式一中,由應(yīng)用平臺(tái)上的FPGA電路模擬外設(shè)生成的隨機(jī)數(shù)作為測(cè)試數(shù)據(jù)包;在傳輸模式二中,由上位機(jī)軟件產(chǎn)生隨機(jī)數(shù)作為測(cè)試數(shù)據(jù)包。測(cè)試數(shù)據(jù)包采用連續(xù)生成方式,生成速率>8Gbit·s-1。測(cè)試結(jié)果采用統(tǒng)計(jì)平均方式,即從一次連續(xù)10 s的數(shù)據(jù)傳輸量中,計(jì)算出數(shù)據(jù)的傳輸速率。
傳輸模式三下Signal Tap II邏輯分析儀捕獲的作業(yè)包長(zhǎng)為2 kB時(shí)的TX接口寫和讀操作時(shí)序圖如圖6和圖7所示。
圖6中txs_addr表示輸出緩沖區(qū)地址,0x800表示輸出緩沖區(qū)起始地址;txs_wdata表示寫數(shù)據(jù);txs_wen為高電平有效寫使能;txs_byteen表示字節(jié)使能;burstcont表示TX接口一次寫突發(fā)的數(shù)據(jù)長(zhǎng)度,0x40表示此次突發(fā)長(zhǎng)度為512字節(jié);txs_waitreq表示TX接口等待請(qǐng)求,為低電平時(shí)方可進(jìn)行TX接口寫操作。對(duì)于2 kB的包,TX接口需進(jìn)行4次寫操作,每次寫512字節(jié)才可將FPGA內(nèi)的上傳緩存RAM中的數(shù)據(jù)包寫到上位機(jī)內(nèi)存中。
圖7中txs_addr表示輸入緩沖區(qū)地址,0x000表示輸入緩沖區(qū)起始地址。txs_rdvalid為高電平時(shí)txs_rdata讀數(shù)據(jù)才為有效數(shù)據(jù)。對(duì)于2 kB的包,TX接口讀操作需進(jìn)行4次,每次讀512 Byte才能將上位機(jī)內(nèi)存中的數(shù)據(jù)包讀到FPCA內(nèi)的下發(fā)緩存RAM中。
驗(yàn)證測(cè)試結(jié)果如表1~表3所示。傳輸模式一和傳輸模式二的測(cè)試速率低于PCI—E理論速率。因?qū)嶋H進(jìn)行DMA傳輸時(shí),需耗費(fèi)一定時(shí)間,同時(shí)數(shù)據(jù)在PCI—E IP硬核傳輸過(guò)程中也不可避免的會(huì)產(chǎn)生一定的時(shí)間損耗,這些降低了數(shù)據(jù)的傳輸速率。傳輸模式三包括有上傳和下發(fā)兩種工作方式,此模式下上傳和下發(fā)不能同時(shí)工作,實(shí)際傳輸速率明顯降低,此外還包含傳輸模式一和二所提及的原因。
4 結(jié)束語(yǔ)
介紹了一種基于FPGA的PCI—E應(yīng)用平臺(tái)設(shè)計(jì),且描述了3種不同的數(shù)據(jù)傳輸模式,以Windows XP操作系統(tǒng)為驗(yàn)證平臺(tái),分別對(duì)3種傳輸模式進(jìn)行了實(shí)現(xiàn)及驗(yàn)證,系統(tǒng)工作穩(wěn)定,資源利用率較高,最高傳輸速率可達(dá)7.12 Gbit·s-1。此應(yīng)用平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn),為需要構(gòu)建各種高速數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)師提供了參考。
評(píng)論