赞
踩
学习一下FPGA的远程在线更新功能 QUICKBOOT。
这部分是直接摘抄的官方文档。
1、关键开关字的控制。
2、Flash 存储器与QuickBoot flash 模块的地址映射。
3、位流包的大小以及Flash 存储器大小的确定。
4、QuickBoot配置时间
5、QuickBoot验证update bitstream的正确性
下面写的这些根本不好用,我自己搞了半天没搞懂。重新去找了一个用MultiBoot的方法,原理上是一样的,有一点点区别就是不过对具体操作来说好像不用管。可以直接看第三章。
~~ ## 1.生成MCS文件
首先需要把我们工程的bit文件转成mcs文件,可以用VIVADO的TOOLS里面的Generate Memory Configuration file…命令生成,也可以直接在TCL命令栏里面直接输入以下指令:
write_cfgmem -format mcs -interface spix1 -size 256 -loadbit “up 0 F:/XXX.bit” -file F:/XXX.mcs
路径需要根据你项目工程所在文件夹进行更改。~~
## 2.生成初始化文件
使用以下命令
xilPerl MakeSpiFlashProgrammerMcsFiles.pl XXX.mcs
可以把mcs文件转成两个文件,一个是XXX_initial.mcs,另一个是XXX_update.mcs
2.1 其中的XXX_initial.mcs就是我们需要的Golden文件,也就是最原始的版本,可以直接用烧写器下载到FLASH里面。
2.2 再把XXX_update.mcs转成XXX_update.bin文件。
## 3.生成更新文件
第二步生成的XXX_update.bin就是更新文件,每次更新了程序,重复上面的第1,2两个步骤,再把这个文件通过FPGA在线更新到FLASH。
通常在设计多版本启动及远程更新时,用户需要分别准备两个镜像工程:Golden镜像和MultiBoot镜像,为了方便描述,Golden镜像和MultiBoot镜像分别称为G镜像和M镜像。如图1所示,上电后,FPGA会启动M镜像,如果配置成功,FPGA将会运行在M镜像,若配置失败,则FPGA会回退到G镜像。通常情况下,M镜像是用户实际运行的镜像,当用户设计发生变更时,可以通过远程更新的方式对M镜像进行更新,而G镜像是一个基本镜像,通常情况下它只包含接收一个M镜像配置文件并写入到FLASH的功能,并且不建议对G镜像进行更新。
FPGA工程里面主要的几个功能模块:
1.FPGA接收外部更新包。
这个是由用户的工作模式决定的。我以前的工程是用的FSMC通信来接收STM32的数据,所以这里直接用的以前的工程代码。稍微改了一下接口。
2.控制模块
这个是我们要写的核心模块,主要是完成接收更新包和把更新包写入FLASH的控制时序。
3.FPGA和FLASH的SPI通信模块。
这个模块主要是把更新包写到FLASH里面。这个可以找现有的模块直接调用。其实就是一个FLASH的读写模块。
因为FLASH的通信模块不是我自己写的,目前我用TESTBENCH仿真的时候因为收不到FLASH的返回数据到处卡死,正在慢慢调试。仿真通过了再用以前的板子试一下实际使用效果。
整整弄了两天,差不多把仿真跑通了,头都弄晕了。主要是因为FLASH每次读写都需要查询状态寄存器,TESTBENCH给的返回值没给对就会卡死。把我弄晕的是他里面有三个相互嵌套的状态机,第一个是n25q_spi_block模块里面的,每次向FLASH里面写入256BYTE数据;第二个是n25q_ctrl_module模块里面的,查询FLASH的状态参数;第三个是prog_file模块里面的,与用户的模块交互,缓存数据。
我发现一个问题,在第一次完成更新之后,每次开机就直接进去M镜像工作了。那我第二次更新的时候怎么回到G镜像去进行更新呢?
我开始想的是在M镜像里面也写一个和G镜像一模一样的模块,不过发现会和我正常工作的其它模块冲突,不知道这个是怎么操作的。
2022.11.29更新:
set_property BITSTREAM.CONFIC.CONFICFALLBACK Enable [current_design]
set property BITSTREAM.CONFIG.NEXT CONFIG ADDR 32 h003E0000
最近在帮一个网友解决远程更新问题时,碰到一个关于跳转的问题。
他在开机上电时,怎么都不能正常跳转到UPDATA的区域进行加载,我查了他的XDC文件,里面也设置了跳转区域,后来说用ICAP原语就能正常加载了。
最后发现原因是他一直挂着JTAG,处于调试模式,所以用ICAP相当于在程序内跳转,但是开机就没有执行XDC里面的命令。
2023.03.09更新,如有问题可留言或者私信。
https://download.csdn.net/download/pp_0604/87545283
2023.05.16
发现一个工程上的问题:
用VIVADO烧写FLASH时老是报错,找不到FLASH芯片。
原因:用了FPGA远程 更新程序,把FLASH的引脚占用了。
现象:如果FLASH里面已经有了FPGA远程更新的程序,开机用JTAG就找不到FLASH。如果FLASH里面没有FPGA远程更新的程序,用JTAG能找到FLASH,但是如果在线调试了远程更新的代码,即使重新在线挂了别的程序,也无法解除FLASH片选引脚的占用。必须重新开电。
分析:应该是FLASH引脚被占用的原因。在FPGA的启动配置项里面,本项目用的是MASTER SPI,也就是开机读取FLASH进行启动。
一般的FPGA开发板会有开关切换启动模式,如果设置成JTAG启动,应该就可以通过JTAG对FLASH进行烧写;设置成FLASH启动,则可以通过远程更新进行烧写。
根据进度随时更新此文档。~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。