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

    关注

    1593

    文章

    21211

    浏览量

    592197

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

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

收藏 人收藏

    评论

    相关推荐

    FPGA深度学习应用或将取代GPU

    ,这使其 AI 应用面临着一些挑战。 Larzul 表示,想要解决这些问题的解决方案便是实现现场可编程门阵列 (FPGA),这也是他们公司的研究领域。
    发表于 03-21 15:19

    如何使用FPGA与FX3实现数据的传输?

    filesfx3_slaveFIFO2b_xilinxfpga_slavefifo2b_verilog文件夹的ISE文件,希望实现USB3.0的回流传输功能。 由于所使用的开发板没有拨码开关,也仅
    发表于 02-28 07:44

    FPGA实现原理

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

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

    FPGA实现了 JPEG 压缩和 UDP 以太网传输。从摄像机的输入中获取单个灰度帧,使用 JPEG 标准对其进行压缩,然后通过UDP以太网将其传输到另一个设备(例如计算机),所有这些使用
    的头像 发表于 01-26 09:30 292次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>通过</b>UDP以太网传输JPEG压缩图片

    IIC总线的FPGA实现说明

    DE2_TV中,有关于寄存器的配置的部分,采用的方法是通过IIC的功能,这里对IIC总线的FPGA实现做个说明。
    的头像 发表于 01-05 10:16 291次阅读
    IIC总线的<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>说明

    如何用RTL原语实现MUX门级映射呢?

    对于前端设计人员,经常会需要一个MUX来对工作模式,数据路径进行明确(explicit)的声明,这个对于中后端工程师下约束也很重要。这里介绍一种巧用的RTL原语实现MUX的方法。
    的头像 发表于 12-14 16:26 450次阅读
    如何用RTL<b class='flag-5'>原语</b><b class='flag-5'>实现</b>MUX门级映射呢?

    Xilinx FPGA芯片内部时钟和复位信号使用方法

    如果FPGA没有外部时钟源输入,可以通过调用STARTUP原语,来使用FPGA芯片内部的时钟和复位信号,Spartan-6系列内部时钟源是50MHz,Artix-7、Kintex-7等
    的头像 发表于 10-27 11:26 996次阅读
    Xilinx <b class='flag-5'>FPGA</b>芯片内部时钟和复位信号使用方法

    怎么通过FPGA采取SD模式实现Micro SD卡的驱动

    在这篇文章,进入正题,说一说怎么通过FPGA采取SD模式来实现Micro SD 卡的驱动,也就是怎么去读写 Micro SD 卡。
    的头像 发表于 09-19 11:48 971次阅读
    怎么<b class='flag-5'>通过</b><b class='flag-5'>FPGA</b>采取SD模式<b class='flag-5'>实现</b>Micro SD卡的驱动

    光在光纤中的传输原怎样还原语音?

    重要的应用就是语音通信领域,而语音通信的实现正是通过光纤中光信号的传输和解调来完成的。那么,光在光纤中的传输是如何还原语音的呢? 首先,我们需要明确一下,语音信号信号是一种模拟信号,而光纤所传输的是一种数字
    的头像 发表于 09-07 14:46 417次阅读

    获取Xilinx FPGA芯片IDCODE的4种方法

    Xilinx任何一款FPGA型号都有一个唯一的IDCODE,用来区分不同的产品,同一型号不同封装的FPGA IDCODE是一致的,可以通过JTAG、ICAP
    的头像 发表于 07-03 13:01 1624次阅读
    获取Xilinx <b class='flag-5'>FPGA</b>芯片IDCODE的4种方法

    AMD Artix 7 FPGA OTA在线升级的实现

    AMD FPGA支持的MultiBoot特性,可以使FPGA先尝试启动最新的配置(bit)文件,后续称为Update Bit。如果最新的配置文件出错,再回退到安全的出厂版本的配置(bit)文件,后续称为Golden Bit。
    的头像 发表于 05-17 10:39 440次阅读

    FPGA的开发如何对inout信号进行赋值?

    FPGA的开发,如何对inout信号进行赋值?
    发表于 04-23 14:25

    FPGA模拟SPI接口要如何保证这个时序要求呀?

    如SPI接口中,FPGA通过模拟产生时钟和串行数据与一个外部芯片进行通信,其建立和保持时间是有时序要求的,这个时序要求可以通过外部的手册上获得。那么
    发表于 04-23 11:35

    如何创建Golden镜像和Multiboot镜像?

    刷新程序,比如机房服务器FPGA加速卡或采集卡,无法随便出入机房进行升级,FPGA部署偏远山区的基站或高高的通信塔台等等场景,现场通过
    发表于 04-04 17:11

    Xilinx FPGA Multiboot设计与实现(Spartan-6和Kintex-7示例)

    FPGA的硬件可编程性给设计带来了很高的灵活性,基于FPGA的产品也会有更新或升级的需求,而且大多数情况下由于现场环境、人力物力成本的限制,无法通过下载器JTAG方式进行刷新程序,比如机房服务器
    的头像 发表于 03-31 13:41 4923次阅读