李勝藍(lán),姜宏旭,符煒劍,陳 姣
(北京航空航天大學(xué) 計(jì)算機(jī)學(xué)院,北京 100191) (*通信作者電子郵箱jianghx@buaa.edu.cn)
基于PCIe的多路傳輸系統(tǒng)的DMA控制器設(shè)計(jì)
李勝藍(lán),姜宏旭*,符煒劍,陳 姣
(北京航空航天大學(xué) 計(jì)算機(jī)學(xué)院,北京 100191) (*通信作者電子郵箱jianghx@buaa.edu.cn)
為了避免PCIe傳輸過(guò)程中PIO寫延時(shí)、主機(jī)與嵌入式處理系統(tǒng)交互次數(shù)過(guò)多等問(wèn)題對(duì)于傳輸帶寬的影響,設(shè)計(jì)了一種基于命令緩沖機(jī)制的直接存儲(chǔ)訪問(wèn)(DMA)控制器以提高傳輸帶寬利用率。采用FPGA端內(nèi)部設(shè)置命令緩沖區(qū)的方式,使得DMA控制器可以緩存PC端的數(shù)據(jù)傳輸請(qǐng)求,F(xiàn)PGA根據(jù)自身需求動(dòng)態(tài)地訪問(wèn)PC端存儲(chǔ)空間,增強(qiáng)了傳輸靈活性;同時(shí),提出一種動(dòng)態(tài)拼接的DMA調(diào)度方法,通過(guò)合并相鄰存儲(chǔ)區(qū)訪問(wèn)請(qǐng)求的方式,進(jìn)一步減少主機(jī)與硬件的交互次數(shù)和中斷產(chǎn)生次數(shù)。系統(tǒng)傳輸速率測(cè)試實(shí)驗(yàn)中,DMA寫最高速率可達(dá)1 631 MB/s,DMA讀最高速率可達(dá)1 582 MB/s,帶寬最大值可達(dá)PCIe總線理論帶寬值的85.4%;與傳統(tǒng)PIO方式的DMA傳輸方法相比,DMA讀帶寬提升58%,DMA寫帶寬提升36%。實(shí)驗(yàn)結(jié)果表明,本設(shè)計(jì)能夠有效提升DMA傳輸效率,明顯優(yōu)于PIO方式。
PCIe;直接存儲(chǔ)訪問(wèn);高帶寬;多路傳輸;FPGA
隨著信息化與大數(shù)據(jù)時(shí)代的來(lái)臨,人們對(duì)于實(shí)時(shí)視頻數(shù)據(jù)的采集與處理的需求越來(lái)越多元化,采集的視頻數(shù)據(jù)從單一低分辨率朝向多路高分辨率發(fā)展,隨之而來(lái)的問(wèn)題是需傳輸處理的數(shù)據(jù)規(guī)模呈倍數(shù)增長(zhǎng),這對(duì)數(shù)據(jù)的傳輸處理平臺(tái)的性能提出了更高的要求。嵌入式芯片,如FPGA(Field-Programmable Gate Array)、DSP(Digital Signal Processing)等的應(yīng)用讓嵌入式硬件平臺(tái)的處理能力大幅度提升,但處理系統(tǒng)的性能瓶頸主要位于PC端與硬件板卡之間的數(shù)據(jù)傳輸效率上,因此跨平臺(tái)傳輸總線的選擇至關(guān)重要。
PCI Express(PCIe)是第三代高性能I/O(Input/Output)總線,在總線結(jié)構(gòu)上進(jìn)行了根本的變革,其變化主要體現(xiàn)在兩個(gè)方面:一是由并行總線變?yōu)榇锌偩€,二是采用了點(diǎn)到點(diǎn)的互連。它具有速度快,兩端設(shè)備獨(dú)享帶寬,擴(kuò)展靈活等諸多優(yōu)點(diǎn)[1]。PCIe 作為目前使用最頻繁的高速總線,廣泛用于PC端與外部設(shè)備的之間的通信,如何利用PCIe總線對(duì)大規(guī)模數(shù)據(jù)進(jìn)行高效傳輸已成為研究熱點(diǎn)[2-4]。
由于直接存儲(chǔ)訪問(wèn)(Direct Memory Access, DMA)可以降低傳輸對(duì)系統(tǒng)CPU資源的占用率,顯著提高系統(tǒng)運(yùn)行效率,可以達(dá)到更高的數(shù)據(jù)傳輸速率,而被大多數(shù)系統(tǒng)采用。文獻(xiàn)[5-6]中DMA傳輸所需的地址和數(shù)據(jù)大小等信息均由PC端通過(guò)PIO(Programmed I/O)方式寫入PCIe空間映射的狀態(tài)寄存器BAR(Base Address Register)中,F(xiàn)PGA只能被動(dòng)地等待PC端的發(fā)起DMA操作;同時(shí)由于現(xiàn)有的平臺(tái)可支持的PIO讀寫帶寬僅為2~4 MB/s[7],DMA傳輸帶寬為PCIe理論帶寬的50%,不能最大限度地利用PCIe帶寬資源,無(wú)法滿足本系統(tǒng)的數(shù)據(jù)傳輸帶寬需求。文獻(xiàn)[8]中在FPGA中設(shè)置了地址表,驅(qū)動(dòng)程序?qū)⒊跏蓟瘯r(shí)PC端分配的地址空間寫入該地址表內(nèi),這解決了由PIO讀寫帶寬低而造成的DMA帶寬不理想的問(wèn)題;但這種方式對(duì)PC端存儲(chǔ)的訪問(wèn)靈活性低,因?yàn)榈刂繁碓诔跏蓟瘯r(shí)被更新,DMA工作時(shí)只能按照既定的順序訪問(wèn)存儲(chǔ)器空間,同時(shí)當(dāng)大量的地址需存儲(chǔ)時(shí),地址表額外占用了更多的FPGA的存儲(chǔ)資源。為了滿足本項(xiàng)目的傳輸帶寬需求并解決以上問(wèn)題,本文在FPGA自帶的PCIe硬核的基礎(chǔ)上設(shè)計(jì)了一種DMA傳輸控制器,利用FPGA端設(shè)置的命令緩沖區(qū),采用FPGA主控的DMA傳輸模式,解決了PIO寫延遲對(duì)DMA傳輸?shù)南拗茊?wèn)題,并提出了一種動(dòng)態(tài)拼接的DMA調(diào)度方法,對(duì)DMA傳輸請(qǐng)求進(jìn)行動(dòng)態(tài)調(diào)控,進(jìn)一步減少了軟硬件交互次數(shù)。通過(guò)實(shí)驗(yàn)表明,本設(shè)計(jì)實(shí)現(xiàn)了PC端與處理板卡之間的多路數(shù)據(jù)高效傳輸,并且可為類似的應(yīng)用提供參考。
1.1 PCIe接口
PCIe是一種分層的體系結(jié)構(gòu),由下至上分別為物理層(Physical Layer, PHY)、數(shù)據(jù)鏈路層(Data Link Layer, DL)以及事務(wù)層(Transaction Layer, TL)[9]。在硬件板卡端,目前許多FPGA芯片內(nèi)部均提供了可選的PCI-E協(xié)議實(shí)現(xiàn)方案,其自帶的 Xilinx PCIe LogiCORE IP 核實(shí)現(xiàn)了物理層及數(shù)據(jù)鏈路層協(xié)議,并對(duì)上層提供了事務(wù)層接口[10],用戶利用該接口即可實(shí)現(xiàn)對(duì)PCIE設(shè)備的控制及訪問(wèn),開(kāi)發(fā)者只需完成事務(wù)層的設(shè)計(jì)即可,這樣簡(jiǎn)化了開(kāi)發(fā)流程并具有優(yōu)良的可移植性。
1.2 PCIe數(shù)據(jù)包組織結(jié)構(gòu)
PCIe總線通過(guò)數(shù)據(jù)包形式來(lái)實(shí)現(xiàn)信息的傳遞。 PCIe協(xié)議的事務(wù)可分為存儲(chǔ)器事務(wù)、I/O事務(wù)、配置事務(wù)以及消息事務(wù)幾個(gè)類型。TLP(Transaction Layer Packet)的包頭被用于區(qū)分這些的事務(wù),與此同時(shí)TLP數(shù)據(jù)包的包頭也決定了當(dāng)前TLP的路由信息等一系列信息。一個(gè)完整的PCIe數(shù)據(jù)包結(jié)構(gòu)如圖1所示[11]。用戶每次發(fā)送的數(shù)據(jù)都必須封裝在這樣的數(shù)據(jù)包格式內(nèi),但其中只有TLP頭與有效數(shù)據(jù)載荷是用戶層添加的,其余結(jié)構(gòu)由PCIe物理層以及數(shù)據(jù)鏈路層額外添加到TLP上。

