xilinx FPGA Multiboot功能——实战

一、概要

背景:在实际的工程项目中,无法避免要对工程进行更新,由于到现场进行更新十分麻烦,通常采用远程更新的方法。远程更新的方案是采用通信协议将厂家更新后的工程文件直接写入用户板卡的flash芯片中。

二、Multiboot加载原理

在远程更新的时候,需要双镜像来保护设计的稳定性。Multiboot中的两个镜像分别为G镜像(Golden)和M镜像(Multiboot)。G镜像包括功能模块、镜像切换模块、flash控制模块。
在进行更新的时候,永不更新G镜像,只更新M镜像。当更新出错时,仍然可以加载G镜像,这样至少可以保证有一个工程正在运行,系统不至于死机,方便后续再次更新。

下图是镜像切换的流程。上电后自动加载G镜像,当收到镜像切换触发信号时,开始加载M镜像。若M镜像加载失败则重新加载G镜像。
在这里插入图片描述

三、ICAPE2原语的介绍

本文采用ICAPE2原语实现Multiboot功能。
ICAPE2原语的内容如下:


//   ICAPE2    : In order to incorporate this function into the design,
//   Verilog   : the following instance declaration needs to be placed
//  instance   : in the body of the design code.  The instance name
// declaration : (ICAPE2_inst) and/or the port declarations within the
//    code     : parenthesis may be changed to properly reference and
//             : connect this function to the design.  All inputs
//             : and outputs must be connected.

//  <-----Cut code below this line---->

   // ICAPE2: Internal Configuration Access Port
   //         Artix-7
   // Xilinx HDL Language Template, version 2017.4

   ICAPE2 #(
      .DEVICE_ID(0'h3651093),     // Specifies the pre-programmed Device ID value to be used for simulation
                                  // purposes.
      .ICAP_WIDTH("X32"),         // Specifies the input and output data width.
      .SIM_CFG_FILE_NAME("None")  // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation
                                  // model.
   )
   ICAPE2_inst (
      .O(O),         // 32-bit output: Configuration data output bus
      .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 ICAPE2_inst instantiation

这里需要特别注意DEVICE_ID一定要填写正确,需要根据FPGA型号填写对应的ID。具体查找ug470手册。
下图是7系列FPGA的DEVICE_ID:
在这里插入图片描述
Multiboot的加载过程就是将以下指令按照顺序输入到ICAPE2中。其中Warm Boot Start Address指令需要修改成M镜像的起始地址。
在这里插入图片描述

四、工程实操

本文基于正点原子达芬奇pro开发板(Artix-7 xc7a100tffg484-2)进行测试。
下面是工程实操流程:
1.在G镜像工程中例化ICAPE2原语,并按照Table7-1的指令顺序,把指令输入到ICAPE2原语中。

//仅展示代码片段(完整代码请下载工程)
initial begin
    con_data[0]             =       32'hFFFF_FFFF;
    con_data[1]             =       32'hAA99_5566;
    con_data[2]             =       32'h2000_0000;
    con_data[3]             =       32'h3002_0001;
    con_data[4]             =       32'h0007_D000;//M镜像的起始地址
    con_data[5]             =       32'h3000_8001;
    con_data[6]             =       32'h0000_000F;
    con_data[7]             =       32'h2000_0000;
end

assign      con_data_r      =       {con_data[cnt][24],con_data[cnt][25],con_data[cnt][26],con_data[cnt][27],con_data[cnt][28],con_data[cnt][29],
                                     con_data[cnt][30],con_data[cnt][31],con_data[cnt][16],con_data[cnt][17],con_data[cnt][18],con_data[cnt][19],
                                     con_data[cnt][20],con_data[cnt][21],con_data[cnt][22],con_data[cnt][23],con_data[cnt][08],con_data[cnt][09],
                                     con_data[cnt][10],con_data[cnt][11],con_data[cnt][12],con_data[cnt][13],con_data[cnt][14],con_data[cnt][15],
                                     con_data[cnt][00],con_data[cnt][01],con_data[cnt][02],con_data[cnt][03],con_data[cnt][04],con_data[cnt][05],
                                     con_data[cnt][06],con_data[cnt][07]};

ICAPE2 #(
    .DEVICE_ID          (32'h3631093        ),  
                                            
    .ICAP_WIDTH         ("X32"              ),  
    .SIM_CFG_FILE_NAME  ("NONE"             )   
)ICAPE2_inst(
    .O                  (                   ),  
    .CLK                (sclk               ), 
    .CSIB               (csib               ), 
    .I                  (con_data_r         ),  
    .RDWRB              (rdwrb              )  
);

2.编译G镜像工程,生成bit文件。
3.编译M镜像工程,生成bit文件。
4.在获得G镜像和M镜像工程的bit文件后,需要生成mcs文件。
在这里插入图片描述

在这里插入图片描述
这里M镜像起始地址,要与输入到ICAPE2原语的Warm Boot Start Address值保持一致。
5.将mcs文件下载到板子上。

五、工程文件下载

https://download.csdn.net/download/wry00/88319217?spm=1001.2014.3001.5501

  • 11
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Xilinx FPGA的多启动实现在线升级的原理是通过使用片上ROM(Read-Only Memory)或者外部配置存储器来存储多个bit文件。在系统启动过程中,FPGA会依据配置存储器中的特定信号或引脚状态来选择加载不同的bit文件。 在实现在线升级的过程中,首先需要确保FPGA的配置存储器能够容纳多个bit文件。接下来,需要设计一个合适的控制逻辑,用于根据外部信号或者某些触发条件来选择加载不同的bit文件。 一种常见的实现方法是在FPGA片上集成一个片上ROM,将多个bit文件存储在ROM中,并且将ROM的输出与FPGA的配置引脚相连。在系统启动时,FPGA会根据ROM输出的特定值来选择加载对应的bit文件。此外,也可以使用外部存储器,例如EEPROM、Flash或者SD卡等来存储多个bit文件,并通过芯片的配置接口进行读取。 在实际应用中,可以通过编写适当的控制逻辑以及与FPGA外部接口的通信协议,实现在线升级的功能。例如,可以设计一个微处理器或者外部控制器来监测系统状态,在需要升级的时候,这个控制器会向FPGA发送信号,指示其加载使用新的bit文件。FPGA会停止当前的操作,并加载新的bit文件进行更新。完成升级后,系统即可正常运行。 总结来说,Xilinx FPGA实现多启动的在线升级是通过选择不同的bit文件来更新FPGA的配置信息。这需要使用片上ROM或者外部存储器来存储不同的bit文件,并通过控制逻辑和外部接口来实现在线升级的功能
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值