0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在FPGA中如何通过ICAP原语实现Multiboot?

FPGA之家 来源:林深杂谈 作者:林深杂谈 2021-05-11 14:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FPGA的MultiBoot功能可以支持远程动态更新bitstream images,实现bitstream images的实时切换。在MultiBoot配置过程中检测到错误时,FPGA可以触发fallback 功能,以确保可以将已知良好的设计加载到器件中。

MultiBoot的大致过程如下图:

f204ff4a-b20b-11eb-bf61-12bb97331649.png

MultiBoot的配置文件由两个比特流文件生成,第一个为备份文件,永远都不会变,称为Golden_image,从Flash的0地址存储。

第二个为更新文件,后面远程更新,更新的就是这个文件,称为Update_image,存放在某个地址处,这个地址有热启动地址寄存器(WBSTAR)指定。

配置过程大致如下:FPGA从FLASH的0地址处读取配置,遇到IPROG Command命令时,跳转到WBSTAR寄存器指定的地址,该地址存放Update_image的地址,此时FPGA尝试加载该地址处的比特流文件,配置成功的话,就执行该配置的功能。如果遇到配置错误,则触发FallBack,FPGA重新加载Golden_image。

1、ICAPE3 接口

FPGA实现IPROG通常有两种方式,一种是通过ICAP配置,一种是把相关指令嵌入bit文件中。与通过bit文件实现IPROG相比,通过ICAP更灵活。

在Xilinx FPGA 中ICAP(Internal Configuration Access Port) 指的是内部配置访问端口,其主要作用是通过内部配置访问端口(ICAP),用户可以在FPGA逻辑代码中直接读写FPGA内部配置寄存器(类似SelectMAP),从而实现特定的配置功能,例如Multiboot。

ICAP目前为止有三个版本,包括ICAP,ICAPE2以及ICAPE3。UltraScale系列对应ICAPE3,7系列对应ICAPE2,7系列之前的对应ICAP。

以下以ICAPE3 为例,ICAPE3 的接口如下:

f265be16-b20b-11eb-bf61-12bb97331649.png

f27218b4-b20b-11eb-bf61-12bb97331649.png

f2a5ad1e-b20b-11eb-bf61-12bb97331649.png

2、IPROG指令

每个UltraScale系列的FPAG包括2个ICAPE3,但实际使用时只能例化并使用一个,默认顶部ICAPE3, 初级玩家采用默认的即可。

IPROG指令的作用跟外部Program_B管脚的作用类似,都是对FPGA芯片进行复位操作,该复位操作对FPGA内部的应用程序进行复位,复位过程中除专用配置管脚和JTAG管脚,其他输入/输出管脚均为高阻态,同时IPROG指令不能复位专用重配置逻辑,如WBSTAR寄存器、TIMER寄存器、BSPI寄存器和BOOTSTS寄存器。IPROG指令能够触发FPGA开启初始化流程,同时拉低INIT和Done信号。完成复位操作后,将默认的加载地址用热启动地址寄存器(Warm Boot Start Address,WB-STAR)中的新地址替换。

通过ICAP发送IPROG指令实现Multiboot的步骤如下:

f2d4d8d2-b20b-11eb-bf61-12bb97331649.png

首先写入同步头 32’hAA995566, 然后将需要跳转到的bit文件的起始地址写入WBSTAR寄存器,最后写入IPROG(internal PROGRAM_B)指令。

WBSTAR寄存器的格式,根据自己的要为Update_image分配在FLASH的地址,按照下面的格式生成一个32位数据。例如,我为Update_image分配的flash地址为2000000。

(1)对于BPI模式来说,可以通过RS[1:0]来控制具体位流的读取,也可以通过STAT_ADDR[28:0]地址来控制具体位流的读取。

(2)对于SPI模式来说,只有STAT_ADDR[23:0]地址来表征FLASH器件的地址,当使用32位地址的SPI(容量大于等于256Mb)时,需要将实际存储的高24地址赋值给STAT_ADDR[23:0]。因此在位流存储的起始地址早于255时,这就要求位流中的dummy数目要大于256个,否则就会出现易失部分有效位流读取,导致加载失败。为了安全起见,在使用大于等于256Mb的FLASH时,可以适当在位流头前加入Dummy。