圖1 PCIe總線數(shù)據(jù)包結(jié)構(gòu)
Fig. 1 PCIe bus data packet structure
1.3 PCIe總線帶寬
PCIe Gen1每條鏈路單方向傳輸理論帶寬為2.5 Gb/s,PCIe Gen2將該速率提高了一倍,每一條鏈路的單方向理論帶寬為5 Gb/s[12]。由于PCIe Gen1 和PCIe Gen2均使用了8 b/10 b的編碼(80%),且由圖1可知,PCIe協(xié)議數(shù)據(jù)包含有額外的開(kāi)銷,所以PCIe總線帶寬的理論最大值T(單位為Gb/s)的計(jì)算公式為式(1):
(1)
其中:P為單個(gè)TLP最大有效載荷,O為TLP包頭額外開(kāi)支,N為鏈路總數(shù),Gen為1或2,代表PCIe Gen1 或 PCIe Gen2。
2.1 系統(tǒng)結(jié)構(gòu)及主要功能
本系統(tǒng)有兩個(gè)功能。一是FPGA將采集到的原始視頻數(shù)據(jù)存儲(chǔ)到DDR3 SDRAM中,用戶請(qǐng)求數(shù)據(jù)后,F(xiàn)PGA通過(guò)PCIe總線將數(shù)據(jù)傳輸?shù)絇C端;二是PC端將經(jīng)程序處理后的多路視頻數(shù)據(jù)通過(guò)PCIE總線下傳至FPGA端,F(xiàn)PGA讀取這些數(shù)據(jù)并存儲(chǔ)到DDR3。 FPGA與PC端的數(shù)據(jù)傳輸由DMA控制模塊來(lái)調(diào)控。本項(xiàng)目中設(shè)計(jì)的多路視頻采集處理系統(tǒng)的數(shù)據(jù)傳輸過(guò)程具有以下特點(diǎn):1)PCIe下傳參數(shù)時(shí)數(shù)據(jù)量大,板卡與PC端交互頻繁;2)PCIe上傳參數(shù)時(shí)數(shù)據(jù)量小,實(shí)時(shí)性要求高;3)為防止數(shù)據(jù)溢出,F(xiàn)PGA端需要較大的數(shù)據(jù)緩沖區(qū)來(lái)存儲(chǔ)PC端下傳的多路視頻數(shù)據(jù)。
針對(duì)這些特點(diǎn),完成系統(tǒng)主要模塊設(shè)計(jì),系統(tǒng)結(jié)構(gòu)如圖2所示。本系統(tǒng)主要模塊包括PCIe IP核,DDR3 MIG模塊、DMA控制器模塊、DDR3讀寫控制模塊以及視頻采集輸出模塊。其中,PCIe IP核以及DDR3 MIG模塊可以通過(guò)Xilinx CORE Generator工具按需求配置生成。下文將會(huì)具體介紹DMA控制模塊的結(jié)構(gòu)及DMA傳輸方法。

