文豐,韓冰,袁小康
(中北大學(xué)電子測試技術(shù)國家重點實驗室,山西太原 030051)
一般情況下,F(xiàn)PGA 需要通過JTAG 接口,使用配套的下載線和上位機(jī)進(jìn)行連接,來完成程序的更新。這種方法有很大的局限性,如一些產(chǎn)品的使用環(huán)境特殊,要求結(jié)構(gòu)密封,這樣就無法打開下載口更新程序。該文以此為出發(fā)點,介紹了一種由Flash、FPGA 和以太網(wǎng)組成的遠(yuǎn)距離在線更新系統(tǒng)。
Xilinx 7 系列FPGA 支持多重配置功能(即Reconfiguration and MultiBoot),具體劃分有:主串模式、從串模式、主并模式、從并模式和SelectMAP 模式,MultiBoot 特性允許用戶在不掉電重啟的情況下,針對不同的功能需求,從存儲于Flash 中的多個更新文件中選擇其中的一個進(jìn)行加載,便可實現(xiàn)FPGA 系統(tǒng)配置更新,完成對應(yīng)的設(shè)計任務(wù)。這就為FPGA遠(yuǎn)距離更新帶來極大的便捷性和操作性[1]。該文提出一種遠(yuǎn)距離更新方法,將待更新的配置文件編程到Flash,F(xiàn)PGA 將優(yōu)先更新配置這些文件,實現(xiàn)在線更新。
硬件設(shè)計框架如圖1 所示,主要可分為FPGA 控制,以太網(wǎng)傳輸和Flash 存儲,以太網(wǎng)選用Marvell 的88E1111 芯片,它的功能主要是把上位機(jī)下發(fā)的指令和更新程序數(shù)據(jù)傳輸給FPGA,F(xiàn)PGA 選擇Xilinx公司的XC7A100T 芯片,7 系列芯片采用28 nm 加工工藝,集成度高、價格低廉、功耗控制較好。Flash 采用Micron 生產(chǎn)的N25Q128A,該芯片通過SPI 總線與FPGA 通信,內(nèi)存大小為128 MB。FPGA 收到配置文件后,通過SPI 讀寫將配置文件寫入Flash 指定的存儲空間[2]。
圖1 總體結(jié)構(gòu)框圖
以太網(wǎng)接口選用TCP/IP 通信協(xié)議,進(jìn)行上位機(jī)與FPGA 兩者之間的通信。以太網(wǎng)接口在很多方面與Flash 接口存在不同,例如傳輸?shù)乃俾屎蛿?shù)據(jù)位寬等,因此選擇加入FIFO,用來存放緩存數(shù)據(jù)以及中轉(zhuǎn)位寬,F(xiàn)PGA 內(nèi)部更新結(jié)構(gòu)設(shè)計如圖2 所示,由以太網(wǎng)接口、FIFO、SPI 接口三部分組成[3]。就傳輸速度來說,以太網(wǎng)相對更快,所以傳完一整包數(shù)據(jù)后,需等待FIFO 中緩存的數(shù)據(jù)存到Flash中,再傳下一包數(shù)據(jù)。
圖2 FPGA處理框圖
該文選用的SPI 協(xié)議支持的是主串模式,這種模式的優(yōu)點是操作簡單,實用性強(qiáng),占用空間小,資源利用率高。當(dāng)配置FPGA 選擇主串模式時,主設(shè)備選擇FPGA,從設(shè)備選擇Flash,SPI接口配置圖如圖3所示。
圖3 SPI接口配置圖
SPI 接口是一種高速的、全雙工、同步、串行的數(shù)據(jù)總線,F(xiàn)PGA 通過Flash_clk,F(xiàn)lash_cs,F(xiàn)lash_datain和Flash_dataout4 條信號線來控制與Flash 之間的數(shù)據(jù)傳輸[5]。其中Flash_clk 是時鐘信號,F(xiàn)PGA 通過控制Flash_clk 信號來控制通信時序。Flash_cs 的作用是片選功能,起作用時電平為低,當(dāng)Flash 處于選中狀態(tài)時,寫入FPGA 的操作指令和數(shù)據(jù)信息就會通過Flash_datain 傳輸?shù)紽lash中,同時Flash_dataout 讀取Flash 的信息并發(fā)送到FPGA 上。
FPGA 遠(yuǎn)距離更新配置文件分為Golden 配置文件和Multiboot 配置文件。其中,Golden 文件遠(yuǎn)程更新時不對它操作。Multiboot 文件則是由用戶定義的,用來實現(xiàn)系統(tǒng)主要功能(即FPGA 功能)的配置程序,遠(yuǎn)程更新時只對它進(jìn)行操作[7]。程序重新加載切換更新框圖如圖4 所示。
圖4 配置文件跳轉(zhuǎn)框圖
Flash 芯片內(nèi)部地址如圖5 所示。
圖5 Flash芯片內(nèi)部地址
FPGA 更新結(jié)束后,可以正常工作的前提:1)Flash 中指定的地址空間放置著相應(yīng)的配置文件;2)Golden配置文件能正確跳轉(zhuǎn)到Multiboot配置文件[8]。
Flash 內(nèi)部空間的最開始部分用來存儲Golden配置文件,文件內(nèi)包含在線更新功能和一些基礎(chǔ)功能。而Multiboot 配置文件包含SPI 讀寫及遠(yuǎn)程更新接口,以及其余功能模塊,存放在指定的地址空間;最后放置狀態(tài)字,目的是驗證Multiboot 配置文件是否準(zhǔn)確完整。
遠(yuǎn)距離更新流程如圖6 所示。
圖6 遠(yuǎn)距離更新流程
遠(yuǎn)距離更新一開始,上位機(jī)先經(jīng)過以太網(wǎng)接口下發(fā)“擦除”命令給FPGA,等待FPGA 得到指令后,馬上擦除Flash 中的數(shù)據(jù)[9],完成該操作后反饋“已擦除”狀態(tài)給上位機(jī)。
在SPI 讀寫程序編寫時,擦除時地址由低到高,寫數(shù)據(jù)時地址由高到低,F(xiàn)PGA 加載Flash 數(shù)據(jù)時,最先檢驗同步字,檢測正確后再加載其余配置數(shù)據(jù)。同步字在bin 文件頭部,所以擦除時需先擦除同步字,避免先擦除其余配置數(shù)據(jù)由于同步字仍存在,F(xiàn)PGA 檢測到同步字后一直等待加載,從而卡死。寫數(shù)據(jù)時最后寫入同步字,避免寫數(shù)據(jù)時異常斷電,由于同步字存在,F(xiàn)PGA 檢測到同步字后一直等待加載,從而卡死[10]。
上位機(jī)為擦除完成狀態(tài)后,就可以將需要傳輸?shù)呐渲梦募掳l(fā)給FPGA,F(xiàn)PGA 將配置文件解析后“存入”Flash,直到配置文件傳輸完成[11]。
上位機(jī)下發(fā)配置文件時,由于FPGA配置SPI寫數(shù)據(jù)時地址由高到低,F(xiàn)IFO 的半空標(biāo)志應(yīng)為256 字節(jié),檢測到半空標(biāo)志后,進(jìn)行頁編程,寫入256 字節(jié)數(shù)據(jù)。所以上位機(jī)發(fā)送配置文件時,首先發(fā)送配置文件最底部的256 字節(jié)數(shù)據(jù),256 字節(jié)組成一幀,接著傳輸配置文件,由下往上發(fā)送數(shù)據(jù)信息,直到傳輸完所有數(shù)據(jù)[12]。
上位機(jī)軟件發(fā)送完配置文件后,自動讀取FPGA設(shè)備中Flash 的配置文件,并與下發(fā)的配置文件進(jìn)行比對,如果文件內(nèi)容一樣,則證明下發(fā)配置文件正確,如果不一樣,則提醒配置失敗。
多重配置特性使FPGA 能夠從Flash 中的指定地址有選擇地加載bit流文件,將熱啟動地址(WBSTAR)和內(nèi)部程序(IPROG)命令嵌入到bit 流文件中。內(nèi)部生成的脈沖(IPROG)啟動配置邏輯在熱啟動地址寄存器(Warm Boot Start AddRess)WBSTAR 中指定的地址位置跳轉(zhuǎn)到更新bit 流文件,并嘗試加載更新文件。如果在更新文件加載過程中檢測到配置錯誤,則會觸發(fā)Fallback 加載Golden 文件。
Golden 文件存儲在Flash 0 地址中,Multiboot 更新文件存儲在WBSTAR 寄存器指定的地址中[13]。當(dāng)WBSTAR 設(shè)置為默認(rèn)值以外的任何地址值時,IPROG 會自動嵌入到bit流中。
打開約束文件,將以下內(nèi)容復(fù)制到Golden 文件的約束文件中并保存。
set_propertyCFGBVS VCCO [current_design](根據(jù)FPGA 連接情況進(jìn)行設(shè)置)
set_property CONFIG_VOLTAGE 3.3 [current_design](根據(jù)FPGA 連接情況進(jìn)行設(shè)置)set_property BITSTREAM.GENERAL.CO MPRESS TRUE[current_design](bit流壓縮)
set_pr-operty BITSTREAM.CONFIG.CONFIGRA TE40[curr-ent_design](配置速度)
set_property CONFIG_MODE SPIx1[current_de sign](X1 模式)
set_property BITST REAM.CONFIG.SPI_BUSW IDTH 1[current_design](X1 模式)
set_property BITSTREAM.CONFIG.CONFI GFA LLBACK ENABLE[current_design]
(配置FPGA 失敗后可跳轉(zhuǎn))
set_property BITSTREAM.CONFIG.NEXT_CONF IG_ADDR 0x0300000[current_design]
(配置跳轉(zhuǎn)位置,暫定3 MB,可以根據(jù)bin 文件大小需求進(jìn)行更改,但需與程序中SPI—Flash 模塊設(shè)置一致)set_property BITSTREAM.CONFIG.TIMER_CFG 0x00 0F4240 [current_design](設(shè)置看門狗時間,一個時鐘4 000 ns,暫設(shè)置為4 s,可根據(jù)不同PROM 設(shè)置)
同理,將上述內(nèi)容中配置地址語句去掉,然后復(fù)制到Multiboot 約束文件中并保存。最后將bit 文件生成mcs 文件下載到Flash 即可[14]。
選擇配置文件并打開配置FPGA,結(jié)束后,將設(shè)備斷電并重新上電,觀察設(shè)備是否能正常工作,若能正常工作,則代表上位機(jī)軟件配置FPGA 成功[15]。更新過程中,上位機(jī)界面如圖7-9 所示。
圖7 擦除Flash界面
4.2.1 擦除時斷電異常情況測試
圖9 配置完成界面
上位機(jī)軟件在圖7 配置文件擦除任意時刻時,將設(shè)備斷電并重新上電,上位機(jī)重新單擊“配置FPGA”按鈕,按4.1 節(jié)的步驟進(jìn)行操作,若上位機(jī)能配置FPGA,且彈出“配置FPGA 結(jié)束”提示框,則證明當(dāng)Multiboot 代碼配置文件被擦除后,設(shè)備能自動跳轉(zhuǎn)并調(diào)用Golden 代碼配置文件。
4.2.2 配置時斷電異常情況測試
上位機(jī)軟件在圖8 配置文件配置任意時刻時,將設(shè)備斷電并重新上電,上位機(jī)重新單擊“配置FPGA”按鈕,按4.1 節(jié)的步驟進(jìn)行操作,若上位機(jī)能配置FPGA 且彈出“配置FPGA 結(jié)束”提示框,則證明當(dāng)Multiboot 代碼配置文件被擦除后或者未寫完時,設(shè)備能自動跳轉(zhuǎn)并調(diào)用Golden 代碼配置文件。
圖8 配置FPGA界面
經(jīng)驗證,兩種異常情況下,設(shè)備均能自動跳轉(zhuǎn)并調(diào)用Golden 代碼配置文件。
該文介紹的遠(yuǎn)距離在線更新方法,以Flash 和FPGA 主串模式配置為基礎(chǔ),通過對FPGA 配置流程、SPI 讀寫控制的研究,提出了該方案,經(jīng)過實際測試,實現(xiàn)了遠(yuǎn)距離在線更新功能??朔颂厥猸h(huán)境下FPGA 程序無法在線更新的困難。對于密封結(jié)構(gòu),無法開蓋的情況,在線更新程序流程簡單、經(jīng)濟(jì)實用,使得程序更新的效率大大加快。該方法已經(jīng)應(yīng)用于具體設(shè)備中。另外,該方案的移植性強(qiáng),如在LVDS,光纖等其他通信接口也可以很容易被應(yīng)用,因此,在工程方面應(yīng)用前景廣闊。相比于之前的程序更新方法,為防止掉電導(dǎo)致更新失敗,該方案加入了保護(hù)措施,進(jìn)一步增加了在線更新的可靠性[16]。