这里需要注意一点,ICAP以及SelectMAP都存在位反转(Bit Swapping),也就是说,上表中所有的数据需要进行位反转之后才能接到ICAP的输入接口,同理,ICAP输出的值需要进行位反转后才能与实际的值对应起来,位反转的示例如下图。

f2e99b1e-b20b-11eb-bf61-12bb97331649.png


3、ICAPE3 例化示例

ICAPE3 进行例化,示例如下:

// ICAPE3: Internal Configuration Access Port

// UltraScale

// Xilinx HDL Language Template, version 2019.1

ICAPE3 #(

.DEVICE_ID(32‘h03628093),//pre-programmed Device ID value,used for simulation

// purposes.

.ICAP_AUTO_SWITCH(“DISABLE”),//Enable switch ICAP using sync word

.SIM_CFG_FILE_NAME(“NONE”)//Raw Bitstream (RBT) file,parsed by the simulation

// model

ICAPE3_inst (

.AVAIL(AVAIL), // 1-bit output: Availability status of ICAP

.O(O), // 32-bit output: Configuration data output bus

.PRDONE(PRDONE),//1-bit output: Indicates completion of Partial Reconfiguration

.PRERROR(PRERROR),//1-bit output: Indicates Error during Partial Reconfiguration

.CLK(CLK), // 1-bit input: Clock input

.CSIB(CSIB), // 1-bit input: Active-Low ICAP enable

.I(I), // 32-bit input: Configuration data input bus

.RDWRB(RDWRB) // 1-bit input: Read/Write Select input

);

// End of ICAPE3_inst instantiation

其中设备号DEVICE_ID需要查找USER GUIDE手册,而ICAP原语接口时序跟Select Map接口时序非常相似。SelectMap模式下,FPGA的配置和回读是通过CSI_B,RDWR_B和CCLK来控制的。

4、程序步骤

在发送IPROG指令之前,将默认的加载地址用热启动地址寄存器(Warm Boot Start Address,WB-STAR)中的新地址。

然后对ICAP核进行预配置。重载控制模块在收到触发信号后,第一个时钟周期将ICAP核的RDWRB信号和CSIBCSIB信号置高,第二个周期将RDWRB信号置底,CE信号置高,第三个周期将RDWRB信号置底,CSIB信号也置底。

接着在下面的8个时钟周期里,将指令队列中的控制命令逐个发出。

运行工程,生成位流Bit,在约束XDC文件中添加压缩等命令即可。

f3269406-b20b-11eb-bf61-12bb97331649.png

固化Mcs生成。Xilinx系列的FPGA需要将后缀名为mcs的内存镜像文件固化到外部配置存储器中,FPGA上电后才能自动加载配置文件。一般的mcs文件只包含一个bit流文件,多重启动的mcs固化文件包含多个bit流文件。在将多个bit流整合到mcs文件的过程中,需要指定每个bit流的起始地址,这样FPGA专用配置逻辑才能根据地址找到对应的bit流。在程序设计WBSTAR地址时,确定了Golden位流存储的起始地址为0X00000000,Update位流存储的起始地址为0X00800000,因此在将Bit整合到Mcs过程中需要指定对应的存储起始地址,否则就无法加载成功了。

在SPI的flash里烧写有A和B两个程序,FPGA上电后,自动加载A程序,根据外部给FPGA指示信号,FPGA自动切换加载B的程序,同时在B程序运行期间,根据外部给FPGA指示信号,FPGA自动切换加载A的程序。

原文标题:FPGA中利用ICAP原语实现Multiboot功能

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22282

    浏览量

    630100