圖2 多路視頻傳輸系統(tǒng)結(jié)構(gòu)
2.2 基于命令緩沖機(jī)制的DMA控制器設(shè)計(jì)
DMA控制模塊包含發(fā)送模塊、接收模塊、BAR、讀命令存儲(chǔ)FIFO(Rd_FIFO)、寫命令存儲(chǔ)FIFO(Wr_FIFO)和命令解析模塊,如圖3所示。

圖3 DMA控制模塊結(jié)構(gòu)
兩個(gè)數(shù)據(jù)寬度為256 b的異步FIFO實(shí)現(xiàn)了DMA控制模塊與DDR3讀寫模塊的連接,解決了跨時(shí)鐘域的問(wèn)題。DMA控制/狀態(tài)寄存器被映射到PCIe的地址空間中,也可和其他用戶邏輯連接,用于控制DMA傳輸。
發(fā)送模塊用于組織和傳輸轉(zhuǎn)發(fā)事務(wù)、非轉(zhuǎn)發(fā)事務(wù)和完成事務(wù)的數(shù)據(jù)包。發(fā)送模塊可以產(chǎn)生存儲(chǔ)器寫請(qǐng)求包(Memory Write Request, MWr)、讀請(qǐng)求包(Memory Read Request, MRd)和帶數(shù)據(jù)的完成包(Completion with data, Cpld),產(chǎn)生的數(shù)據(jù)包發(fā)送到事務(wù)層接口(Transaction interface, TRN)。
接收模塊支持完成事務(wù)、存儲(chǔ)器讀事務(wù)和存儲(chǔ)器寫事務(wù)。接收模塊從TRN接口中接收事務(wù)包,并根據(jù)事務(wù)的種類,作出相應(yīng)的操作。如接收到PC端的Cpld TLP時(shí),接收模塊將其中的數(shù)據(jù)段解析校驗(yàn)后存入RX_FIFO,等待存入DDR3;當(dāng)接收到PC端的數(shù)據(jù)傳輸命令時(shí), 根據(jù)命令標(biāo)志位將其放在對(duì)應(yīng)的命令存儲(chǔ)FIFO中。
命令存儲(chǔ)FIFO將PC端發(fā)送的DMA讀寫命令順序存儲(chǔ),命令解析模塊從FIFO中讀取命令,解析命令后通過(guò)發(fā)送模塊組織相應(yīng)TLP向PC端發(fā)起DMA存儲(chǔ)器訪問(wèn)請(qǐng)求。
PC端發(fā)送的DMA請(qǐng)求命令格式為如圖4所示,其中FLAG標(biāo)志位占1 b,用于判斷該命令為DMA讀請(qǐng)求或DMA寫請(qǐng)求,地址塊對(duì)應(yīng)id號(hào)占6 b,PC端最多可設(shè)置64個(gè)緩沖區(qū)。

