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