一、概要
背景:在实际的工程项目中,无法避免要对工程进行更新,由于到现场进行更新十分麻烦,通常采用远程更新的方法。远程更新的方案是采用通信协议将厂家更新后的工程文件直接写入用户板卡的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://www.toymoban.com/news/detail-764222.html
五、工程文件下载
https://download.csdn.net/download/wry00/88319217?spm=1001.2014.3001.5501文章来源地址https://www.toymoban.com/news/detail-764222.html
到了这里,关于xilinx FPGA Multiboot功能——实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!