圖4 DMA請(qǐng)求命令格式示意圖
Fig. 4 Schematic diagram of DMA request command format
2.2.1 DMA傳輸流程優(yōu)化
采用PIO方式的DMA讀寫操作流程一般為:PC端準(zhǔn)備好數(shù)據(jù)后,向FPGA端BAR空間對(duì)應(yīng)的位置寫入代表觸發(fā)DMA中斷的數(shù)值,同時(shí)將DMA操作所需的起始地址及傳輸大小等信息一并填入BAR對(duì)應(yīng)位置,F(xiàn)PGA檢測(cè)到中斷后開(kāi)始進(jìn)行DMA讀操作。由于對(duì)同一地址同時(shí)讀寫會(huì)導(dǎo)致數(shù)據(jù)發(fā)生錯(cuò)亂,PC端會(huì)將對(duì)應(yīng)的內(nèi)存地址鎖死,不再更新這些地址的數(shù)據(jù)。這種方法實(shí)際上是由PC端來(lái)發(fā)起DMA操作,DMA讀寫帶寬受到了PC端工作主頻的影響,特別是面對(duì)PC端需要向FPGA傳輸大量數(shù)據(jù)的應(yīng)用場(chǎng)景時(shí),實(shí)際環(huán)境所測(cè)得的帶寬遠(yuǎn)遠(yuǎn)低于PCIe的理論帶寬。本文在FPGA端增加了命令存儲(chǔ)區(qū),使得FPGA可根據(jù)自身需求動(dòng)態(tài)地請(qǐng)求PC端的數(shù)據(jù)。兩種方式對(duì)應(yīng)的PC與FPGA的交互過(guò)程如圖5。圖5(a)為PIO方式PC與FPGA DMA傳輸示意圖,圖5(b)為采用命令緩沖機(jī)制后的DMA傳輸示意圖。可見(jiàn)采用命令緩沖機(jī)制后,DMA搬運(yùn)同樣大小數(shù)據(jù)的傳輸時(shí)間減少,傳輸涉及的中斷處理操作減少,DMA帶寬由此提升。

