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. MySQL Connector/J

    5.1 Developer Guide 1. MysQL为由Java语言编程的客户端程序提供连接:MySQL Connector/J,这是一个实现Java Database Connectivity( ...

  2. 单细胞数据高级分析之初步降维和聚类 | Dimensionality reduction | Clustering

    个人的一些碎碎念: 聚类,直觉就能想到kmeans聚类,另外还有一个hierarchical clustering,但是单细胞里面都用得不多,为什么?印象中只有一个scoring model是用kme ...

  3. Hibernate二级缓存 --Hibernate框架

    Hibernate本身只提供了二级缓存的规范,但并未实现,所以需要第三方缓存插件的支持.常用的二级缓存第三方插件有:EHCache.Memcached.OSCache.SwarmCache.JBoss ...

  4. IntelliJ IDEA的这些配置,你值得拥有

    一.自动编译开关 二.忽略大小写开关 IDEA默认是匹配大小写,此开关如果未关.你输入字符一定要符合大小写.比如你敲string是不会出现代码提示或智能补充.但是,如果你开了这个开关,你无论输入Str ...

  5. linux进程管理之信号控制

    使用信号控制进程 ====================================================================================kill,ki ...

  6. 11月28日 记录一个错误❌,看ruby on rails --active support core extensions--present? && presence && duplicable?

    ❌错误 1. @job.resume.count: 提示❌   undefined method `resume' ✅: @job.resumes.count  //解释:调出某一个job的所有简历, ...

  7. navicat和 plsql 连接oracle数据库 总结

    打开 navicat  -->工具-->选项-->oci   右侧选择oci.dll 的路径 默认 在 navicat的安装目录下有一个 instantclient 的文件夹 直接选 ...

  8. PHP用PDO

    $pdo = new PDO('mysql:host=localhost;dbname=jmyp','root','root'); $pdo->exec('set names utf8'); $ ...

  9. Xmanager Power Suit 6.0.0009 最新版注册激活

    Xmanager Power Suit 6.0.0009 最新版注册激活 手工操作步骤Xmanger Power Suit 官方 其实有两种 .exe 文件,一个是用于试用的,在注册的时候不能直接输入 ...

  10. CentOS中与网络相关的常用

    CentOS中与网络相关的常用配置文件 1. 常见的网络配置文件 /etc/hosts           本地域名解析表,用于解析主机名.对应于win系统中的C:\Windows\System32\ ...