基于Virtex-6 FPGA的雙緩沖模式PCIe總線設計方案和實現(xiàn)
與單緩沖模式相比,雙緩沖模式優(yōu)點歸納如下:
?、?更新緩沖區(qū)不會引入中斷延時,這意味著較小的FIFO即可滿足需求,節(jié)約了硬件資源。
?、?雙緩沖模式延長了驅動程序處理中斷的時間,也使緩沖區(qū)數據的處理更加容易,丟包率大大減小。
③ 數據的傳輸和內存緩沖區(qū)的數據處理可以并行處理,系統(tǒng)的實時性得到保證。
④ 雙緩沖更適合Scatter/Gather DMA,取代block DMA,從而提高內存效率。
2 軟件無線電平臺設計
軟件無線電基于可編程、可重構的通用硬件平臺,通過加載不同的軟件實現(xiàn)不同的無線電功能,廣泛應用于軍用和民用領域。為了能夠實現(xiàn)復雜的算法,其平臺需要具備高速數據交換和實時信號處理的能力。該設計參考Xilinx ML605開發(fā)套件,基于Xilinx Virtex6 LX240T FPGA芯片,通過增加相應的模塊搭建通用的軟件無線電平臺。
軟件無線電原理框圖如圖3所示。信號獲取模塊采用兩片ADC和DAC以實現(xiàn)IQ兩路信號的數模轉換;通信模塊由以太網和USBRS232接口組成;擴展卡可以是射頻發(fā)射機或接收機,通過擴展卡接口與母板相連;JTAG接口提供在線編程和內部測試功能;存儲器件包括512 MB DDR3內存和128 MB平臺Flash,分別用于動態(tài)數據存儲和配置FPGA;人機接口由LED/LCD、按鍵和開關等元件組成,實現(xiàn)人機對話;200 MHz有源晶振和SMA時鐘接口組成時鐘輸入模塊,向FPGA提供時鐘基準;8通道PCIE接口和IP核實現(xiàn)平臺與PC間高速數據交換。
圖3 軟件無線電原理框圖
3 雙緩沖模式PCIE總線設計
3.1 PCIE驅動設計
PC端基于Linux(Ubuntu 10.10)操作系統(tǒng)。該操作系統(tǒng)免費開源,安全穩(wěn)定靈活,適合低成本軟件開發(fā)。驅動程序包含數據流接口和控制接口。數據流接口用于Linux用戶空間和 SRSE平臺間高速的數據交換;控制接口使用戶可以觀察和配置SRSE平臺寄存器,例如通過控制接口,用戶可以在PC端改變SRSE平臺的調諧頻率等參數。數據流接口是雙向獨立的,支持雙/單工,即可以同時讀和寫數據。以數據發(fā)送(從PC到SRSE)為例,用戶空間調用write()函數將任意數量的數據發(fā)送至驅動,驅動整理數據碎片以滿足PCIE對數據對齊和傳輸塊數據量的要求。當數據滿足4096字節(jié),驅動將數據塊發(fā)送至Root Complex并保留已發(fā)送數據的列表,等待接收來自SRSE平臺的寫操作中斷。PCIE驅動數據接收的原理如圖4所示。當用戶空間調用read()函數或者驅動接收到來自PCIE設備的數據時,驅動初始化讀操作。驅動程序將保持阻塞(blocking),直到用戶空間調用read()函數,并且已接收到足夠的數據包,從而能夠填滿read()請求的數據量。碎片整理模塊對已接收的數據進行整理,然后將數據塊返回至用戶空間,并通知其解除驅動阻止。
圖4 PCIE驅動中的數據接收
3.2 PCIE核配置
Virtex6 PCIE Endpoint Block[4]集成了傳輸層(TL)、數據鏈路層(DLL)和物理層(PL)協(xié)議,它完全符合PCIE基本規(guī)范,可配置性增加了設計的靈活性,降低了成本。其功能框圖與接口如圖5所示。其中收發(fā)器通過PCIE總線與Root Complex實現(xiàn)數據包的傳遞,PCIE總線由系統(tǒng)接口和PCIE接口組成;系統(tǒng)接口由復位和時鐘信號組成,PCIE接口由8條差分傳輸和接收對組成(8lane)。TX/RX Block RAM用來存儲來自DMA引擎和系統(tǒng)內存的數據,其大小可以通過Xilinx Core Generator配置。傳輸接口為用戶提供了產生和接收TLP的機制;物理層接口使用戶能夠觀測和控制鏈路的狀態(tài);配置接口使用戶能夠觀察和配置 PCIE終端的配置空間,即DMA寄存器;中斷接口實現(xiàn)DMA與PCIE核之間的中斷傳輸。用戶通過這些接口設計符合其需要的DMA引擎。
圖5 PCIE功能框圖與接口
本文使用Xilinx CORE Generator生成PCIE核,其主要配置參數如表1所列。
表1 PCIE核主要配置參數
3.3 總線主控DMA傳輸
參考Xilinx應用實例XAPP1052[5],本文設計的DMA結構框圖如圖6所示,各部分功能介紹如下:
?、?發(fā)射引擎。發(fā)射引擎產生傳輸層數據包(TLP)并通過傳輸接口發(fā)送至PCIE核,數據包的數據來自TX_FIFO,頭信息來自DMA控制/狀態(tài)寄存器,也負責驅動對DMA寄存器的讀取。
評論