Xilinx FPGA Multiboot

您所在的位置:网站首页 7系列fpga远程更新程序在哪 Xilinx FPGA Multiboot

Xilinx FPGA Multiboot

2024-07-09 23:01| 来源: 网络整理| 查看: 265

什么是远程升级?

是一种更新程序的方法。在实际情况下,我们做好一个产品,进行更新的时候,不可能把产品拆开,对里面的固件进行升级。所以会涉及到一种远程升级的方法,就是上位机通过串口,或者PCIe等网络协议,将需要更新的程序放入FPGA的fifo,FPGA通过spi控制与flash进行交互,将从上位机收到的数据传入flash。

这里的flash就是一个存储产品配置的一个存储器。

什么是Multiboot?

将flash分区,放入不同的镜像工程,可以根据地址寻找不同的镜像工程进行加载。

flash存储的形式?

在flash中,我们会进行分区。

Golden Image区:从地址0开始,存储产品的一个稳定版本。当update区的程序启动失败时,让产品加载这个稳定版本,不至于让产品不能启动。

Update Image区:在golden区的地址之上开辟。用来存储我们的升级版本。

这是一个加载的顺序图,从图上我们可以看出:

step1:FPGA首先从地址0开始加载,这时候我们处于Golden镜像。

step2:由于我们在golden镜像的工程里面设置了跳转。所以这个时候我们会跳过Golden区。跳到我们设置的flash地址。

step3:这时候我们开始开始加载Update Image

step4:这里会进行一个判断,如果Update Image没有问题。我们就直接加载Update镜像,也就是我们需要升级的程序。如果有问题,那我们会进入step5;

step5:如果Update Image有问题,会进行一个fallback,也就是回滚。加载稳定程序 Golden Image.

想要做到多镜像启动,有两种方法。

1.是在bit流中加入指令,让FPGA加载的时候根据指令跳入到需要加载的flash镜像地址。

2.Xlinx提供了一个原语,可以在代码中进行操作,本质还是在bit流文件中加入指令。不过在代码中操作更方便。

小测试:

代码工程放在最下面,需要的自取

说一下测试的功能点以及怎么体现Multiboot:

1.两个工程:

a.golden工程:点亮led0

b.update工程:点亮led1

2.使用ICAPE2原语进行分区控制。

设备ID查找表:

怎么使用?我先贴出一个代码参考:

`default_nettype none module multiboot_ctrl( input wire clk, input wire rst_n, input wire multiboot_start, //触发Multiboot, 上升沿有效 input wire [31:0] multiboot_addr, //要启动的Muliboot Image的起始地址 output reg busy ); wire multiboot_start_pe; reg multiboot_start_d0; reg multiboot_start_d1; assign multiboot_start_pe = multiboot_start_d0 & (~multiboot_start_d1); // 采集控制使能的下降沿 always @(posedge clk) begin multiboot_start_d0


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3