找回密码
 注册
关于网站域名变更的通知
查看: 862|回复: 3
打印 上一主题 下一主题

Xilinx FPGA 从spi flash启动配置数据时的地址问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-8-26 09:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA上电(Master)7 F- Q- k9 i  ?: X  x, m% r1 b
fpga 上电时,默认是从 flash 的 0x00 地址开始读数据。如 UG470 文档 page144 描述
$ e; D1 n$ j& O( [2 r& X
0 L0 v+ c# z- E
. B( Y# Y" j" ]) j6 ^! {fpga 会从 0 开始读,地址不断自增,直到读取到有效的同步字 sync word(0xAA995566),才认为接下来的内容是一个有效的 bin 文件内容的开始。读到有效 sync word 后不会再继续读搜寻其他的 bin 文件。如 UG470 文档 page81 描述:0 \6 D  t$ I/ Z

0 n; I" r# g- E
- l1 m7 ]# ^0 A" d! ]" K6 g几种情况
% C9 y& f& h( B" |- y+ {只有一个 bit 文件,使用如下命令将该 bit 文件写出转换为 mcs 文件,并烧入 spi flash 中。5 d6 u6 m! ]4 z( Y9 U: ?. G
# j; \+ I* d& F# N
write_cfgmem -format mcs -inteRFace spix4 -size 8 -loadbit {up
' U9 k2 C. l. u0 L/ N0x400000 ./soc_top.bit} -file soc_top_0x400000.mcs -force! V9 Y9 V( d* S1 `. i
该 bit 文件在 flash 中存放的起始地址是 0x400000 ,上电 fpga 能正常启动,因为前部分的地址 0x000000-0x400000 之间都是无效数据, fpga 从 0x000000 地址开始读,没有有效的 sync word ,读地址不断增加,直到 0x400000 地址才会读到同步字,然后就能正常的从 0x400000 开始配置。' T2 E, u$ a' a4 S/ C9 r* F) v
/ e- D- ?% F1 q2 k4 o
有两个 bit 文件,使用该命令转换为一个 mcs 文件$ Z( a+ J$ o) Y2 n7 W
6 p6 A8 F1 N/ S0 R. s* h
write_cfgmem -format mcs -interface spix4 -size 8 -loadbit {up 0x000000 ./design1.bit
7 \2 a% @- @# K6 e. ]+ ?" o  v/ a) `up 0x400000 ./design2.bit} -file mixed.mcs -force6 X2 p1 m" W- k  N
第一个 bit 文件放在 0x000000 地址,第二个放在 0x400000 地址,烧写 flash ,上电后 fpga 从 deign1.bit
8 m3 z! I! }4 Q4 E% w启动,因为第一个 bit 在前面, fpga 上电后从 0x000000 地址开始读,会先读到 deign1.bit ,然后成功地从deign1.bit 初始化。
2 B" S  D/ }/ S3 ?$ P0 n& O
: k  @0 C: |8 O; M1 y) |若把 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 错误,最后发生配置失败。( R- A0 e" N) j* @4 n5 l; P8 C
; U* w& O2 x5 ~  c" K- \7 ~5 W
若只把 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 的内容。
7 E% q8 N  ]4 `  ^$ \$ z
+ \* B- i( [; Kbitstream 约束% b( Z$ Q' S7 T, ~
对bit流进行压缩) c. d% H, ]5 |! i9 m

; n; a% S3 i8 l6 O+ N/ }' Jset_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
; h. e* W2 J, [# |打开看门狗功能- Y& G) B( R! D: @  i3 Q% y8 Z2 M
$ E# ?- M) O6 |* d7 ]7 ?2 C2 m
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] 8 ~" q3 ]' V& O2 j# H7 [4 N
如果加载 Update_Image 配置文件失败后,没有返回加载 Golden_Image ,则会根据指定的时间启动看门狗,强制返回加载 Golden_Image 。
9 |3 }1 Q. H8 r* p, l$ I0 o4 ^# |' E: |: C  d1 c% A" Q1 B1 I/ A% Q
生成 bit 文件的头部添加 IPROG 命令和设置 WBSTAR 的命令1 |5 b. @  |/ g5 }
7 [. J; ^# L' [' d  k. c' D/ V
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x0400000 [current_design]) e+ i. a9 P# C: `0 ~* K
配置时执行到 IPROG 命令后,会直接跳转到指定的地址中继续执行配置。可用于 Golden_Image 中设置为跳转到 Update_Image 启动。其实加不加这个约束,生成的bit流中的头部,都会有 IPROG 和设置 WBSTAR 的相关命令的占位空间,只是不加该约束时, IPROG 的位置会由 000000 替代, NOP 指令,只是空的占位符;而写 WBSTAR 寄存器的指令依然存在,但是写 WBSTAR 的值却是 0 。
: f4 K; D. ^3 o. j9 O" ?( V

该用户从未签到

2#
发表于 2021-8-26 11:19 | 只看该作者
fpga 会从 0 开始读,地址不断自增,直到读取到有效的同步字 sync word(0xAA995566),才认为接下来的内容是一个有效的 bin 文件内容的开始。读到有效 sync word 后不会再继续读搜寻其他的 bin 文件
& c! q$ \$ Y, t8 ]6 T1 h% L

该用户从未签到

3#
发表于 2021-8-26 13:16 | 只看该作者
其实加不加这个约束,生成的bit流中的头部,都会有 IPROG 和设置 WBSTAR 的相关命令的占位空间,只是不加该约束时, IPROG 的位置会由 000000 替代, NOP 指令,只是空的占位符;而写 WBSTAR 寄存器的指令依然存在,但是写 WBSTAR 的值却是 0
" _# h5 T) Y& r/ `8 q& T( _

该用户从未签到

4#
发表于 2021-8-26 13:35 | 只看该作者
生成 bit 文件的头部添加 IPROG 命令和设置 WBSTAR 的命令. U  J0 n2 R" k+ L( a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-1 18:13 , Processed in 0.171875 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表