劉 劍,趙 赟
(中國(guó)船舶重工集團(tuán)公司第七二三研究所,江蘇 揚(yáng)州 225101)
現(xiàn)場(chǎng)可編程門陣列(FPGA)遠(yuǎn)程調(diào)試由于不受調(diào)試線纜傳輸距離的限制,大量學(xué)者近年來(lái)對(duì)其在船舶、核實(shí)驗(yàn)等工況環(huán)境下的應(yīng)用展開了研究[1-4]。賽靈思虛擬電纜(XVC)[5]協(xié)議是一種基于TCP/IP的網(wǎng)絡(luò)通信協(xié)議,適用于FPGA遠(yuǎn)程JTAG接口加載與調(diào)試,薛等[6]基于ARM單芯片實(shí)現(xiàn)了XVC協(xié)議的多目標(biāo)FPGA菊花鏈?zhǔn)竭h(yuǎn)程網(wǎng)絡(luò)調(diào)試,但其JTAG加載性能較差。隨著可編程SoC和AXI總線標(biāo)準(zhǔn)的快速發(fā)展和應(yīng)用,李[7]和薛[8]分別采用軟核和硬核可編程片上系統(tǒng)(SoPC)實(shí)現(xiàn)了AXI轉(zhuǎn)JTAG方式的XVC遠(yuǎn)程調(diào)試,SoPC遠(yuǎn)程調(diào)試系統(tǒng)相較于ARM進(jìn)一步提升了遠(yuǎn)程調(diào)試的加載性能。但目前XVC遠(yuǎn)程調(diào)試方案在FPGA加載速度和效率方面普遍仍低于傳統(tǒng)JTAG線纜,這限制了XVC協(xié)議在大容量、多目標(biāo)FPGA遠(yuǎn)程調(diào)試和加載方面的進(jìn)一步推廣和應(yīng)用。
本文從基于SoPC的XVC協(xié)議性能優(yōu)化方面開展研究,提出一種改進(jìn)型JTAG轉(zhuǎn)換器結(jié)構(gòu),引入AXI-DMA[9]和非阻塞IO傳輸機(jī)制,提高XVC協(xié)議的JTAG數(shù)據(jù)轉(zhuǎn)換速率,最終得到性能優(yōu)化的FPGA遠(yuǎn)程調(diào)試系統(tǒng)。
基于ZYNQ硬核SoPC構(gòu)建XVC遠(yuǎn)程網(wǎng)絡(luò)調(diào)試系統(tǒng),系統(tǒng)結(jié)構(gòu)如圖1所示。ZYNQ SoPC用于遠(yuǎn)端目標(biāo)FPGA的JTAG接口控制,其可編程邏輯(PL)部分用于構(gòu)建XVC協(xié)議專用JTAG數(shù)據(jù)轉(zhuǎn)換器,具有邏輯加速的特性,并通過(guò)處理器系統(tǒng)(PS)的高性能(HP)從機(jī)AXI總線接口,JTAG-DMA轉(zhuǎn)換器主動(dòng)地執(zhí)行高效率數(shù)據(jù)傳輸;在以ARM處理器為核心的PS部分,Linux內(nèi)核模塊管理PL端JTAG轉(zhuǎn)換器的DMA讀寫驅(qū)動(dòng),XVC服務(wù)器軟件適用于操作JTAG-DMA設(shè)備進(jìn)行多目標(biāo)FPGA的JTAG信號(hào)同時(shí)傳輸;本地計(jì)算機(jī)與ZYNQ SoPC通過(guò)以太網(wǎng)-局域網(wǎng)互聯(lián),XVC客戶端以點(diǎn)對(duì)點(diǎn)或交換的方式連接遠(yuǎn)端XVC服務(wù)器下特定端口,對(duì)指定的目標(biāo)FPGA進(jìn)行遠(yuǎn)程加載與調(diào)試。
圖1 XVC遠(yuǎn)程網(wǎng)絡(luò)調(diào)試系統(tǒng)結(jié)構(gòu)
XVC遠(yuǎn)程網(wǎng)絡(luò)調(diào)試系統(tǒng)適用于多目標(biāo)FPGA、多設(shè)備節(jié)點(diǎn)場(chǎng)合下的多人協(xié)同遠(yuǎn)程調(diào)試和開發(fā),可通過(guò)網(wǎng)絡(luò)長(zhǎng)距離布線遠(yuǎn)離調(diào)試設(shè)備環(huán)境。
提出的改進(jìn)型JTAG轉(zhuǎn)換器結(jié)構(gòu)如圖2所示,典型JTAG轉(zhuǎn)換器僅由JTAG移位器和控制邏輯組成,JTAG數(shù)據(jù)均由處理器通過(guò)AXI-Lite總線進(jìn)行搬運(yùn)。通過(guò)引入DMA引擎,提出的改進(jìn)型JTAG轉(zhuǎn)換器將JTAG數(shù)據(jù)搬運(yùn)事務(wù)轉(zhuǎn)由轉(zhuǎn)換器內(nèi)部DMA邏輯進(jìn)行控制。在JTAG數(shù)據(jù)傳輸效率方面,AXI總線位寬和突發(fā)傳輸長(zhǎng)度可變,相比于AXI-Lite總線傳輸帶寬和傳輸效率更高;DMA引擎可以直接通過(guò)AXI總線讀寫共享內(nèi)存,降低處理器在數(shù)據(jù)總線上的占用率,提高JTAG數(shù)據(jù)的傳輸速度,進(jìn)而提高JTAG轉(zhuǎn)換器的轉(zhuǎn)換效率。
圖2 JTAG-DMA轉(zhuǎn)換器結(jié)構(gòu)
改進(jìn)型JTAG轉(zhuǎn)換器執(zhí)行1次JTAG數(shù)據(jù)轉(zhuǎn)換,其流程為控制字傳輸,JTAG數(shù)據(jù)傳輸和JTAG移位轉(zhuǎn)換,時(shí)序如圖3所示。改進(jìn)型JTAG轉(zhuǎn)換器將控制字傳輸與JTAG數(shù)據(jù)傳輸分離,由控制字指定數(shù)據(jù)階段的目標(biāo)/源地址、傳輸位長(zhǎng)等參數(shù),并啟動(dòng)JTAG轉(zhuǎn)換;在轉(zhuǎn)換過(guò)程中JTAG數(shù)據(jù)由DMA引擎進(jìn)行AXI主動(dòng)傳輸控制,JTAG移位器在啟動(dòng)前將JTAGTMS和TDI數(shù)據(jù)由內(nèi)存搬運(yùn)至移位器中,完成JTAG移位后,回讀的JTAG TDO數(shù)據(jù)由DMA從移位器再搬運(yùn)回指定內(nèi)存地址。
圖3 JTAG轉(zhuǎn)換時(shí)序
AXI總線一次讀寫突發(fā)數(shù)不能超過(guò)256,同時(shí)其傳輸字節(jié)長(zhǎng)度也不能超過(guò)4 kB尋址范圍,單次JTAG最大轉(zhuǎn)換比特?cái)?shù)受限于AXI總線傳輸量??紤]到AXI總線讀寫時(shí)間會(huì)占用一部分單次轉(zhuǎn)換時(shí)間且該時(shí)間在高速JTAG下不可忽略,這影響到總JTAG轉(zhuǎn)化效率。在AXI-DMA與JTAG移位器之間加入讀寫緩沖區(qū),可將單次JTAG數(shù)據(jù)長(zhǎng)傳輸微分為N個(gè)多次JTAG數(shù)據(jù)短傳輸,其讀寫時(shí)序如圖4所示。Rx表示AXI-DMA從指定內(nèi)存地址取JTAG TMS和TDI數(shù)據(jù),rx表示讀緩沖區(qū)內(nèi)容更新,Sx表示第x次JTAG移位器移位,Wx表示JTAG回讀數(shù)據(jù)向?qū)懢彌_區(qū)寫入,wx表示AXI-DMA將寫緩沖區(qū)的JTAG TDO數(shù)據(jù)寫入內(nèi)存。讀寫緩沖區(qū)的引入使得單次JTAG長(zhǎng)傳輸不受到AXI總線讀寫量的影響,可提高JTAG單次傳輸長(zhǎng)度和JTAG數(shù)據(jù)轉(zhuǎn)換效率。
圖4 JTAG轉(zhuǎn)換器長(zhǎng)傳輸讀寫時(shí)序
在第x次的JTAG短傳輸中,短傳輸開始時(shí)更新讀緩沖區(qū)rx,同時(shí)開始上一次短傳輸?shù)膶懭雡x-1和下一次短傳輸?shù)念A(yù)讀Rx+1,短傳輸過(guò)程中JTAG TDO的回讀數(shù)據(jù)直接寫入緩沖區(qū)Wx?;贏XI-DMA的改進(jìn)型JTAG轉(zhuǎn)換器,單次轉(zhuǎn)換的JTAG比特轉(zhuǎn)換效率理論值為:
(1)
式中:Ns表示JTAG移位個(gè)數(shù);fTCK表示JTAG TCK頻率;ts為JTAG短傳輸轉(zhuǎn)換時(shí)間,ts=Ns/fTCK;tc表示AXI-Lite總線控制字傳輸時(shí)間;tR表示AXI總線讀時(shí)間;tw表示AXI總線寫時(shí)間。
當(dāng)JTAG總移位數(shù)足夠大時(shí),AXI總線讀寫時(shí)間在總轉(zhuǎn)換時(shí)間中僅為一次短傳輸讀寫時(shí)間,可忽略不計(jì),理論JTAG效率接近100%;JTAG短傳輸移位時(shí)間必需大于AXI總線讀寫所需時(shí)間之和,以保證短傳輸過(guò)程中AXI總線數(shù)據(jù)正常傳輸。
在遠(yuǎn)程網(wǎng)絡(luò)調(diào)試系統(tǒng)下,以太網(wǎng)傳輸可能產(chǎn)生網(wǎng)絡(luò)阻塞、丟包、并發(fā)等情況,XVC協(xié)議在傳輸包解析過(guò)程中會(huì)產(chǎn)生連續(xù)的IO請(qǐng)求。在內(nèi)核模塊中JTAG轉(zhuǎn)換器設(shè)備驅(qū)動(dòng)需實(shí)現(xiàn)非阻塞式讀寫,以用于應(yīng)用層連續(xù)讀寫請(qǐng)求的及時(shí)響應(yīng),消除連續(xù)IO請(qǐng)求引起的外設(shè)讀寫阻塞行為。
考慮到JTAG-DMA轉(zhuǎn)換器的DMA傳輸機(jī)制,采用基于DMA環(huán)形緩沖區(qū)的非阻塞IO驅(qū)動(dòng)模型,IO請(qǐng)求處理框架如圖5所示。DMA池是為JTAG-DMA轉(zhuǎn)換器分配的固定物理內(nèi)存空間,由多個(gè)DMA塊(DMA Block,DB)組成,并為每一個(gè)DMA塊指定可讀、可寫和忙屬性,對(duì)應(yīng)內(nèi)核中狀態(tài)機(jī)跳轉(zhuǎn)和JTAG轉(zhuǎn)換器控制字管理。產(chǎn)生讀寫請(qǐng)求時(shí),首先檢查DMA塊是否可讀可寫,寫操作時(shí)將JTAG數(shù)據(jù)拆分并重新打包拷貝至DMA塊,讀操作時(shí)將DMA塊數(shù)據(jù)拷貝出來(lái)組包為JTAG回讀數(shù)據(jù),并更新DMA塊屬性,立即結(jié)束讀寫流程。
圖5 JTAG-DMA驅(qū)動(dòng)IO請(qǐng)求處理框架
JTAG-DMA轉(zhuǎn)換器內(nèi)核設(shè)備驅(qū)動(dòng)的非阻塞傳輸機(jī)制適用于多目標(biāo)JTAG設(shè)備、連續(xù)IO的應(yīng)用條件,提高XVC協(xié)議JTAG數(shù)據(jù)包轉(zhuǎn)換效率和傳輸可靠性。
根據(jù)提出的XVC協(xié)議優(yōu)化方法,搭建FPGA遠(yuǎn)程調(diào)試系統(tǒng),并采用課題組研制的預(yù)處理板[10]實(shí)施FPGA位流加載實(shí)驗(yàn)。測(cè)試軟件平臺(tái)為Vivado 2019.1,圖6展示了預(yù)處理板ZYNQ SoPC硬件平臺(tái)下設(shè)計(jì)的JTAG-DMA IP核;測(cè)試目標(biāo)FPGA芯片為Xilinx Virtx7 690 T,并使用JTAG線纜(Xilinx Platform Cable II和Digilent HS3)加載同一位流文件進(jìn)行測(cè)試,測(cè)試結(jié)果如表1所示。實(shí)際JTAG比特效率為:
表1 位流文件加載測(cè)試結(jié)果
圖6 JTAG-DMA IP核
(2)
式中:SBF表示目標(biāo)FPGA比特流文件大?。籺load表示實(shí)際加載時(shí)間,由Vivado控制臺(tái)日志信息得到。
本文提出了一種基于AXI-DMA的改進(jìn)型JTAG轉(zhuǎn)換器結(jié)構(gòu),并引入基于DMA環(huán)形緩沖區(qū)的非阻塞IO驅(qū)動(dòng)模型,用于優(yōu)化XVC協(xié)議JTAG轉(zhuǎn)換效率。實(shí)驗(yàn)結(jié)果表明,優(yōu)化后XVC協(xié)議的加載性能相比于典型XVC遠(yuǎn)程調(diào)試系統(tǒng)有巨大的提升,其JTAG比特效率超過(guò)或可達(dá)到JTAG線纜的性能。