QuickBoot基础知识与在FPGA逻辑远程更新的应用

QuickBoot基础知识与在FPGA逻辑远程更新的应用,第1张

一、概述

对于成熟的电子产品,高效稳定的工作是非常重要的一项指标。而一款刚推向市场的产品则需要研发人员或者技术维护人员进行必要的维护或者更新,以求达到更稳定的效果。对于FPGA的逻辑更新来说,因为它直接贴在板卡上,如果将板卡从产品中将拆卸下来是非常的不方便。QuickBoot 提供了FPGA逻辑远程更新近乎完美的解决方案。

二、QuickBoot原理

QuickBoot基础知识与在FPGA逻辑远程更新的应用,QuickBoot原理,第2张

该方案是通过在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基础知识与在FPGA逻辑远程更新的应用,QuickBoot远程更新流程框图,第3张

QuickBoot远程更新设计的关键有两点:

1、是如何通过FPGA实现自动更新Flash。

2、如果发现配置错误的话如何自动将原来golden 设计重新配置到FPGA。

为此QuickBoot制定了如下一套机制:

QuickBoot基础知识与在FPGA逻辑远程更新的应用,QuickBoot制定了如下一套机制,第4张

由于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 模块的地址映射关系,如下图所示

QuickBoot基础知识与在FPGA逻辑远程更新的应用,我们以Micron N25Q flash memory为例说明Flash 存储器与QuickBoot flash 模块的地址映射关系,第5张

从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 我们可以看到如下表

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2610859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-10
下一篇 2022-08-10

发表评论

登录后才能评论

评论列表(0条)

保存