原文标题:FPGA中利用ICAP原语实现Multiboot功能

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用FPGA实现SRIO通信协议

    本例程详细介绍了如何在FPGA实现Serial RapidIO(SRIO)通信协议,并通过Verilog语言进行编程设计。SRIO作为一种高速、低延迟的串行互连技术,高性能计算和嵌
    的头像 发表于 11-12 14:38 4871次阅读
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>SRIO通信协议

    以太网通讯FPGA上的实现

    一、介绍本项目由于我们需要使用PC实时的向FPGA发送将要识别的图片,所以我们最终选择使用以太网来从PC向FPGA发送图片并暂存在DDR,下面是对以太网协议和硬件
    发表于 10-30 07:45

    基于FPGA平台的蜂鸟E203 JTAG debug出错问题的解决思路

    固化存在的问题并不大,只需要按照硬件电路完成管脚的删减和映射(约束)即可,这里重点说明一下debug出错问题的解决思路。 我FPGA固化文件完成后,在上位机SDKdebug helloworld
    发表于 10-28 07:38

    如何利用Verilog HDLFPGA实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDLFPGA实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。FPGA
    的头像 发表于 10-22 17:21 3950次阅读
    如何利用Verilog HDL<b class='flag-5'>在</b><b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>SRAM的读写测试

    FPGA机器学习的具体应用

    ,越来越多地被应用于机器学习任务。本文将探讨 FPGA 机器学习的应用,特别是加速神经网络推理、优化算法和提升处理效率方面的优势。
    的头像 发表于 07-16 15:34 2623次阅读

    基于FPGA的压缩算法加速实现

    本设计,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明充分并行化的硬件体系结构
    的头像 发表于 07-10 11:09 2072次阅读
    基于<b class='flag-5'>FPGA</b>的压缩算法加速<b class='flag-5'>实现</b>

    PLL技术FPGA的动态调频与展频功能应用

    随着现代电子系统的不断发展,时钟管理成为影响系统性能、稳定性和电磁兼容性(EMI)的关键因素之一。FPGA设计,PLL因其高精度、灵活性和可编程性而得到广泛应用,本文将深入探讨PLL技术
    的头像 发表于 06-20 11:51 2205次阅读
    PLL技术<b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的动态调频与展频功能应用

    ISERDESE2原语端口及参数介绍

    前面讲解HDMI接口之前,讲解过IDDR、ODDR、OSERDESE2、IBUF等原语,之后一直有读者问什么时候更新ISERDESE2这个原语。前文讲解过这些
    的头像 发表于 03-17 10:52 2186次阅读
    ISERDESE2<b class='flag-5'>原语</b>端口及参数介绍

    APP FPGA 通过IIC接口对DLPC910寄存器进行配置遇到的两个问题求解

    APP FPGA 通过IIC接口对DLPC910寄存器进行配置,有两个问题想要请教: 1、DLPC910被封装成了FPGA
    发表于 02-25 06:47

    理想L6荣获2024版C-ICAP测评五星+认证

    近日,汽中心汽车测评管理中心发布2024年版中国智能网联汽车技术规程(C-ICAP)测评结果,C-ICAP测评体系包含辅助驾驶、智慧座舱、隐私保护三个单元,理想L6作为首批测试车型
    的头像 发表于 01-09 12:40 1239次阅读

    通过样品台的移动,实现白光干涉的机械相移原理

    白光干涉测量技术通过样品台的移动来实现机械相移原理是一种常用的且高精度的方法。这种方法基于光的波动性和相干性,通过改变样品台的位置,即
    的头像 发表于 01-08 10:37 359次阅读
    <b class='flag-5'>通过</b>样品台的移动,<b class='flag-5'>实现</b>白光干涉<b class='flag-5'>中</b>的机械相移原理

    FPGAAI方面有哪些应用

    提供了强有力的支持。 一、FPGA 深度学习的应用 深度学习是 AI 的重要分支,涉及海量的数据运算。FPGA 能够针对深度学习算法
    的头像 发表于 01-06 17:37 2086次阅读

    基于FPGA实现图像直方图设计

    直方图统计的原理 直方图统计从数学上来说,是对图像的像素点进行统计。图像直方图统计常用于统计灰度图像,表示图像各个灰度级出现的次数或者概率。统计直方图的实现采用C/C++或者其他高级语言
    的头像 发表于 12-24 10:24 1195次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>图像直方图设计

    一文搞懂软核的固化、启动和MultiBoot实现

    这也是《FPGA实现串口升级及MultiBoot》系列的一篇文章,作为一个专题单独出来说明。 本篇文章分为三个主题:固化、启动和MultiBoot
    的头像 发表于 12-07 11:23 2908次阅读
    一文搞懂软核的固化、启动和<b class='flag-5'>MultiBoot</b><b class='flag-5'>实现</b>

    助力AIoT应用:米尔FPGA开发板上实现Tiny YOLO V4

    工艺甚至更低节点的制程下实现高效的硬件加速。米尔的 ZU3EG 开发板凭借其可重构架构为 AI 和计算密集型任务提供了支持,同时避免了 7nm 工艺对国产芯片设计的制约。通过 ZU3EG 上部
    发表于 12-06 17:18