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