圖5 DMA傳輸流程對(duì)比
2.2.2 DMA讀操作
采用命令緩沖機(jī)制后,F(xiàn)PGA從PC端利用DMA讀取數(shù)據(jù)的具體過(guò)程如下:
1)PC端在驅(qū)動(dòng)程序中申請(qǐng)一段數(shù)據(jù)緩沖區(qū),緩沖區(qū)被分為N部分,分別對(duì)應(yīng)N路數(shù)據(jù),編號(hào)為0~N-1,地址塊大小為4KB,第i號(hào)地址塊的起始地址add_start_i的計(jì)算公式為式(2),即基地址add_read_base加上偏移:
add_start_i=add_read_base+i×4 000
(2)
2)PC端向ID為i的地址塊填充好數(shù)據(jù)后,向FPGA發(fā)送攜帶該地址塊的ID號(hào)的命令,表示該部分?jǐn)?shù)據(jù)可供讀取。
3)FPGA端接收模塊收到DMA傳輸命令后,通過(guò)判斷flag標(biāo)志位的值將命令存儲(chǔ)到讀命令存儲(chǔ)FIFO或?qū)懨畲鎯?chǔ)FIFO中。
4)FPGA端的數(shù)據(jù)量低于預(yù)先設(shè)定值后,命令解析模塊從讀命令存儲(chǔ)FIFO中取出一個(gè)命令,讀取該命令I(lǐng)D號(hào),通過(guò)式(2)計(jì)算出PC端對(duì)應(yīng)的起始地址,由發(fā)送模塊組織PCIe存儲(chǔ)器讀請(qǐng)求TLP發(fā)送到PC端,請(qǐng)求命令對(duì)應(yīng)的地址數(shù)據(jù)。PC端收到讀請(qǐng)求后,會(huì)自動(dòng)將相應(yīng)地址內(nèi)的數(shù)據(jù)打包成Cpld發(fā)回給FPGA,這個(gè)過(guò)程并不需要PC端CPU的參與。
5)FPGA端的接收模塊接收到Cpld TLP,解析后將其中攜帶的數(shù)據(jù)按順序存入到RX_FIFO中,等待存入DDR3。當(dāng)整個(gè)DMA讀操作完成后,F(xiàn)PGA向主機(jī)發(fā)送一個(gè)中斷。
6)PC接收到中斷后,根據(jù)中斷信息判斷哪塊地址數(shù)據(jù)被讀取,并將對(duì)應(yīng)數(shù)據(jù)緩沖區(qū)更新。回到步驟2)。
2.2.3 DMA寫操作
DMA寫操作與DMA讀操作類似,若FPGA內(nèi)的DMA存儲(chǔ)器寫操作需要等待PC端操作BAR空間內(nèi)寄存器才能發(fā)起,不僅占用了CPU的時(shí)鐘周期,而且每一次啟動(dòng)DMA時(shí)FPGA都需要等待CPU,影響了DMA的帶寬吞吐量。
1)PC端在驅(qū)動(dòng)程序中申請(qǐng)一段內(nèi)存,緩沖區(qū)被分為N部分,編號(hào)為0~N-1,地址塊大小為4KB,第i號(hào)地址塊的起始地址add_start_i計(jì)算公式為式(3),即基地址add_write_base加上偏移,PC端需要讀取第i塊地址的數(shù)據(jù)時(shí),將其ID值打包發(fā)送給FPGA:
add_start_i=add_write_base+i×4 000
(3)
2)FPGA端接收模塊收到DMA傳輸命令后,通過(guò)判斷flag標(biāo)志位的值將命令存儲(chǔ)到讀命令存儲(chǔ)FIFO或?qū)懨畲鎯?chǔ)FIFO中。
3)FPGA端采集到的數(shù)據(jù)量大于預(yù)先設(shè)定值后,命令解析模塊從寫命令存儲(chǔ)FIFO中取出一個(gè)命令,通過(guò)式(3)計(jì)算出CPU端對(duì)應(yīng)的緩沖區(qū)起始地址,由發(fā)送模塊組織PCIe存儲(chǔ)器寫請(qǐng)求TLP發(fā)送到PC端。PC端接收到寫存儲(chǔ)器請(qǐng)求,解析TLP提取出數(shù)據(jù)放至對(duì)應(yīng)地址內(nèi)。
4)FPGA完成DMA寫操作后,向主機(jī)發(fā)送一個(gè)中斷,表示該塊數(shù)據(jù)已更新。PC端可根據(jù)中斷信息,取用對(duì)應(yīng)緩沖區(qū)的數(shù)據(jù)。
2.2.4 基于動(dòng)態(tài)拼接的DMA調(diào)度方法
為了進(jìn)一步提升DMA傳輸帶寬,一種基于動(dòng)態(tài)拼接策略的DMA調(diào)度方法被用于DMA傳輸控制。以進(jìn)行DMA存儲(chǔ)器讀操作為例,當(dāng)FPGA準(zhǔn)備進(jìn)行DMA傳輸時(shí),命令解析模塊從命令存儲(chǔ)FIFO中取出一個(gè)命令后,若FIFO仍存有命令,命令解析模塊將繼續(xù)判斷下一個(gè)命令的ID號(hào),若該命令I(lǐng)D號(hào)與之前命令的ID號(hào)可相鄰,即意味著兩次DMA操作PC端的地址相連,則命令解析模塊取出該命令并將兩個(gè)命令拼接成一個(gè)DMA傳輸請(qǐng)求,當(dāng)FIFO仍不為空時(shí),這種DMA拼接將繼續(xù),直到下一個(gè)命令的ID號(hào)與已有的ID號(hào)不連續(xù)或FIFO為空為止。這種將對(duì)相鄰地址的DMA讀操作動(dòng)態(tài)的拼接成一次DMA操作的調(diào)度方法,減少了兩次DMA配置之間的時(shí)間,進(jìn)一步提升了PCIeDMA傳輸效率。DMA調(diào)度流程如圖6所示。

