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

    关注

    1664

    文章

    22504

    浏览量

    639291

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Altera Agilex FPGA与SoC实现更智能的AI

    的架构演进。该系列相较上一代性能提升高达 2 倍,在内部基准测试位频率突破 650 MHz,还通过优化资源配置,实现了功耗与成本的显著下降。
    的头像 发表于 04-02 14:24 435次阅读

    Xilinx FPGA输入延迟原语介绍

    高速接口设计,时序收敛往往是工程师面临的最大“噩梦”。当数据传输速率突破 800Mbps 时,微小的 PCB 走线差异都足以让系统崩溃。本文将深度剖析 Xilinx 7 系列(IDELAYE2)与 UltraScale 系列(IDELAYE3)的底层原理,带你彻底攻克
    的头像 发表于 03-11 09:29 1878次阅读
    Xilinx <b class='flag-5'>FPGA</b>输入延迟<b class='flag-5'>原语</b>介绍

    【ALINX 教程】FPGA Multiboot 功能实现——基于 ALINX Artix US+ AXAU25 开发板

    系统级设计 阶段的学习者 Multiboot 功能概述 基础实验FPGA 通常通过 JTAG 下载 bitstream,这种方式掉电
    的头像 发表于 01-05 15:41 1661次阅读
    【ALINX 教程】<b class='flag-5'>FPGA</b> <b class='flag-5'>Multiboot</b> 功能<b class='flag-5'>实现</b>——基于 ALINX Artix US+ AXAU25 开发板

    为什么FPGA设计中使用MicroBlaze V处理器

    各类行业与应用,经常能看到许多 FPGA 设计。一个非常常见的现象是:设计者常常用复杂的有限状态机(FSM)来实现 I²C、SPI、GPIO 时序控制等功能。
    的头像 发表于 12-19 15:29 8573次阅读
    为什么<b class='flag-5'>在</b><b class='flag-5'>FPGA</b>设计中使用MicroBlaze V处理器

    易灵思FPGA DSP原语使用方法

    现代数字信号处理(DSP)应用FPGA(现场可编程门阵列)凭借其高度并行性、可定制性和灵活性,已成为加速信号处理任务的核心硬件平台之一。
    的头像 发表于 12-10 10:32 5795次阅读
    易灵思<b class='flag-5'>FPGA</b> DSP<b class='flag-5'>原语</b>使用方法

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

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

    FPGA设计中集成事件断点的实现过程

    如果对处于全速(at-speed)运行下的FPGA调试,工程师现有通用“能力技术”基础上,再增加“硬件断点”功能,那么对高速运行FPGA,也就拥有像调试软件程序类似的完整可观测能力(Full Visibility)和可控制能力
    的头像 发表于 11-07 11:20 5539次阅读
    <b class='flag-5'>在</b><b class='flag-5'>FPGA</b>设计中集成事件断点的<b class='flag-5'>实现</b>过程

    以太网通讯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 4566次阅读
    如何利用Verilog HDL<b class='flag-5'>在</b><b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>SRAM的读写测试

    使用VerilogFPGA实现FOC电机控制系统

    自动驾驶、电动滑板车、无人机甚至工业自动化领域,高性能电机控制是不可或缺的核心技术。而如果你对硬件有足够的热情,你会发现:传统用 MCU 实现 FOC(Field-Oriented Control,磁场定向控制)也能“搬”到 FPGA
    的头像 发表于 08-21 15:27 5595次阅读
    使用Verilog<b class='flag-5'>在</b><b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>FOC电机控制系统

    FPGA机器学习的具体应用

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

    如何使用FPGA通过CYUSB3014连接U盘?

    你好, 我考虑使用CYUSB3014扩展FPGA的USB接口,然后通过USB接口连接U盘,这种情况下需要FPGA+CYUSB3014实现
    发表于 07-16 07:34

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

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

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

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