摘要: 提出了一種FPGA 遠(yuǎn)程動(dòng)態(tài)重構(gòu)的方法, 結(jié)合FPGA 動(dòng)態(tài)重構(gòu)技術(shù)和GSM 通信技術(shù)來實(shí)現(xiàn)。利用GSM 技術(shù)實(shí)現(xiàn)配置數(shù)據(jù)的無線傳輸,在單片機(jī)控制下將數(shù)據(jù)存儲(chǔ)于CF 卡中。在內(nèi)嵌硬核微處理器PowerPC405 控制下,F(xiàn)PGA 通過內(nèi)部配置存取端口讀取CF 卡中新的配置數(shù)據(jù), 對(duì)可重構(gòu)區(qū)進(jìn)行配置以實(shí)現(xiàn)新的功能。
隨著現(xiàn)場(chǎng)可編程門陣列的廣泛應(yīng)用, 對(duì)其進(jìn)行靈活的重新配置的研究也越來越多。目前絕大多數(shù)FPGA 都是基于查找表LUT (Look UP Table ) 的技術(shù), 采用SRAM工藝生產(chǎn)。這種工藝的FPGA 有兩層結(jié)構(gòu), 上層為配置存儲(chǔ)器, 下層是硬件邏輯層。通過上層配置信息控制硬件層門電路的通斷, 改變芯片內(nèi)基本邏輯塊的布線, 從而形成特定的功能。這種架構(gòu)為動(dòng)態(tài)重構(gòu)技術(shù)實(shí)現(xiàn)提供了可能。一個(gè)FPGA 大型數(shù)字系統(tǒng)總是由很多功能模塊組合而成, 這樣各個(gè)系統(tǒng)模塊的激活狀態(tài)就可能在時(shí)間軸上產(chǎn)生分離, 時(shí)間上分離的模塊就可以共用一個(gè)硬件邏輯區(qū), 根據(jù)需要對(duì)這個(gè)邏輯區(qū)動(dòng)態(tài)地改變配置, 實(shí)現(xiàn)不同的功能, 這就是局部動(dòng)態(tài)重構(gòu)[ 1]。FPGA 的動(dòng)態(tài)重構(gòu)使其應(yīng)用更加靈活, 減少了硬件的資源消耗, 縮短了開發(fā)周期。但是對(duì)一些特殊場(chǎng)合, 如深海數(shù)據(jù)采集或機(jī)器人野外勘探, 開發(fā)者可以為某個(gè)系統(tǒng)模塊設(shè)計(jì)幾個(gè)功能, 設(shè)備在自主運(yùn)行過程中根據(jù)需要選擇相應(yīng)的配置數(shù)據(jù)進(jìn)行配置。如果遇到特殊環(huán)境, 事先設(shè)計(jì)的功能有可能不適合工作要求, 需要增加新的功能。在目前硬件進(jìn)化技術(shù)還無法進(jìn)行實(shí)際應(yīng)用的情況下, 本文設(shè)計(jì)了一種遠(yuǎn)程動(dòng)態(tài)重構(gòu)的系統(tǒng)來解決上述問題。
1 遠(yuǎn)程動(dòng)態(tài)重構(gòu)系統(tǒng)的結(jié)構(gòu)
遠(yuǎn)程動(dòng)態(tài)重構(gòu)系統(tǒng)有PowerPC 處理器和89C54 微控制器兩個(gè)核心。VirtexII -Pro FPGA 內(nèi)部集成有2 個(gè)PowerPC405 嵌入式處理器[2], 本文系統(tǒng)使用其中一個(gè), 實(shí)現(xiàn)對(duì)動(dòng)態(tài)重構(gòu)進(jìn)行控制和調(diào)配。FPGA 內(nèi)部用于對(duì)局部重構(gòu)區(qū)域PRR 進(jìn)行重新配置的硬件模塊有3 個(gè), 分別是嵌入式內(nèi)核PowerPC、系統(tǒng)高級(jí)配置環(huán)境System ACE和內(nèi)部配置訪問通道ICAP。System ACE 是一種在系統(tǒng)編程的高級(jí)配置解決方案, 它提供CF (Compact Flash ) 、MPU 和Test JTAG 等多個(gè)接口, 本系統(tǒng)采用CF 卡作為配置數(shù)據(jù)的來源, 可以更方便地改變和存儲(chǔ)配置數(shù)據(jù)。ICAP 的主要作用就是按照特定時(shí)序?qū)⑴渲脭?shù)據(jù)重新配置到PRR 中[3]。
遠(yuǎn)程數(shù)據(jù)傳輸通過外接控制器89C54 完成, 一方面控制器要通過UART 接口接收GSM 模塊TC35 傳來的數(shù)據(jù); 另一方面要把接收到的配置數(shù)據(jù)寫入CF 卡中, 以供FPGA 系統(tǒng)讀取。
System ACE 和89C54 控制器共用CF 卡的控制接口。為避免互相影響, 本系使用多路復(fù)用器將CF 卡端口做分時(shí)復(fù)用處理, 即配置過程中與System ACE 連接,而數(shù)據(jù)傳輸存儲(chǔ)過程中與89C54 進(jìn)行連接。遠(yuǎn)程動(dòng)態(tài)重構(gòu)系統(tǒng)結(jié)構(gòu)如圖1 所示。
2 遠(yuǎn)程動(dòng)態(tài)重構(gòu)的本地準(zhǔn)備
以機(jī)械手臂的控制為例, 采用PID 控制、模糊控制:和備用三種控制方案, 每個(gè)控制算法經(jīng)過驗(yàn)證綜合生成獨(dú)立的bit 流模塊。這三個(gè)模塊共用一個(gè)可重構(gòu)的區(qū)域PRregion , 根據(jù)具體情況, 選用最適合的算法模塊, 動(dòng)態(tài)地配置重構(gòu)區(qū)域來控制機(jī)械手臂, 其他靜態(tài)邏輯區(qū)域則仍然正常運(yùn)行。這樣不僅提高了系統(tǒng)的靈活性, 而且節(jié)省了配置時(shí)間、減少了不必要的消耗。FPGA 的設(shè)計(jì)流程一般包括設(shè)計(jì)、仿真、綜合、實(shí)現(xiàn)過程, 本文根據(jù)系統(tǒng)自身結(jié)構(gòu)提出如圖2 所示的設(shè)計(jì)流程。
FPGA 重構(gòu)系統(tǒng)綜合使用EDK(Embedded Development Kit) 、ISE和PlanAhead 多種工具平臺(tái), 采用分層化設(shè)計(jì),以簡(jiǎn)化設(shè)計(jì)過程。其過程如下:
(1) 利用嵌入式開發(fā)工具EDK 設(shè)計(jì)一個(gè)基于PowerPC405的嵌入式控制系統(tǒng)[4], 添加SystemACE_Compact-Flash 外設(shè)以支持從CF 卡配置FPGA; 添加IP 核opb_hwicap 以支持嵌入式內(nèi)核通過ICAP 讀取配置數(shù)據(jù)動(dòng)態(tài)地配置FPGA。
(2)EDK 包含有軟件開發(fā)工具SDK, 因此利用SDK對(duì)PowerPC405 進(jìn)行軟件編程和調(diào)試, 最終生成應(yīng)用程序二進(jìn)制executable.elf 文件; 利用EDK 外設(shè)創(chuàng)建向?qū)В?創(chuàng)建多個(gè)控制算法IP 模塊, 在各自的VHDL 文件中編寫相應(yīng)的算法; 使用ISE 工具對(duì)多個(gè)算法模塊進(jìn)行綜合、創(chuàng)建頂層模塊、實(shí)例化嵌入式系統(tǒng)和算法模塊。綜合產(chǎn)生top 網(wǎng)表文件。
(3) 創(chuàng)建PlanAhead 工程, 使用以上產(chǎn)生的網(wǎng)表文件和約束文件進(jìn)行布局布線。其中最重要的是將算法模塊設(shè)置為可重構(gòu)模塊, 對(duì)其進(jìn)行嚴(yán)格的區(qū)域約束[ 5], 其約束代碼如下:
AREA_GROUP "AL_PRregion" RANGE = SLICE_ (minX)
(minY):SLICE_(maxX)(maxY)
AREA_GROUP "AL_PRregion" RANGE = RAMB16_
(minX)(minY):RAMB16(maxX)(maxY)
在PlanAhead 工具中可以通過可視化方法進(jìn)行區(qū)域約束, 既直觀又簡(jiǎn)單??芍貥?gòu)模塊在運(yùn)行過程中如果需要實(shí)現(xiàn)不同的控制算法, 則需要在重構(gòu)區(qū)中添加所有算法模塊綜合生成的網(wǎng)表文件、使用PR Assemble 命令生成多個(gè)不同的算法bit 流文件。除了動(dòng)態(tài)bit 流文件外,PlanAhead 還會(huì)產(chǎn)生一個(gè)靜態(tài)完整的bit 流文件static_full.bit 。可執(zhí)行以下兩個(gè)命令生成ace 配置文件:
(1)data2mem -bm implementation/system_stub_bd -bt implementation/static_full.bit -bd TestApp/executable.elf tag
ppc310_0 – o b implementation/static.bit 。
(2)xmd -tcl genace.tcl -jprog -target ppc_hw -hw
implementation/static.bit -elf TestApp/executable.elf -board
ml310 -ace system.ace 。
3 遠(yuǎn)程動(dòng)態(tài)重構(gòu)的實(shí)現(xiàn)
經(jīng)過動(dòng)態(tài)重構(gòu)本地準(zhǔn)備之后, 得到如表1 所示的CF卡配置文件列表。設(shè)置保留模塊,是為了給新的控制算法保留一個(gè)接口(以一個(gè)空文件存儲(chǔ)在CF 卡中)。
傳統(tǒng)的本地重構(gòu)設(shè)計(jì)完成后, 針對(duì)重構(gòu)區(qū)域會(huì)得到幾個(gè)不同的配置文件, 如針對(duì)機(jī)械臂控制算法重構(gòu)區(qū)得到兩個(gè)初期設(shè)計(jì)的控制算法配置文件。在實(shí)際運(yùn)行過程中, 有些環(huán)境只需PID 控制就可滿足要求, 而有些環(huán)境采用模糊控制更合適。如果采用這兩種控制方法都不能滿足工作要求時(shí), 必然要對(duì)初期設(shè)計(jì)進(jìn)行升級(jí), 對(duì)復(fù)雜危險(xiǎn)的工作現(xiàn)場(chǎng)進(jìn)行遠(yuǎn)程動(dòng)態(tài)重構(gòu)。
本文提出的設(shè)計(jì)方法是:GSM 模塊作為遠(yuǎn)程數(shù)據(jù)傳輸工具, 與89C54 單片機(jī)通過UART 端口連接, 單片機(jī)接收到一個(gè)扇區(qū)512 B 的數(shù)據(jù)寫入CF 卡reserved.bit 文件中。GSM 模塊采用西門子公司的TC35 模塊,它支持AT指令,由89C54 發(fā)送AT 指令A(yù)SCI 碼對(duì)TC35 進(jìn)行控制[5]。本設(shè)計(jì)主要涉及到的AT 指令如表2 所示,TC35 以串行模式與89C54 進(jìn)行通信。
CF 卡必須格式化成FAT16 格式才能用于FPGA 的配置文件存儲(chǔ)。FAT 格式磁盤必須一次性對(duì)一個(gè)扇區(qū)進(jìn)行操作, 所以單片機(jī)必須從TC35 接收滿512 B 的數(shù)據(jù)才可以對(duì)CF 卡進(jìn)行寫操作。FPGA 配置完成之后CF 卡處于閑置狀態(tài), 通過多路復(fù)用器將CF 卡與外接控制器連接以完成對(duì).bit 文件的讀寫操作。單片機(jī)對(duì)CF 卡進(jìn)行操作本質(zhì)就是對(duì)FAT 文件系統(tǒng)的讀寫。
FAT 格式磁盤的邏輯分區(qū)依次為: 引導(dǎo)扇區(qū)、文件分配表(FAT1 和FAT2) 、文件目錄區(qū)(FDT) 和數(shù)據(jù)區(qū)[6]。引導(dǎo)扇區(qū)用于存儲(chǔ)引導(dǎo)程序和磁盤信息, 外界訪問CF卡都要經(jīng)過引導(dǎo)區(qū)的識(shí)別驗(yàn)證;FAT 是給每個(gè)文件分配磁盤物理空間的表格, 數(shù)據(jù)區(qū)的劃分單元為簇, 一個(gè)簇包括64 個(gè)扇區(qū),F(xiàn)AT 表正是為每個(gè)文件構(gòu)造一個(gè)簇鏈表; 文件目錄區(qū)是尋找文件的入口, 其內(nèi)容是每個(gè)文件的目錄信息; 在文件目錄之后的扇區(qū)都是以簇為單位進(jìn)行數(shù)據(jù)存儲(chǔ), 這就是數(shù)據(jù)區(qū)。
CF 卡與89C54 接口配置關(guān)系如圖3 所示, 單片機(jī)使用TrueIDE 模式對(duì)CF 卡進(jìn)行讀寫, 采用邏輯塊LAB(Logical Block Addressing ) 方式進(jìn)行尋址。
CF 卡寫一個(gè)扇區(qū)( 讀扇區(qū)基本相似, 限于篇幅不列出) 的代碼如下:
Write_Sectors: mov R2,#1 ; 一次寫一個(gè)扇區(qū)
mov R3,#0Ah; 假設(shè)LBA 為000000Ah
mov R4,#0
mov R5,#0
mov R6, #0
mov R7, #WriteSctr
acall Function; 將參數(shù)寫入CF 控制寄存器
acall WaitDRQ ; 等待數(shù)據(jù)請(qǐng)求
acall Write512
ret
Write512 :mov R0,#high(data); 取數(shù)據(jù)高地址
mov R1,#low(data); 取數(shù)據(jù)低地址
mov R7,#2 ;512 B= 2 * 256
mov R6,#0 ;256 B
write: mov dph,R0; 獲取地址
mov dpl, R1
clr a
movc a, @a+dptr ; 獲取一個(gè)數(shù)據(jù)
inc dptr ; 指向下一個(gè)數(shù)據(jù)
mov R0, dph ; 保存地址
mov R1, dpl
mov DPTR,#Data_Reg; 到CF 數(shù)據(jù)寄存器
movx @dptr, a ; 向CF 卡寫一個(gè)數(shù)據(jù)
djnz R6, write
djnz R7, write ; 將512 B 的數(shù)據(jù)全部寫入CF 卡
ret
遠(yuǎn)程動(dòng)態(tài)重構(gòu)的流程如圖4 所示。現(xiàn)場(chǎng)TC35 接收到新短信數(shù)據(jù)時(shí)會(huì)有觸發(fā)信號(hào)發(fā)送給89C54 單片機(jī), 單片機(jī)開始讀取TC35Flash 數(shù)據(jù)。在對(duì)CF 卡進(jìn)行寫操作之前, 首先要讀取reserved.bit 文件的首簇號(hào); 讀取CF 卡文件目錄表FDT, 得到reserved.bit 的信息, 其中偏移地址為1Ah~1Bh , 所存儲(chǔ)的2 B 為文件首簇號(hào), 而接下來4 B代表文件大小。由文件首簇號(hào)在FAT 表中找到文件入口, 然后跟蹤簇鏈至簇尾(0XFFFF) , 按照LAB 尋址方式將數(shù)據(jù)按扇區(qū)寫入CF 卡數(shù)據(jù)區(qū), 邏輯扇區(qū)號(hào)LBA 可由簇號(hào)按公式“LBA=( 簇號(hào)-2)×64+513 ” 計(jì)算得到。如果文件數(shù)據(jù)量比舊文件多, 則在FAT 中增加鏈表, 直至把數(shù)據(jù)存儲(chǔ)完畢; 如果文件較小, 則將原文件剩余FAT 簇鏈都寫入0x0000, 以釋放空間。對(duì)CF 卡的寫操作則不對(duì)其他區(qū)域進(jìn)行更改。
CF 卡數(shù)據(jù)更新完畢后,接通CF 卡與SystemACE 控制器之間的多路復(fù)用器, 對(duì)控制算法重構(gòu)區(qū)進(jìn)行局部動(dòng)態(tài)配置, 配置過程中不對(duì)其他邏輯區(qū)域的運(yùn)行造成影響。
遠(yuǎn)程動(dòng)態(tài)重構(gòu)結(jié)合了FPGA 局部動(dòng)態(tài)重構(gòu)和GSM無線數(shù)據(jù)傳輸?shù)膬?yōu)勢(shì), 對(duì)用在野外勘測(cè)的機(jī)器人和數(shù)據(jù)采集處理系統(tǒng)有很高的應(yīng)用價(jià)值, 允許設(shè)計(jì)人員根據(jù)系統(tǒng)運(yùn)作情況實(shí)時(shí)地改變機(jī)器人的控制算法或數(shù)據(jù)處理算法, 使其更加適合工作環(huán)境, 既方便了設(shè)計(jì)人員對(duì)遠(yuǎn)程設(shè)備的配置升級(jí), 又節(jié)省了大量人力物力。今后該方案將計(jì)算機(jī)與FPGA 硬件平臺(tái)連接, 可以為硬件的外部進(jìn)化遠(yuǎn)程下載染色體到硬件平臺(tái)提供有效途徑。
評(píng)論