一、概述
對于成熟的電子產(chǎn)品,高效穩(wěn)定的工作是非常重要的一項指標(biāo)。而一款剛推向市場的產(chǎn)品則需要研發(fā)人員或者技術(shù)維護(hù)人員進(jìn)行必要的維護(hù)或者更新,以求達(dá)到更穩(wěn)定的效果。對于FPGA的邏輯更新來說,因為它直接貼在板卡上,如果將板卡從產(chǎn)品中將拆卸下來是非常的不方便。QuickBoot 提供了FPGA邏輯遠(yuǎn)程更新近乎完美的解決方案。
二、QuickBoot原理
該方案是通過在FPGA內(nèi)部增加額外的邏輯功能,無需改變硬件電路,只需要將原來的配置芯片的容量擴(kuò)大(如果需要的話)。上位機(jī)可以通過以太網(wǎng)、PCIe、USB等將更新數(shù)據(jù)發(fā)送到FPGA,F(xiàn)PGA再通過配置接口將數(shù)據(jù)傳輸?shù)紽lash Memory。FPGA可以通過自動從Flash下載數(shù)據(jù),從而完成邏輯遠(yuǎn)程更新,如果配置過程中發(fā)現(xiàn)配置出錯,或者CRC校驗失敗,那么FPGA就會從存放正確位流區(qū)域(golden bitstream area)下載數(shù)據(jù)。
QuickBoot提供以下主要功能:
< 支持全部的7系列FPGA
< 基于HDL的flash programmer參考設(shè)計
< 遠(yuǎn)程更新代碼最小化,更新位流和原設(shè)計位流大小基本一樣
< 簡單的可編程傳輸接口協(xié)議
< 內(nèi)部遠(yuǎn)程錯誤自修復(fù)/自動返回golden 位流
< 快速的配置時間
< 可兼容多個配置方式:BPI/SPI/加密位流/多片F(xiàn)PGA菊花鏈配置
三、QuickBoot遠(yuǎn)程更新流程
QuickBoot遠(yuǎn)程更新流程框圖如下圖所示:
QuickBoot遠(yuǎn)程更新設(shè)計的關(guān)鍵有兩點:
1、是如何通過FPGA實現(xiàn)自動更新Flash。
2、如果發(fā)現(xiàn)配置錯誤的話如何自動將原來golden 設(shè)計重新配置到FPGA。
為此QuickBoot制定了如下一套機(jī)制:
由于FPGA配置是從flash的0地址開始讀取數(shù)據(jù),所以將QuickBoot Header 放在0地址非常關(guān)鍵。QuickBoot Header包括兩個部分,第一部分就是關(guān)鍵開關(guān)字,第二部分就是熱啟動跳轉(zhuǎn)序列。
關(guān)鍵開關(guān)字,根據(jù)配置模式的不同而不同,如BPI模式就是0x00 00 00 BB,而SPI模式就是0x0xAA995566。
如果關(guān)鍵開關(guān)字是ON,那么就執(zhí)行熱啟動跳轉(zhuǎn)序列,熱啟動跳轉(zhuǎn)序列包含了需要跳轉(zhuǎn)的地址。然后就跳轉(zhuǎn)到update bitstream area。并且將update bitstream下載下來。
如果關(guān)鍵開關(guān)字是OFF,那么就忽略熱啟動跳轉(zhuǎn)序列,并且繼續(xù)往下讀取數(shù)據(jù),這樣就可以將golden bitstream area的數(shù)據(jù)下載到FPGA。
四、QuickBoot的實現(xiàn)
QuickBoot的實現(xiàn)主要包含以下幾個關(guān)鍵點:
1、關(guān)鍵開關(guān)字的控制。
2、Flash 存儲器與QuickBoot flash 模塊的地址映射。
3、位流包的大小以及Flash 存儲器大小的確定。
4、QuickBoot配置時間
5、QuickBoot驗證update bitstream的正確性
一、關(guān)鍵開關(guān)字的控制
關(guān)鍵開關(guān)字為ON:就是關(guān)鍵開關(guān)字存儲地址含有準(zhǔn)確的、預(yù)先設(shè)置的值,對于BPI是0x000000BB,對于SPI是0xAA995566。
關(guān)鍵開關(guān)字為OFF:就是關(guān)鍵開關(guān)字存儲地址不含有準(zhǔn)確的、預(yù)先設(shè)置的值。
QuickBoot flash programmer Algorithm:
1、擦除存放關(guān)鍵開關(guān)字的塊或者sector,使得關(guān)鍵開關(guān)字變成OFF。
2、擦除更新包存放的區(qū)域。
3、將update bitstream 寫進(jìn)到更新包區(qū)域。
4、驗證update bitstream的正確性。
5、驗證完成之后寫開關(guān)關(guān)鍵字,使之變成ON。
所以在驗證update bitstream正確之前不能將關(guān)鍵開關(guān)字設(shè)置為ON。驗證完成之后需要將開關(guān)關(guān)鍵字設(shè)置為ON。
二、Flash 存儲器與QuickBoot flash 模塊的地址映射
我們以Micron N25Q flash memory為例說明Flash 存儲器與QuickBoot flash 模塊的地址映射關(guān)系,如下圖所示
從0地址開始存放數(shù)據(jù),因為一個地址是代表一個字節(jié),所以對于一個32bit的數(shù)據(jù)需要4個地址來代表也就是地址的遞增是以4為單位遞增的。0x0000_0000~0x0000_0FFC對應(yīng)的是QuickBoot Header PART1。0x0000_1000~0x0000_1020是QuickBoot Header PART2。緊接著 PART2存放的是golden bitstream。跳轉(zhuǎn)地址是0x0020_0000,所以從這個地址開始存放的是update bitstrean,緊接著是update bitstrean的是0xffffffff填充字,最后32bit是CRC校驗值。
三、位流包的大小以及Flash 存儲器大小的確定
根據(jù)xilinx公司提供的ug470_7series_config.pdf?page13?我們可以看到如下表
我們可以得到XC7K160T的bit文件大小是53Mbit.所以一般情況下存放該位流至少需要64Mbits的FLASH。如果作為遠(yuǎn)程更新用的存儲芯片大概就需2x64Mbits=128Mbits。
依據(jù)上表我們可以算出我們所需flash大小:
L1=32768bit,L2=256bit,L3=53540576bit,L4=53573600bits。
L5=524288bit,L6=103blocks,L7=54001664bit,L8=52Mbit,L9=108003328bit,
L10=104Mb。
目前R-OTDR板使用的SPI FLASH是S25FL064P,所以應(yīng)該選用一款PIN-TO-PIN完全兼容且容量為128Mbit大小的SPI flash。
四、QuickBoot配置時間
QuickBoot 配置時間將比標(biāo)準(zhǔn)的配置時間多一點點。從下表可以看出。
五、QuickBoot驗證update bitstream的正確性
QuickBoot 將標(biāo)準(zhǔn)的bitstream轉(zhuǎn)換成image的步驟如下:
1、生成標(biāo)準(zhǔn)的bitstream。
2、將填充字0xffff_ffff填充到剩下的update area。
3、將bitstream和填充字一起計算出CRC值,并且將它放在image的最后32bits上。
為了驗證Update Image, the QuickBoot programming solution會去讀取flash中 update area的值,以及最后的CRC值。然后在FPGA中計算出一個CRC值然后再和讀回的CRC值進(jìn)行比較。比較正確說明校驗正確,反之則是校驗錯誤。
評論