新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Virtex-6 FPGA的雙緩沖模式PCIe總線設計方案和實現

        基于Virtex-6 FPGA的雙緩沖模式PCIe總線設計方案和實現

        作者: 時間:2013-12-31 來源:網絡 收藏

          ② 接收引擎。接收引擎將來自上位機的數據包解碼并轉存至RX_FIFO中,也接收來自驅動的配置信息并將寄存器值寫入DMA控制/狀態寄存器中。

          ③ DMA控制/狀態寄存器。該模塊是DMA的主控制器,控制著DMA復位、讀寫等操作;內存緩沖區的地址信息和TLP包長度等信息也存儲在該寄存器中。

          ④ MSI中斷控制器。該模塊產生讀寫中斷,然后通過中斷接口通知PCIE核,進而通知驅動程序。

          ⑤ TX/RX_FIFO.通過Xilinx Core Generator將FIFO配置為獨立時鐘異步模式,實現不同時鐘域的數據緩沖和位寬轉換。本文PCIE時鐘為250 MHz、位寬64位,而DSP核時鐘為200 MHz、位寬32位。

          ⑥ PCIE核。該模塊為例化的PCIE集成塊,框圖和參數詳見圖5和表1.

          ⑦ DSP核。該模塊為用戶設計的算法或者功能模塊,例如通過Simulink調用Xilinx庫實現某種功能。

          

          圖6 DMA結構框圖

          3.4 雙緩沖PCIE協議

          以寫操作為例,雙緩沖PCIE協議如圖7所示。初始化時,驅動程序在內存中分配兩塊緩沖區Buff 1a/2a,然后將Buff 1a的地址信息寫入DMA控制/狀態寄存器DMA_Reg1(圖1)中并開始寫操作;DMA引擎將FIFO中的數據以數據包的形式通過PCIE總線發送至緩沖區Buff 1a中,期間驅動程序將Buff 2a的地址信息發送至DMA控制/狀態寄存器DMA_Reg2中;當Buff 1a寫操作完成時,MSI中斷控制器產生MSI中斷并通知驅動,此時驅動和DMA控制器同時切換緩沖區,即驅動將緩沖區切換至Buff 2a,DMA控制器將TLP頭信息切換至DMA_Reg2,如此繼續傳輸數據。

          雙緩沖PCIE操作協議(寫操作)

          圖7 雙緩沖PCIE操作協議(寫操作)

          將MSI中斷與新緩沖區配置間的時間間隔稱為中斷延時,如圖2和圖7所示。的引入消除了中斷延時的影響,使SRSE在中斷延時期間仍能傳輸數據,節約了硬件資源,驅動程序也有更多時間來處理緩沖區的數據。

          4 PCIE調試與性能

          提供了Root Port的Test Bench,它可以模擬PC和驅動程序,如初始化DMA引擎、產生下行數據流并發送至PCIE設備,也可以接收來自PCIE設備的上行數據流等,使整個系統(PCIE核+DMA引擎+DSP核)可以在Modelsim SE環境下仿真。這大大縮短了開發周期,提高了開發效率。功能仿真通過后,使用Xilinx ISE 軟件完成代碼的輸入、綜合、實現、驗證和下載。

          硬件平臺為DELL T3400型PC和Xilinx ML605開發套件。PC端基于Ubuntu 10.10操作系統運行驅動程序,FPGA端DSP核(圖6)通過Matlab Simulink調用Xilinx元件庫實現。本文DSP核由32位計數器和加法器組成:計數器將值寫入TX_FIFO,PC端檢測接收數據以驗證寫操作(SRSE→PC);同樣地,PC端產生+1計數值并將數據寫入RX_FIFO,DSP核的加法器用來驗證讀操作(PC→SRSE)。

          結語

          本文設計了基于Xilinx Virtex6 FPGA的通用軟件無線電平臺,利用C語言開發了基于Linux系統的驅動程序,利用Verilog語言設計基于Xilinx PCIE硬核的雙緩沖DMA控制器。雙緩沖消除了中斷延時的影響,節約了硬件資源,提高了數據傳輸速度。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 晋中市| 马山县| 珠海市| 昌吉市| 罗定市| 乐亭县| 临颍县| 揭阳市| 盐亭县| 江北区| 社旗县| 饶河县| 沽源县| 青海省| 波密县| 龙山县| 黄山市| 金秀| 毕节市| 民县| 浮山县| 沅江市| 二连浩特市| 凭祥市| 象山县| 普安县| 江阴市| 长沙县| 临夏县| 三明市| 大竹县| 台东市| 东海县| 北海市| 峨眉山市| 综艺| 乌兰察布市| 友谊县| 靖宇县| 繁峙县| 宁武县|