圖6 DMA調(diào)度流程
當(dāng)DMA不進(jìn)行動(dòng)態(tài)拼接時(shí),一次DMA傳輸DMA完成操作后通知PC端的數(shù)據(jù)更新的地址ID號(hào)。多次DMA傳輸需多次中斷;但若DMA采用了動(dòng)態(tài)拼接策略,多個(gè)命令傳輸完成后,僅需一次中斷通知PC端DMA操作更新的地址區(qū)間。利用動(dòng)態(tài)拼接策略,減少了PC端需處理的DMA傳輸中斷數(shù)量,降低了CPU中斷處理所造成的延遲。
3.1 實(shí)驗(yàn)環(huán)境
本設(shè)計(jì)采用實(shí)驗(yàn)室自主研發(fā)的多路視頻輸出板作為實(shí)驗(yàn)平臺(tái),并結(jié)合對(duì)應(yīng)的驅(qū)動(dòng)程和應(yīng)用程序進(jìn)行測(cè)試。該平臺(tái)支持GEN1×8模式的PCIe鏈路,并且使用Xilinx公司的Kintex-7XC7K325T作為主控芯片,采用XilinxISE14.7作為開(kāi)發(fā)工具,利用Verilog語(yǔ)言完成FPGA程序設(shè)計(jì)。DDR3MIG配置讀寫控制時(shí)鐘400MHz,數(shù)據(jù)位寬256b。PCIecore配置為GEN1×8模式。板卡通過(guò)PCIe接口連接主機(jī),CPU為Inteli7處理核,工作主頻為2.8GHz,操作系統(tǒng)為Windows7pro。
按照本文系統(tǒng)模塊設(shè)計(jì),自頂向下完成FPGA各模塊代碼的編寫與優(yōu)化,通過(guò)ISE綜合、映射與布局布線后,整個(gè)設(shè)計(jì)占用Register資源6 713個(gè),占用LUT資源6 782個(gè),占用BlockRam/FIFO資源12個(gè),可以看出本系統(tǒng)對(duì)于FPGA資源占用率較少,有利于后續(xù)工作的展開(kāi)。

表1 FPGA資源占用表
3.2DMA傳輸速率測(cè)試
視頻傳輸過(guò)程由本文中設(shè)計(jì)的DMA控制器控制,實(shí)驗(yàn)分別測(cè)試DMA讀與DMA寫帶寬。PC端以2μs的間隔向FPGA發(fā)送N個(gè)數(shù)據(jù)傳輸命令,TLP的有效載荷設(shè)置為512 B。應(yīng)用程序端使用函數(shù)QueryPerformanceCounter()計(jì)數(shù)傳輸一定大小的DMA數(shù)據(jù)塊需要的計(jì)算機(jī)周期數(shù),并利用函數(shù)QueryPerformanceFrequency()讀取CPU時(shí)鐘周期,DMA傳輸帶寬計(jì)算公式如下,其中P為TLP有效載荷,n為所用CPU周期數(shù),tc為CPU時(shí)鐘周期。
(4)
DMA讀寫帶寬與DMA傳輸不同大小的數(shù)據(jù)量的關(guān)系如圖7所示。通過(guò)實(shí)驗(yàn)結(jié)果可以得知,隨著DMA傳輸數(shù)據(jù)量的增大,DMA讀寫帶寬均隨之增加,當(dāng)傳輸數(shù)據(jù)量從10KB增加到100KB時(shí),帶寬增長(zhǎng)幅度最大,當(dāng)傳輸數(shù)據(jù)量達(dá)到一定程度時(shí),帶寬增長(zhǎng)緩慢。最高DMA讀帶寬為1 582MB/s,最高DMA寫帶寬為1 631MB/s,峰值帶寬達(dá)到理論帶寬值的85%。

