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