基于FPGA的雙緩沖模式PCI Express總線設(shè)計(jì)方案
圖4 PCIE驅(qū)動(dòng)中的數(shù)據(jù)接收
3.2 PCIE核配置
Virtex6 PCIE Endpoint Block[4]集成了傳輸層(TL)、數(shù)據(jù)鏈路層(DLL)和物理層(PL)協(xié)議,它完全符合PCIE基本規(guī)范,可配置性增加了設(shè)計(jì)的靈活性,降低了成本。其功能框圖與接口如圖5所示。其中收發(fā)器通過(guò)PCIE總線與Root Complex實(shí)現(xiàn)數(shù)據(jù)包的傳遞,PCIE總線由系統(tǒng)接口和PCIE接口組成;系統(tǒng)接口由復(fù)位和時(shí)鐘信號(hào)組成,PCIE接口由8條差分傳輸和接收對(duì)組成(8lane)。TX/RX Block RAM用來(lái)存儲(chǔ)來(lái)自DMA引擎和系統(tǒng)內(nèi)存的數(shù)據(jù),其大小可以通過(guò)Xilinx Core Generator配置。傳輸接口為用戶提供了產(chǎn)生和接收TLP的機(jī)制;物理層接口使用戶能夠觀測(cè)和控制鏈路的狀態(tài);配置接口使用戶能夠觀察和配置PCIE終端的配置空間,即DMA寄存器;中斷接口實(shí)現(xiàn)DMA與PCIE核之間的中斷傳輸。用戶通過(guò)這些接口設(shè)計(jì)符合其需要的DMA引擎。
圖5 PCIE功能框圖與接口
本文使用Xilinx CORE Generator生成PCIE核,其主要配置參數(shù)如表1所列。
表1 PCIE核主要配置參數(shù)
3.3 總線主控DMA傳輸
參考Xilinx應(yīng)用實(shí)例XAPP1052[5],本文設(shè)計(jì)的DMA結(jié)構(gòu)框圖如圖6所示,各部分功能介紹如下:
?、?發(fā)射引擎。發(fā)射引擎產(chǎn)生傳輸層數(shù)據(jù)包(TLP)并通過(guò)傳輸接口發(fā)送至PCIE核,數(shù)據(jù)包的數(shù)據(jù)來(lái)自TX_FIFO,頭信息來(lái)自DMA控制/狀態(tài)寄存器,也負(fù)責(zé)驅(qū)動(dòng)對(duì)DMA寄存器的讀取。
② 接收引擎。接收引擎將來(lái)自上位機(jī)的數(shù)據(jù)包解碼并轉(zhuǎn)存至RX_FIFO中,也接收來(lái)自驅(qū)動(dòng)的配置信息并將寄存器值寫(xiě)入DMA控制/狀態(tài)寄存器中。
?、?DMA控制/狀態(tài)寄存器。該模塊是DMA的主控制器,控制著DMA復(fù)位、讀寫(xiě)等操作;內(nèi)存緩沖區(qū)的地址信息和TLP包長(zhǎng)度等信息也存儲(chǔ)在該寄存器中。
④ MSI中斷控制器。該模塊產(chǎn)生讀寫(xiě)中斷,然后通過(guò)中斷接口通知PCIE核,進(jìn)而通知驅(qū)動(dòng)程序。
?、?TX/RX_FIFO.通過(guò)Xilinx Core Generator將FIFO配置為獨(dú)立時(shí)鐘異步模式,實(shí)現(xiàn)不同時(shí)鐘域的數(shù)據(jù)緩沖和位寬轉(zhuǎn)換。本文PCIE時(shí)鐘為250 MHz、位寬64位,而DSP核時(shí)鐘為200 MHz、位寬32位。
?、?PCIE核。該模塊為例化的PCIE集成塊,框圖和參數(shù)詳見(jiàn)圖5和表1.
⑦ DSP核。該模塊為用戶設(shè)計(jì)的算法或者功能模塊,例如通過(guò)Simulink調(diào)用Xilinx庫(kù)實(shí)現(xiàn)某種功能。
圖6 DMA結(jié)構(gòu)框圖
3.4 雙緩沖PCIE協(xié)議
以寫(xiě)操作為例,雙緩沖PCIE協(xié)議如圖7所示。初始化時(shí),驅(qū)動(dòng)程序在內(nèi)存中分配兩塊緩沖區(qū)Buff 1a/2a,然后將Buff 1a的地址信息寫(xiě)入DMA控制/狀態(tài)寄存器DMA_Reg1(圖1)中并開(kāi)始寫(xiě)操作;DMA引擎將FIFO中的數(shù)據(jù)以數(shù)據(jù)包的形式通過(guò)PCIE總線發(fā)送至緩沖區(qū)Buff 1a中,期間驅(qū)動(dòng)程序?qū)uff 2a的地址信息發(fā)送至DMA控制/狀態(tài)寄存器DMA_Reg2中;當(dāng)Buff 1a寫(xiě)操作完成時(shí),MSI中斷控制器產(chǎn)生MSI中斷并通知驅(qū)動(dòng),此時(shí)驅(qū)動(dòng)和DMA控制器同時(shí)切換緩沖區(qū),即驅(qū)動(dòng)將緩沖區(qū)切換至Buff 2a,DMA控制器將TLP頭信息切換至DMA_Reg2,如此繼續(xù)傳輸數(shù)據(jù)。
圖7 雙緩沖PCIE操作協(xié)議(寫(xiě)操作)
將MSI中斷與新緩沖區(qū)配置間的時(shí)間間隔稱為中斷延時(shí),如圖2和圖7所示。雙緩沖模式的引入消除了中斷延時(shí)的影響,使SRSE在中斷延時(shí)期間仍能傳輸數(shù)據(jù),節(jié)約了硬件資源,驅(qū)動(dòng)程序也有更多時(shí)間來(lái)處理緩沖區(qū)的數(shù)據(jù)。
4 PCIE調(diào)試與性能
提供了Root Port的Test Bench,它可以模擬PC和驅(qū)動(dòng)程序,如初始化DMA引擎、產(chǎn)生下行數(shù)據(jù)流并發(fā)送至PCIE設(shè)備,也可以接收來(lái)自PCIE設(shè)備的上行數(shù)據(jù)流等,使整個(gè)系統(tǒng)(PCIE核+DMA引擎+DSP核)可以在Modelsim SE環(huán)境下仿真。這大大縮短了開(kāi)發(fā)周期,提高了開(kāi)發(fā)效率。功能仿真通過(guò)后,使用Xilinx ISE 軟件完成代碼的輸入、綜合、實(shí)現(xiàn)、驗(yàn)證和下載。
硬件平臺(tái)為DELL T3400型PC和Xilinx ML605開(kāi)發(fā)套件。PC端基于Ubuntu 10.10操作系統(tǒng)運(yùn)行驅(qū)動(dòng)程序,FPGA端DSP核(圖6)通過(guò)Matlab Simulink調(diào)用Xilinx元件庫(kù)實(shí)現(xiàn)。本文DSP核由32位計(jì)數(shù)器和加法器組成:計(jì)數(shù)器將值寫(xiě)入TX_FIFO,PC端檢測(cè)接收數(shù)據(jù)以驗(yàn)證寫(xiě)操作(SRSE→PC);同樣地,PC端產(chǎn)生+1計(jì)數(shù)值并將數(shù)據(jù)寫(xiě)入RX_FIFO,DSP核的加法器用來(lái)驗(yàn)證讀操作(PC→SRSE)。
結(jié)語(yǔ)
本文設(shè)計(jì)了基于Xilinx Virtex6 FPGA的通用軟件無(wú)線電平臺(tái),利用C語(yǔ)言開(kāi)發(fā)了基于Linux系統(tǒng)的驅(qū)動(dòng)程序,利用Verilog語(yǔ)言設(shè)計(jì)基于Xilinx PCIE硬核的雙緩沖DMA控制器。雙緩沖消除了中斷延時(shí)的影響,節(jié)約了硬件資源,提高了數(shù)據(jù)傳輸速度。
評(píng)論