圖7 DMA傳輸帶寬變化曲線
表2為本文方法與其他文獻(xiàn)方法在DMA讀寫帶寬方面的比較。文獻(xiàn)[4]和文獻(xiàn)[13]中采用由PC端通過(guò)PIO更改DMA狀態(tài)控制寄存器的模式進(jìn)行DMA傳輸。文獻(xiàn)[4]中采用PCIeGEN1×4 通道接口板,DMA寫速率為539MB/s,讀速率為504MB/s。文獻(xiàn)[13]中所用平臺(tái)為GEN1×8PCIe鏈路,DMA寫速率最高為1 311MB/s,DMA讀速率最高為1 002MB/s。將速率均換算為PCIeGEN1×8通道進(jìn)行比較,本文DMA傳輸方式與PIO方式相比,DMA寫速率平均可提升36%,DMA讀速率平均可提升58%。

表2 DMA傳輸帶寬對(duì)比
針對(duì)實(shí)際的多路視頻數(shù)據(jù)的傳輸需求,本文提出了一種基于命令緩沖機(jī)制的DMA傳輸機(jī)制,采用FPGA主動(dòng)控制的DMA傳輸模式,降低了PIO寫延時(shí)對(duì)于DMA傳輸帶寬的影響,同時(shí)提出了一種基于動(dòng)態(tài)拼接的DMA調(diào)度方法,進(jìn)一步提升了DMA傳輸帶寬。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)DMA寫最高速率可達(dá)1 631MB/s,DMA讀最高速率可達(dá)1 582MB/s,達(dá)到了PCIe理論帶寬值的85.4%;與利用PIO方式的DMA傳輸機(jī)制相比,本方法DMA讀帶寬提升58%,DMA寫帶寬提高36%。但目前為止,PC端每個(gè)ID號(hào)對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)區(qū)大小相等,只能傳輸大小固定的數(shù)據(jù)塊,以后考慮在命令中增加新的字段來(lái)表示傳輸數(shù)據(jù)大小。
)
[1]PCI-SpecialInterestGroup.PCIexpress2.0basespecificationrevision3.1a[EB/OL]. [2016- 02- 07].http://www.pcisig.com/specifications/pciexpress/base2/.
[2] BITTNER R, RUF E. Direct GPU/FPGA communication via PCI express [J]. Cluster Computing, 2014, 17(2): 339-348.
[3] CORREIA M, SOUSA J, COMBO A, et al. Implementation of IEEE-1588 timing and synchronization for ATCA control and data acquisition systems [J]. Fusion Engineering and Design, 2012, 87(12): 2178-2181.
[4] DE LA CHEVALLERIE D, KORINTH J, KOCH A. ffLink: a lightweight high-performance open-source PCI express Gen3 interface for reconfigurable accelerators [J]. ACM SIGARCH Computer Architecture News, 2015, 43(4): 34-39.
[5] 李木國(guó),黃影,劉于之.基于FPGA的PCIe總線接口的DMA傳輸設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2013,21(1):233-235.(LI M G, HUANG Y, LIU Y Z. Design of DMA transmission with PCIe bus interface based on FPGA [J]. Computer Measurement and Control, 2013, 21(1): 233-235.)
[6] 鄒晨,高云.基于FPGA的PCIe總線DMA傳輸?shù)脑O(shè)計(jì)與實(shí)現(xiàn)[J].電光與控制,2015,22(7):84-88.(ZOU C, GAO Y. Design and implementation of DMA transmission with PCIe bus based on FPGA [J]. Electronics Optics and Control, 2015, 22(7): 84-88.)
[7] BITTNER R. Speedy bus mastering PCI express [C]// Proceedings of the 2012 22nd International Conference on Field Programmable Logic and Applications. Piscataway, NJ: IEEE, 2012: 523-526.
[8] ROTA L, CASELLE M, CHILINGARYAN S, et al. A PCIe DMA architecture for multi-gigabyte per second data transmission [J]. IEEE Transactions on Nuclear Science, 2015, 62(3): 972-976.
[9] THOMA Y, DASSATTI A, MOLLA D, et al. FPGA-GPU communicating through PCIe [J]. Microprocessors and Microsystems, 2015, 39(7): 565-575.
[10] Xilinx. LogiCoreTMIP endpoint for PCI express V3.7 user guide [EB/OL]. [2016- 03- 08]. http://www.xilinx.com.
[11] GONG J, WANG T, CHEN J, et al. An efficient and flexible host-FPGA PCIe communication library [C]// Proceedings of the 2014 24th International Conference on Field Programmable Logic and Applications. Piscataway, NJ: IEEE, 2014: 1-6.
[12] KAVIANIPOUR H, MUSCHTER S, BOHM C. High performance FPGA-based DMA interface for PCIe [J]. IEEE Transactions on Nuclear Science, 2014, 61(2):1-3.
[13] 侯杭呈,王憶文,李輝.一種基于PCI Express總線的DMA高速傳輸系統(tǒng)[J].微電子學(xué),2013,43(3):383-386.(HOU H C, WANG Y W, LI H. A high-speed DMA transmission system based on PCI express bus [J]. Microelectronics, 2013, 43(3): 383-386.)
This work is supported by the National Natural Science Foundation of China (61272347).
LI Shenglan, born in 1992, M.S. candidate. Her research interests include digital media processing, embedded system design.
JIANG Hongxu, born in 1976, Ph. D., associate professor. His research interests include digital media processing, embedded system design.
FU Weijian, born in 1993, M.S. candidate. His research interests include digital media processing, embedded system design.
CHEN Jiao, born in 1992, M.S. candidate. Her research interests include digital media processing, embedded system design.
Design of DMA controller for multi-channel transmission system based on PCIe
LI Shenglan, JIANG Hongxu*, FU Weijian, CHEN Jiao
(SchoolofComputerScienceandEngineering,BeihangUniversity,Beijing100191,China)
To reduce the impact of Programmed I/O (PIO) write latency in PCI express (PCIe) transmission process, too many times of interaction between the host and the embedded processing system and other issues on transmission bandwidth, a Direct Memory Access (DMA) controller based on command buffering mechanism was designed to improve the transmission bandwidth utilization. Using the internal command buffer of the Field-Programmable Gate Array (FPGA), the DMA controller could cache the data transfer request of the PC. The FPGA could dynamically access the storage space of the PC according to its own requirements and enhance the transmission flexibility. At the same time, a dynamic mosaic DMA scheduling method was proposed to reduce the times of host-to-hardware interaction and interrupt generation by merging the access requests of adjacent storage areas. In the system transmission rate test, the maximum write speed of DMA was 1 631 MB/s, the maximum rate of DMA read was up to 1 582 MB/s, the maximum of bandwidth was up to 85.4% of the theoretical bandwidth of PCIe bus. Compared with the traditional PIO mode DMA transfer method, DMA read bandwidth increased by 58%, DMA write bandwidth increased by 36%. The experimental results show that the proposed design can effectively improve the DMA transfer efficiency, and is significantly better than PIO method.
PCIe; Direct Memory Access (DMA); high bandwidth; multi-channel transmission; Field-Programmable Gate Array (FPGA)
2016- 09- 23;
2016- 10- 26。
國(guó)家自然科學(xué)基金資助項(xiàng)目(61272347)。
李勝藍(lán)(1992—),女,四川內(nèi)江人,碩士研究生,主要研究方向:數(shù)字媒體處理、嵌入式系統(tǒng)設(shè)計(jì); 姜宏旭(1976—),男,陜西藍(lán)田人,副教授,博士,主要研究方向:數(shù)字媒體處理、嵌入式系統(tǒng)設(shè)計(jì); 符煒劍(1993—),男,福建壽寧人,碩士研究生,主要研究方向:數(shù)字媒體處理、嵌入式系統(tǒng)設(shè)計(jì); 陳姣(1992—),女,湖北咸寧人,碩士研究生,主要研究方向:數(shù)字媒體處理、嵌入式系統(tǒng)設(shè)計(jì)。
1001- 9081(2017)03- 0691- 04
10.11772/j.issn.1001- 9081.2017.03.691
TP391.7
A