当前位置:网站首页>Xilinx FPGA 从spi flash启动配置数据时的地址问题
Xilinx FPGA 从spi flash启动配置数据时的地址问题
2022-07-16 06:13:00 【碎碎思】
本文来源于粉丝投稿,若对文章中有疑问,可在评论区回复,作者会针对问题解惑,同时也欢迎广大爱好者踊跃投稿,文末附作者微信联系方式。
FPGA上电(Master)
fpga 上电时,默认是从 flash 的 0x00 地址开始读数据。如 UG470 文档 page144 描述

fpga 会从 0 开始读,地址不断自增,直到读取到有效的同步字 sync word(0xAA995566),才认为接下来的内容是一个有效的 bin 文件内容的开始。读到有效 sync word 后不会再继续读搜寻其他的 bin 文件。如 UG470 文档 page81 描述:

几种情况
只有一个 bit 文件,使用如下命令将该 bit 文件写出转换为 mcs 文件,并烧入 spi flash 中。
write_cfgmem -format mcs -interface spix4 -size 8 -loadbit {up
0x400000 ./soc_top.bit} -file soc_top_0x400000.mcs -force该 bit 文件在 flash 中存放的起始地址是 0x400000 ,上电 fpga 能正常启动,因为前部分的地址 0x000000-0x400000 之间都是无效数据, fpga 从 0x000000 地址开始读,没有有效的 sync word ,读地址不断增加,直到 0x400000 地址才会读到同步字,然后就能正常的从 0x400000 开始配置。
有两个 bit 文件,使用该命令转换为一个 mcs 文件
write_cfgmem -format mcs -interface spix4 -size 8 -loadbit {up 0x000000 ./design1.bit
up 0x400000 ./design2.bit} -file mixed.mcs -force第一个 bit 文件放在 0x000000 地址,第二个放在 0x400000 地址,烧写 flash ,上电后 fpga 从 deign1.bit
启动,因为第一个 bit 在前面, fpga 上电后从 0x000000 地址开始读,会先读到 deign1.bit ,然后成功地从deign1.bit 初始化。
若把 mcs 文件中关于 deign1.bit 的 FDRI data 的内容手动改为其他值,使得配置的时候会出现 CRC 校验错误, deign2.bit 相关的内容不变,烧写进flash,上电, FPGA 无法正常配置数据,既不会从deign1.bit启动,也不能从deign2.bit 启动,这是因为第一个bit在前面, fpga 上电后从 0x000000 地址开始读,会先读到 deign1.bit ,然后从 deign1.bit 开始初始化,但是会发生CRC错误,然后又fallback 回 0 地址读,依然是读到 design1.bit 的数据,还是 CRC 错误,最后发生配置失败。
若只把 mcs 文件中关于 deign1.bit 的 sync word 的内容手动改为其他值,比如 0xAA997866 ,deign2.bit 相关的内容不变,烧写进 flash 上电, FPGA 成功从 deign2.bit 启动。这是因为第一个 bit 在前面, fpga 上电后从0x000000 地址开始读,读到 deign1.bit 的 sync word 为 0xAA997866 时,发现不是有效的 sync word ,不会判断接下来的内容是属于一个有效的配置文件,于是继续自增地址往上读,直到读到 0x400000 地址后面,成功读到 design2.bit 的 sync word ,发现有效,然后从 deign2.bit 开始初始化。这样就跳过了前面 deign1.bit 的内容。
bitstream 约束
对bit流进行压缩
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]打开看门狗功能
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]如果加载 Update_Image 配置文件失败后,没有返回加载 Golden_Image ,则会根据指定的时间启动看门狗,强制返回加载 Golden_Image 。
生成 bit 文件的头部添加 IPROG 命令和设置 WBSTAR 的命令
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x0400000 [current_design]配置时执行到 IPROG 命令后,会直接跳转到指定的地址中继续执行配置。可用于 Golden_Image 中设置为跳转到 Update_Image 启动。其实加不加这个约束,生成的bit流中的头部,都会有 IPROG 和设置 WBSTAR 的相关命令的占位空间,只是不加该约束时, IPROG 的位置会由 000000 替代, NOP 指令,只是空的占位符;而写 WBSTAR 寄存器的指令依然存在,但是写 WBSTAR 的值却是 0 。
边栏推荐
- Redis报错MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist...
- How about the income of increased life insurance? Can it be a pension financial product?
- Comparison and summary of five deep learning models for time series prediction: from simulated statistical model to unsupervised model that can be pre trained
- 小程序毕设作品之微信评选投票小程序毕业设计(7)中期检查报告
- One click VR panorama display
- 直线上最多的点数问题
- Chapter 5 network communication practice
- 指针常量与常量指针
- Qt自定义控件--pagenavigation(页面导航)
- UE adds two buttons on the resource right-click menu of editor
猜你喜欢

Comparison and summary of five deep learning models for time series prediction: from simulated statistical model to unsupervised model that can be pre trained

How to turn off win11 system protection? Win11 system protection shutdown method

The degradation mechanism is not designed properly, and the online system crashes instantly

Eureka read-write lock fantasy, too top!

C#窗体应用程序常用控件介绍

In depth learning (2020 Li Hongyi) learning records

Going to sea has become a general trend. How can technology be empowered| ArchSummit

Hal firmware library

Ziguang Tongchuang FPGA development jump pit Guide (V) -- DDR3 controller IP simulation

Codeforces Global Round 21 D. Permutation Graph
随机推荐
家族树问题
Codeforces Round #804 A The Third Three Number Problem
Kotlin | 为 Kotlin 编译器任务推出构建报告
Huawei cloud stack opens its framework to the south to help ecological partners enter the cloud efficiently
IO会一直占用CPU吗?一个很好的关于并发/并行系统的问题(转)
Total sequencing problem
二进制搭建 Kubernetes
XGBoostError: [10:19:14] C:\dev\libs\xgboost\src\objective\objective. cc:23:
如何用常数时间插入、删除和获取随机元素
Reconstructing the geometric form of weight space with training set
The most points on a straight line
深度学习(2020李宏毅)学习记录
Codeforces Global Round 21 A. NIT orz!
指针常量与常量指针
Tens of billions of data were compressed to 600gb, and tdengine was launched on GCL energy mobile energy platform
One click VR panorama display
通过装饰器获取调用函数的文件名称及函数名称
我为 TDengine “带盐”!“高价”招募出镜开发者
WWDC22 - In App Purchase 更新总结
线上MySQL的自增id用尽怎么办?