项目场景:
在实际使用的时候FPGA没办法保证每一次烧写都是成功的,有可能烧写的过程有问题导致烧写失败,这个时候FPGA就编程砖了,需要重新掉电烧写。
问题描述
在更新FPGA程序的时候有没有办法在逻辑烧写不完整的情况下启动一个备用逻辑来实现远程烧写的功能呢?在远程烧写失败的情况下如何在不拆解产品的情况下重新更新逻辑呢?如何让自己偷懒,给软降帮忙烧写逻辑呢(这个最关键)?
原因分析:
烧写失败重启逻辑的办法又好几种
第一种:采用XILINX的 gold image 的办法(没有验证,应该是可行的)
第二种:采用返回地址的办法
解决方案:
FPGA启动的时候是固定启动32’h0000_0000地址的程序的,所以我们需要在32’h0000_0000地址固化一个基础程序,让软件可以在这个基础版本上面进行更新逻辑程序。同时在32’h0040_0000地址上面烧写一个正式程序,这个程序包含我们所需要的全部功能,这个程序会在0地址启动之后检验该地址的程序是否校验通过,通过则启动该地址程序。这样我们就可以在0地址启动之后4地址的程序没有问题就启动4程序,有问题就启动0程序让软件可以更新程序,当然也可以在4地址也加上让软件可以更新,这样更加方便。
0地址约束:
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
4地址约束:
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 32’h00400000 [current_design]
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]