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