文豐,韓冰,袁小康
(中北大學電子測試技術國家重點實驗室,山西太原 030051)
一般情況下,FPGA 需要通過JTAG 接口,使用配套的下載線和上位機進行連接,來完成程序的更新。這種方法有很大的局限性,如一些產品的使用環境特殊,要求結構密封,這樣就無法打開下載口更新程序。該文以此為出發點,介紹了一種由Flash、FPGA 和以太網組成的遠距離在線更新系統。
Xilinx 7 系列FPGA 支持多重配置功能(即Reconfiguration and MultiBoot),具體劃分有:主串模式、從串模式、主并模式、從并模式和SelectMAP 模式,MultiBoot 特性允許用戶在不掉電重啟的情況下,針對不同的功能需求,從存儲于Flash 中的多個更新文件中選擇其中的一個進行加載,便可實現FPGA 系統配置更新,完成對應的設計任務。這就為FPGA遠距離更新帶來極大的便捷性和操作性[1]。該文提出一種遠距離更新方法,將待更新的配置文件編程到Flash,FPGA 將優先更新配置這些文件,實現在線更新。
硬件設計框架如圖1 所示,主要可分為FPGA 控制,以太網傳輸和Flash 存儲,以太網選用Marvell 的88E1111 芯片,它的功能主要是把上位機下發的指令和更新程序數據傳輸給FPGA,FPGA 選擇Xilinx公司的XC7A100T 芯片,7 系列芯片采用28 nm 加工工藝,集成度高、價格低廉、功耗控制較好。Flash 采用Micron 生產的N25Q128A,該芯片通過SPI 總線與FPGA 通信,內存大小為128 MB。FPGA 收到配置文件后,通過SPI 讀寫將配置文件寫入Flash 指定的存儲空間[2]。

圖1 總體結構框圖
以太網接口選用TCP/IP 通信協議,進行上位機與FPGA 兩者之間的通信。以太網接口在很多方面與Flash 接口存在不同,例如傳輸的速率和數據位寬等,因此選擇加入FIFO,用來存放緩存數據以及中轉位寬,FPGA 內部更新結構設計如圖2 所示,由以太網接口、FIFO、SPI 接口三部分組成[3]。就傳輸速度來說,以太網相對更快,所以傳完一整包數據后,需等待FIFO 中緩存的數據存到Flash中,再傳下一包數據。

圖2 FPGA處理框圖
該文選用的SPI 協議支持的是主串模式,這種模式的優點是操作簡單,實用性強,占用空間小,資源利用率高。當配置FPGA 選擇主串模式時,主設備選擇FPGA,從設備選擇Flash,SPI接口配置圖如圖3所示。

圖3 SPI接口配置圖
SPI 接口是一種高速的、全雙工、同步、串行的數據總線,FPGA 通過Flash_clk,Flash_cs,Flash_datain和Flash_dataout4 條信號線來控制與Flash 之間的數據傳輸[5]。其中Flash_clk 是時鐘信號,FPGA 通過控制Flash_clk 信號來控制通信時序。Flash_cs 的作用是片選功能,起作用時電平為低,當Flash 處于選中狀態時,寫入FPGA 的操作指令和數據信息就會通過Flash_datain 傳輸到Flash中,同時Flash_dataout 讀取Flash 的信息并發送到FPGA 上。
FPGA 遠距離更新配置文件分為Golden 配置文件和Multiboot 配置文件。其中,Golden 文件遠程更新時不對它操作。Multiboot 文件則是由用戶定義的,用來實現系統主要功能(即FPGA 功能)的配置程序,遠程更新時只對它進行操作[7]。程序重新加載切換更新框圖如圖4 所示。

圖4 配置文件跳轉框圖
Flash 芯片內部地址如圖5 所示。

圖5 Flash芯片內部地址
FPGA 更新結束后,可以正常工作的前提:1)Flash 中指定的地址空間放置著相應的配置文件;2)Golden配置文件能正確跳轉到Multiboot配置文件[8]。
Flash 內部空間的最開始部分用來存儲Golden配置文件,文件內包含在線更新功能和一些基礎功能。而Multiboot 配置文件包含SPI 讀寫及遠程更新接口,以及其余功能模塊,存放在指定的地址空間;最后放置狀態字,目的是驗證Multiboot 配置文件是否準確完整。
遠距離更新流程如圖6 所示。

