吳國華,楊自恒,郭俊磊,徐勤濤
( 黑龍江大學(xué) 電子工程學(xué)院,黑龍江 哈爾濱 150080)
隨著現(xiàn)代通信對傳輸帶寬的要求正逐步提高,此前普遍采用的PCI總線已經(jīng)無法滿足高速數(shù)據(jù)傳輸?shù)囊?,正面臨淘汰。為解決這種處境,PCI-E作為第三代互聯(lián)總線技術(shù)應(yīng)運而生,它支持芯片間和設(shè)備間的點到點串行連接,并以低開銷、低延遲等特性大大提高了總線的有效數(shù)據(jù)帶寬[1]。又因為PCI-E總線高效傳輸?shù)男阅芎偷土某杀?,讓其獲得了廣闊的應(yīng)用,解決了高性能處理器與低效傳輸系統(tǒng)之間存在的問題,在高速數(shù)據(jù)傳輸與存儲系統(tǒng)中,通過PCI-E總線進(jìn)行數(shù)據(jù)的DMA方式傳輸,可完成設(shè)備間的高速數(shù)據(jù)交換。
文獻(xiàn)[2]使用傳統(tǒng)的狀態(tài)機(jī)設(shè)計PCI-E接口,結(jié)構(gòu)復(fù)雜,容易丟包錯包。文獻(xiàn)[3]使用Block DMA的方式發(fā)送數(shù)據(jù),但不能使用連續(xù)地址塊發(fā)送數(shù)據(jù),必須要多次打包數(shù)據(jù)再發(fā)送,這就限制了DMA的性能。文獻(xiàn)[4]雖然使用最新的ZYNQ芯片進(jìn)行開發(fā),但使用的是PIO模式,占用大量CPU,傳輸效率低下。而如今,由于全球集成電路的快速發(fā)展,嵌入式技術(shù)和芯片的設(shè)計方式正經(jīng)歷著突破性的改革,基于片上系統(tǒng)(System-On-a-Chip,SOC)的開發(fā)平臺將成為未來嵌入式系統(tǒng)設(shè)計的趨勢,SOC主要的設(shè)計方法是通過在FPGA的開發(fā)板上調(diào)用處理器的IP核或使用芯片內(nèi)嵌入的硬核得到可編程平臺,進(jìn)行處理器與FPGA的聯(lián)合開發(fā)。Xilinx公司順應(yīng)時代發(fā)展的趨勢,開發(fā)出的最新的ZYNQ芯片就是新一代SOC設(shè)計的優(yōu)秀產(chǎn)品,將FPGA 結(jié)構(gòu)和ARM處理器設(shè)計在一塊芯片里,實現(xiàn)了軟硬件間的協(xié)同設(shè)計,提供了基于IP 核設(shè)計的嵌入式方法。本文是基于 ZYNQ的SOC設(shè)計平臺下的PCI Express 接口設(shè)計方案,使用SG-DMA方式傳輸,這將極大增強(qiáng)高速數(shù)據(jù)傳輸?shù)男室约跋到y(tǒng)實現(xiàn)方案的集成性和可擴(kuò)展性[5]。
ZYNQ-7000系列基于Xilinx全可編程的可擴(kuò)展處理平臺結(jié)構(gòu),該結(jié)構(gòu)在單芯片內(nèi)集成了基于ARM公司的雙核ARM CortexTM-A9多核處理器的處理系統(tǒng)PS(Processing System)部分和基于Xilinx可編程邏輯資源的可編程邏輯系統(tǒng)(Programmable Logic,PL)部分[6]。
與傳統(tǒng)的FPGA和SOC相比,ZYNQ-7000全可編程SOC包含了完整的RAM處理子系統(tǒng),不僅提供了FPGA的靈活性和可擴(kuò)展性,同時提供了與專用集成電路相關(guān)的性能、功耗和易用性,雙核ARM CortexTM-A9多核CPU是PS的心臟,包括片上存儲器、外部存儲器接口和豐富功能的外設(shè)。因此ZYNQ-7000系列芯片具有強(qiáng)大的可擴(kuò)展性和配置性,成為本設(shè)計要求高性能、高效率方案的首選。
首先PC_1機(jī)發(fā)送端利用基于VS2015開發(fā)的PCI-E應(yīng)用程序?qū)⒁獋鬏數(shù)臄?shù)據(jù)進(jìn)行打包,此數(shù)據(jù)經(jīng)過開發(fā)板上PCI-E X4的物理接口進(jìn)入到FPGA中,這一傳輸過程是PC_1機(jī)通過PCI-E總線的物理接口對DMA控制器發(fā)送寫入數(shù)據(jù)請求,從而將要傳輸?shù)臄?shù)據(jù)存放至TLP包上發(fā)送至板卡。
FPGA端的DMA控制器接收并處理來自上位機(jī)的含有數(shù)據(jù)的TLP包,經(jīng)控制器的拆包處理,獲得此數(shù)據(jù)包中的地址和數(shù)據(jù)等重要信息,并發(fā)送數(shù)據(jù)的有效信號給控制器,控制器把數(shù)據(jù)暫存在AXI_DATA_FIFO進(jìn)行跨時鐘的緩沖,當(dāng)收到數(shù)據(jù)信號后,PS端通過C語言編寫的邏輯程序通過AXI_GP接口和AXI_LITE總線控制AXI_DMA 的IP核以DMA的方式由PS端的Slave AXI HP接口把數(shù)據(jù)從緩沖區(qū)取出并高速傳輸至PS端的DDR3中,當(dāng)PL端傳輸完一組數(shù)據(jù)后,PS端接收到AXI_DMA的中斷信號后,將DDR3緩存的數(shù)據(jù)基于TCP協(xié)議以乒乓操作的方式通過PS端的千兆網(wǎng)口發(fā)送至PC_2接收機(jī)的網(wǎng)口應(yīng)用程序中顯示??傮w方案的系統(tǒng)框圖如圖1所示。
經(jīng)過查找資料并研究分析,現(xiàn)有程序中申請的內(nèi)存一定要物理連續(xù)。DMA是直接對物理內(nèi)存也就是實際的內(nèi)存條進(jìn)行讀寫操作,必須為物理連續(xù)的內(nèi)存;而應(yīng)用程序和驅(qū)動程序一般只能申請到邏輯上連續(xù)的內(nèi)存,在物理上不一定連續(xù),所以DMA傳輸要分成多次完成,在傳輸完一塊物理上連續(xù)的數(shù)據(jù)后引起一次中斷,然后再由主機(jī)進(jìn)行下一塊物理上連續(xù)的數(shù)據(jù)傳輸,在有的論文中可以看到申請內(nèi)存上的一些特殊處理,目的就是獲取物理連續(xù)的內(nèi)存,可獲取4 KB的物理連續(xù)內(nèi)存。但是在內(nèi)存處理上還是存在一些問題,實驗尚可,應(yīng)用則不行。
本文解決方法是FPGA邏輯部分的設(shè)計是基于PCI-E硬核XDMA IP實現(xiàn)。采用的數(shù)據(jù)傳輸方式是SG-DMA方式,它是通過使用鏈表描述物理上不連續(xù)的存儲空間的方式,把鏈表首地址傳回給DMA控制器。DMA控制器在一組連續(xù)物理地址的數(shù)據(jù)傳輸完成之后,并不是像block DMA發(fā)起中斷,而是根據(jù)鏈表的指向來傳輸下一塊連續(xù)的物理地址上的數(shù)據(jù),等到全部的數(shù)據(jù)按要求傳輸完成后再發(fā)起一次中斷[7]。由此可見,SG-DMA方式比block DMA方式的傳輸效率高很多。而使用的XDMA IP核可以完美地支持SG-DMA的方式進(jìn)行數(shù)據(jù)傳輸。PL端XDMA的設(shè)計連接圖如圖2所示。
圖2 PL端XDMA設(shè)計連接圖
PS端設(shè)計連接圖如圖3所示,為了解決異步時鐘的問題,把從PCI-E中接收到的數(shù)據(jù)暫存在FIFO中,F(xiàn)IFO的主接口連接到AXI_DMA的IP從接口上,當(dāng)PS端發(fā)起數(shù)據(jù)DMA方式傳輸后,RAM端的ZYNQ處理器核會通過GP接口和AXI_LITE總線傳輸指令至AXI_DMA,當(dāng)其接到指令后便通過S_AXIS_S2MM接口從數(shù)據(jù)緩存的FIFO中接收數(shù)據(jù),因為PL端與PS端進(jìn)行數(shù)據(jù)交換必須使用AXI總線的數(shù)據(jù),因此AXI_DMA會把接收到的流模式數(shù)據(jù)變成AXI模式,當(dāng)AXI總線的握手結(jié)束信號出現(xiàn)高電平時,則表示需要發(fā)送的數(shù)據(jù)已經(jīng)傳輸完成,當(dāng)一次數(shù)據(jù)傳輸結(jié)束,IP核便會產(chǎn)生中斷信號,觸發(fā)RAM端的中斷控制器響應(yīng),PS通過中斷服務(wù)函數(shù)清除AXI_DMA的中斷狀態(tài),在DMA中斷函數(shù)中,通過DMA完成指示信號顯示為高電平后,標(biāo)志著一次完整的DMA數(shù)據(jù)傳輸結(jié)束。
PS的DMA數(shù)據(jù)接收采用了乒乓操作的模式,2個緩沖區(qū)交替進(jìn)行數(shù)據(jù)接收[8],適合對數(shù)據(jù)流進(jìn)行流水線式的處理,可以有效提高數(shù)據(jù)傳輸?shù)男省?/p>
在網(wǎng)口的設(shè)計中,根據(jù)需求,把開發(fā)板當(dāng)作主設(shè)備,PC_2機(jī)當(dāng)作從設(shè)備接收機(jī)。在邏輯程序中,調(diào)用網(wǎng)口連接函數(shù),完成了開發(fā)板向PC_2機(jī)發(fā)起TCP 連接請求的命令。在TCP連接請求3次握手完成后,通過回調(diào)函數(shù)是否被調(diào)用表示開發(fā)板與PC_2接收機(jī)之間的TCP連接建立完成。
本系統(tǒng)采用由Xilinx公司研發(fā)的ZYNQ 7035芯片構(gòu)成的開發(fā)板,該開發(fā)板帶有PCI-E X4物理接口,測試平臺發(fā)送端使用帶有PCI-E X4接口的工控機(jī),接收端使用普通PC機(jī),通過網(wǎng)口連接到開發(fā)板,共同搭建了PCI-E測試平臺。實驗測試如下:
測試一:從PC_1機(jī)通過應(yīng)用程序驅(qū)動PCI-E X4接口,向FPGA開發(fā)板中發(fā)送數(shù)據(jù),并進(jìn)行PCI-E接口的測速。
測試結(jié)果如圖4所示,當(dāng)數(shù)據(jù)大小為1K時,發(fā)送速度為14 MB/s,接收速度為7 MB/s,而當(dāng)數(shù)據(jù)大小增至8 M大小時,PCI-E的發(fā)送速度可達(dá)到1 160 MB/s,接收可達(dá)到1 467 MB/s,與文獻(xiàn)[3]平均速度為506 MB/s相比,本方案極大提高了PCI-E的傳輸性能,并通過PCI-E的傳輸速度結(jié)果比較,可以看出隨著測試數(shù)據(jù)大小的增大,可有效提高接口通路的利用率,SG-DMA的傳輸性能會越來越高,這與DMA傳輸?shù)奶匦韵喾稀?/p>
圖4 PCI-E接口速度測試
測試二:開發(fā)板通過千兆網(wǎng)口向PC_2接收機(jī)發(fā)送數(shù)據(jù),接收機(jī)通過網(wǎng)絡(luò)調(diào)試助手對接收到的數(shù)據(jù)進(jìn)行顯示。結(jié)果如圖5所示,在發(fā)送文件中發(fā)送了從00到FF的循環(huán)數(shù)據(jù),經(jīng)過網(wǎng)絡(luò)接收數(shù)據(jù)與發(fā)送文件的對比,數(shù)據(jù)準(zhǔn)確且沒有丟包和錯包的現(xiàn)象發(fā)生,解決了傳統(tǒng)狀態(tài)機(jī)極易出現(xiàn)的丟包和錯包的情況。
圖5 通過千兆網(wǎng)口向PC_2機(jī)上的網(wǎng)絡(luò)調(diào)試助手接收 從PCI-E接口接收到的數(shù)據(jù)
通過調(diào)用IP核的設(shè)計方法完成了PCI-E總線接口的實現(xiàn),并在PS端采用邏輯程序?qū)W(wǎng)口進(jìn)行開發(fā),聯(lián)合開發(fā)板和搭建的硬件平臺,對整個系統(tǒng)進(jìn)行了測試,實驗結(jié)果表明本方案的正確性和可靠性,驗證了PCI-E接口的傳輸速度。為了能夠進(jìn)一步提高在FPGA開發(fā)板上PCI-E接口的高速傳輸數(shù)據(jù)的應(yīng)用性能,下一步可在其中加載SMS4加密算法,對數(shù)據(jù)進(jìn)行加密處理,并在處理器上搭載實時操作系統(tǒng)進(jìn)行復(fù)雜的數(shù)據(jù)處理,最后通過千兆網(wǎng)口發(fā)送到網(wǎng)絡(luò)上。該項目可發(fā)展成高速的數(shù)據(jù)加密卡設(shè)備,在網(wǎng)絡(luò)安全領(lǐng)域具有廣闊的應(yīng)用前景。