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
    +关注

    关注

    1630

    文章

    21760

    浏览量

    604382

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    FPGA 人工智能的应用

    FPGA是一种可编程的半导体设备,它允许工程师在生产后重新配置硬件逻辑。与传统的ASIC(应用特定集成电路)相比,FPGA具有更高的灵活性,可以根据不同的应用需求进行编程和重配置。这种灵活性使得FPGA成为
    的头像 发表于 12-02 09:53 668次阅读

    FPGA物联网的应用前景

    FPGA(现场可编程门阵列)物联网的应用前景非常广阔,其高度的灵活性和可编程性使其成为物联网应用不可或缺的核心组件。以下是对FPGA
    的头像 发表于 10-25 09:22 543次阅读

    如何在FPGA实现按键消抖

    FPGA(现场可编程门阵列)实现按键消抖是一个重要的设计环节,特别是处理用户输入时,由于物理按键的机械特性和电气特性,按键在按下和释放
    的头像 发表于 08-19 18:15 2086次阅读

    如何在FPGA实现随机数发生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7实现4位伪随机数发生器(PRNGs)。
    的头像 发表于 08-06 11:20 722次阅读
    如何在<b class='flag-5'>FPGA</b><b class='flag-5'>中</b><b class='flag-5'>实现</b>随机数发生器

    FPGA自动驾驶领域有哪些应用?

    的数据处理和预处理,实现实时计算和反馈。 二、数据传输与处理FPGA自动驾驶扮演着数据传输和处理的角色。它能够支持多种传感器(如激光雷达、摄像头、GPS等)的数据传输,并
    发表于 07-29 17:09

    FPGA人工智能的应用有哪些?

    和安全的云计算和网络服务。 三、具体应用场景 图像分类:图像分类任务FPGA可以承担前置处理、图像卷积、全连接等任务。通过FPGA的并
    发表于 07-29 17:05

    如何在FPGA实现状态机

    FPGA(现场可编程门阵列)实现状态机是一种常见的做法,用于控制复杂的数字系统行为。状态机能够根据当前的输入和系统状态,决定下一步的动作和新的状态。这里,我们将详细探讨如何在
    的头像 发表于 07-18 15:57 658次阅读

    FPGA | Xilinx ISE14.7 LVDS应用

    今天给大侠带来 Xilinx ISE14.7 LVDS应用,话不多说,上货。 最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用。Xilinx FPGA,主要通过
    发表于 06-13 16:28

    xilinx的carry4原语高云FPGA中用什么原语替代?

    xilinx的carry4原语高云FPGA中用什么原语替代
    发表于 05-09 16:13

    AMD MPSoC器件启用SEM IP的策略与方法

    IP 初始化阶段就卡住了。从 Uart 口的 log 看 ‘ICAP’ 后续无字符输出,这是典型的 IP 无法通过 ICAP 访问控制端的状态。
    的头像 发表于 03-01 09:53 909次阅读
    AMD MPSoC器件<b class='flag-5'>中</b>启用SEM IP的策略与方法

    AMD Xilinx 7系列FPGAMultiboot多bit配置

    Multiboot是一种AMD Xilinx 7系列FPGA实现双镜像(或多镜像)切换的方案。它允许
    的头像 发表于 02-25 10:54 1322次阅读
    AMD Xilinx 7系列<b class='flag-5'>FPGA</b>的<b class='flag-5'>Multiboot</b>多bit配置

    FPGA实现原理

    引入到FPGA,或者将信号从FPGA传送到外部。 互连资源 (Interconnect Resources):互连资源是一种复杂的开关网络,它允许FPGA
    发表于 01-26 10:03

    FPGA通过UDP以太网传输JPEG压缩图片

    FPGA实现了 JPEG 压缩和 UDP 以太网传输。从摄像机的输入获取单个灰度帧,使用 JPEG 标准对其进行压缩,然后通过UD
    的头像 发表于 01-26 09:30 922次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>通过</b>UDP以太网传输JPEG压缩图片