reference: http://xilinx.eetrend.com/d6-xilinx/article/2014-04/7009.html
reference :  quickboot method for fpga design remote update.pdf

一、概述
对于成熟的电子产品,高效稳定的工作是非常重要的一项指标。而一款刚推向市场的产品则需要研发人员或者技术维护人员进行必要的维护或者更新,以求达到更稳定的效果。对于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值进行比较。比较正确说明校验正确,反之则是校验错误。

7系列FPGA远程更新方案-QuickBoot(转)的更多相关文章

  1. FPGA远程更新之限制条件

    FPGA可重配置带来了很高的灵活性,所以基于FPGA的设计/产品往往也会有后期更新/升级的需求.同时,需要更新/升级的FPGA板卡由于物理条件的限制,可能无法现场升级.比如: 1.FPGA板卡部署在异 ...

  2. 固件远程更新之STARTUPE2原语(fpga控制flash)

    作者:九章子 来源:CSDN 原文:https://blog.csdn.net/jiuzhangzi/article/details/79471365 有的项目需要远程更新固件,更新完成后断电.重启即 ...

  3. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  4. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

    Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...

  5. Lattice系列FPGA入门相关0(Lattice与Altera、Xilinx对比及入门)

    需求说明:Lattice系统FPGA入门 内容       :Lattice与Altera.Xilinx对比 来自       :时间的诗 1.Lattice与Altera.Xilinx对比 latt ...

  6. Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序

    系列目录     [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...

  7. ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)

    前言 上节实现远程更新是更新的STM32F103C8T6的单片机 GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定 ...

  8. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. 基于Quick-cocos2d-x的资源更新方案 二

    写在前面 又是12点半了,对于一个程序员来说,这是一个黄金时间,精力旺盛,我想,是最适合整理和分享一些思路的时候了. 自从上次写了 基于Quick-cocos2d-x的资源更新方案 同样可见quick ...

随机推荐

  1. English trip V1 - 20.Look at me 看着我 Teacher:Solo Key: 声调(英语默认就声调[rising]和降调[falling]两种)

    In this lesson you will learn to describe a person. 课上内容(Lesson) appearance  -> ap pea ran ce  外貌 ...

  2. Confluence 6 设置其他页面为你空间的主页

    在任何时候,如果你希望某一个页面称为你空间的主页,你可以非常容易的从 编辑空间细节(Edit Space Details)标签页中进行修改. 希望编辑空间的细节: 进入空间后,然后从边栏的底部选择 空 ...

  3. MySQL视图(view)

    一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...

  4. grid 用于同一用例在不同测试环境下的测试结果

    步骤: 1.http://www.seleniumhp.org/download   下载selenium standalone server 2.配置java环境 3.运行selenium serv ...

  5. use . adb . get wifi

    adb shell 连接手机获取root权限,如果返回的字符串中不包含root字样,再输入su命令回车 继续输入cat /data/misc/wifi/*.conf命令,将会把文件打印出来 ssid表 ...

  6. LINQ 中常用函数使用: Take TakeWhile Skip SkipWhile Reverse Distinct

    1,Take 方法 Take方法用于从一个序列的开头返回指定数量的元素. string[] names = { "郭靖", "李莫愁", "欧阳晓晓& ...

  7. 使用iText快速更新书签

    一.介绍 pdfbox基于Apache协议,商用无需开放源代码. iText基于APGL协议,打包和修改需发布源码,除非花钱买断. 二.用途 下载的电子书,有的书签是FitHeight,也就是缩放后整 ...

  8. [NOIP 2015TG D2T3] 运输计划

    题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...

  9. Python日志、序列化、正则模块

    使用Python内置模块的目的:拿来别人已经写好的模块功能,直接import内置模块使用,简化程序,避免重复造轮子的过程,提示自己的开发效率: 一. loging日志模块: 1. loging模块可以 ...

  10. 更改Linux语言环境

    查看本地语言环境 locale 中文环境: export LC_ALL=zh_CN.UTF- 英文环境:export LC_ALL=en_US.UTF-8 具体设置其他环境百度...