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. 【转】 strrchr()函数---C语言

    转自:https://baike.baidu.com/item/strrchr/4621437?fr=aladdin   函数名称: strrchr 函数原型:char *strrchr(const ...

  2. English trip EM2-PE-6B Teacher:Taylor

    课上内容(Lesson) 词汇(Key Word ) engage [ɪn'ɡedʒ] 订婚 miracle ['mɪrəkl]  n. 奇迹,奇迹般的人或物:惊人的事例 personality  性 ...

  3. MP4文件格式

    MP4文件格式详解(ISO-14496-12/14) Author:Pirate Leo Email:codeevoship@gmail.com 一.基本概念 1. 文件,由许多Box和FullBox ...

  4. yarn基础解释

    https://yarnpkg.com/zh-Hans/docs Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码,或者分享自己的代码. 代码通过包(package)(或者 ...

  5. dp 最大正方形

    洛谷P1387 最大正方形 分析:画图模拟,发现以坐标(i,j)为右下顶点的正方形可以根据它左上方的三个点得到,就很轻松写出状态转移方程了. 代码: #include<bits/stdc++.h ...

  6. Selenium-WebDriverApi接口详解

    浏览器操作 # 刷新 driver.refresh() # 前进 driver.forward() # 后退 driver.back() 获取标签元素 # 通过ID定位目标元素 driver.find ...

  7. oracle的 表、 procedure、package等对象被锁,处理方法

    1.0  oracle中表被锁,处理方法 select t4.object_name, t3.spid, t1.oracle_username, t1.os_user_name  from v$pro ...

  8. Leetcode 1012. 十进制整数的反码

    1012. 十进制整数的反码  显示英文描述 我的提交返回竞赛   用户通过次数571 用户尝试次数602 通过次数582 提交次数1191 题目难度Easy 每个非负整数 N 都有其二进制表示.例如 ...

  9. mybatis的update使用选择

    更新后台设置时,会分多个页面更新同一个表中的数据,愿想是尽量减少sql请求数据量并且减少重复代码. 比如博客园的: 假如只有一个用户信息表,这样的话每个页面只更新部分字段. 这种情况下的更新推荐在xm ...

  10. Oracle date timestamp 毫秒 - 时间函数总结(转)

    原文地址:Oracle date timestamp 毫秒 - 时间函数总结 yyyy-mm-dd hh24:mi:ss.ff  年-月-日 时:分:秒.毫秒 --上一月,上一年select add_ ...