圖6 遠距離更新流程
遠距離更新一開始,上位機先經過以太網接口下發“擦除”命令給FPGA,等待FPGA 得到指令后,馬上擦除Flash 中的數據[9],完成該操作后反饋“已擦除”狀態給上位機。
在SPI 讀寫程序編寫時,擦除時地址由低到高,寫數據時地址由高到低,FPGA 加載Flash 數據時,最先檢驗同步字,檢測正確后再加載其余配置數據。同步字在bin 文件頭部,所以擦除時需先擦除同步字,避免先擦除其余配置數據由于同步字仍存在,FPGA 檢測到同步字后一直等待加載,從而卡死。寫數據時最后寫入同步字,避免寫數據時異常斷電,由于同步字存在,FPGA 檢測到同步字后一直等待加載,從而卡死[10]。
上位機為擦除完成狀態后,就可以將需要傳輸的配置文件下發給FPGA,FPGA 將配置文件解析后“存入”Flash,直到配置文件傳輸完成[11]。
上位機下發配置文件時,由于FPGA配置SPI寫數據時地址由高到低,FIFO 的半空標志應為256 字節,檢測到半空標志后,進行頁編程,寫入256 字節數據。所以上位機發送配置文件時,首先發送配置文件最底部的256 字節數據,256 字節組成一幀,接著傳輸配置文件,由下往上發送數據信息,直到傳輸完所有數據[12]。
上位機軟件發送完配置文件后,自動讀取FPGA設備中Flash 的配置文件,并與下發的配置文件進行比對,如果文件內容一樣,則證明下發配置文件正確,如果不一樣,則提醒配置失敗。
多重配置特性使FPGA 能夠從Flash 中的指定地址有選擇地加載bit流文件,將熱啟動地址(WBSTAR)和內部程序(IPROG)命令嵌入到bit 流文件中。內部生成的脈沖(IPROG)啟動配置邏輯在熱啟動地址寄存器(Warm Boot Start AddRess)WBSTAR 中指定的地址位置跳轉到更新bit 流文件,并嘗試加載更新文件。如果在更新文件加載過程中檢測到配置錯誤,則會觸發Fallback 加載Golden 文件。
Golden 文件存儲在Flash 0 地址中,Multiboot 更新文件存儲在WBSTAR 寄存器指定的地址中[13]。當WBSTAR 設置為默認值以外的任何地址值時,IPROG 會自動嵌入到bit流中。
打開約束文件,將以下內容復制到Golden 文件的約束文件中并保存。
set_propertyCFGBVS VCCO [current_design](根據FPGA 連接情況進行設置)
set_property CONFIG_VOLTAGE 3.3 [current_design](根據FPGA 連接情況進行設置)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 失敗后可跳轉)
set_property BITSTREAM.CONFIG.NEXT_CONF IG_ADDR 0x0300000[current_design]
(配置跳轉位置,暫定3 MB,可以根據bin 文件大小需求進行更改,但需與程序中SPI—Flash 模塊設置一致)set_property BITSTREAM.CONFIG.TIMER_CFG 0x00 0F4240 [current_design](設置看門狗時間,一個時鐘4 000 ns,暫設置為4 s,可根據不同PROM 設置)
同理,將上述內容中配置地址語句去掉,然后復制到Multiboot 約束文件中并保存。最后將bit 文件生成mcs 文件下載到Flash 即可[14]。
選擇配置文件并打開配置FPGA,結束后,將設備斷電并重新上電,觀察設備是否能正常工作,若能正常工作,則代表上位機軟件配置FPGA 成功[15]。更新過程中,上位機界面如圖7-9 所示。

圖7 擦除Flash界面
4.2.1 擦除時斷電異常情況測試

圖9 配置完成界面
上位機軟件在圖7 配置文件擦除任意時刻時,將設備斷電并重新上電,上位機重新單擊“配置FPGA”按鈕,按4.1 節的步驟進行操作,若上位機能配置FPGA,且彈出“配置FPGA 結束”提示框,則證明當Multiboot 代碼配置文件被擦除后,設備能自動跳轉并調用Golden 代碼配置文件。
4.2.2 配置時斷電異常情況測試
上位機軟件在圖8 配置文件配置任意時刻時,將設備斷電并重新上電,上位機重新單擊“配置FPGA”按鈕,按4.1 節的步驟進行操作,若上位機能配置FPGA 且彈出“配置FPGA 結束”提示框,則證明當Multiboot 代碼配置文件被擦除后或者未寫完時,設備能自動跳轉并調用Golden 代碼配置文件。

圖8 配置FPGA界面
經驗證,兩種異常情況下,設備均能自動跳轉并調用Golden 代碼配置文件。
該文介紹的遠距離在線更新方法,以Flash 和FPGA 主串模式配置為基礎,通過對FPGA 配置流程、SPI 讀寫控制的研究,提出了該方案,經過實際測試,實現了遠距離在線更新功能。克服了特殊環境下FPGA 程序無法在線更新的困難。對于密封結構,無法開蓋的情況,在線更新程序流程簡單、經濟實用,使得程序更新的效率大大加快。該方法已經應用于具體設備中。另外,該方案的移植性強,如在LVDS,光纖等其他通信接口也可以很容易被應用,因此,在工程方面應用前景廣闊。相比于之前的程序更新方法,為防止掉電導致更新失敗,該方案加入了保護措施,進一步增加了在線更新的可靠性[16]。