Xilinx FPGA Multiboot |
您所在的位置:网站首页 › 7系列fpga远程更新程序在哪 › Xilinx FPGA Multiboot |
什么是远程升级?
是一种更新程序的方法。在实际情况下,我们做好一个产品,进行更新的时候,不可能把产品拆开,对里面的固件进行升级。所以会涉及到一种远程升级的方法,就是上位机通过串口,或者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 |