|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA上电(Master)
- d; d8 M9 V; [- A$ M# j% ^, N- Cfpga 上电时,默认是从 flash 的 0x00 地址开始读数据。如 UG470 文档 page144 描述
# r6 }+ N+ R) O- V' v' y; d/ E* i! E$ r$ P: Q2 E3 x# c
6 c2 Q( I; J- t. [ w' c; Tfpga 会从 0 开始读,地址不断自增,直到读取到有效的同步字 sync word(0xAA995566),才认为接下来的内容是一个有效的 bin 文件内容的开始。读到有效 sync word 后不会再继续读搜寻其他的 bin 文件。如 UG470 文档 page81 描述:
2 K2 {- U, E/ o8 n+ N& n) z7 z4 z4 J( u/ B9 l1 g
9 N+ G' i' q/ r; D* Z& ~几种情况- I/ K8 l( ?) E! ?% t# m0 ^
只有一个 bit 文件,使用如下命令将该 bit 文件写出转换为 mcs 文件,并烧入 spi flash 中。
5 D3 ~# ]9 J7 \6 F' z/ N! ^4 y, d/ E. R B
write_cfgmem -format mcs -inteRFace spix4 -size 8 -loadbit {up
+ R4 `1 L6 i4 }5 ^( m( j& e, O0x400000 ./soc_top.bit} -file soc_top_0x400000.mcs -force
! y8 m; {; C) @: Z. q. a# k- ^该 bit 文件在 flash 中存放的起始地址是 0x400000 ,上电 fpga 能正常启动,因为前部分的地址 0x000000-0x400000 之间都是无效数据, fpga 从 0x000000 地址开始读,没有有效的 sync word ,读地址不断增加,直到 0x400000 地址才会读到同步字,然后就能正常的从 0x400000 开始配置。 `$ D% |6 I9 _( W8 U9 I4 a
0 n2 v+ [) U. N) }1 {有两个 bit 文件,使用该命令转换为一个 mcs 文件' H0 Q* \: k4 Z$ w2 z' }5 j
" c: V$ V( E0 W5 v" e& rwrite_cfgmem -format mcs -interface spix4 -size 8 -loadbit {up 0x000000 ./design1.bit' Z9 R5 F% t! }# l
up 0x400000 ./design2.bit} -file mixed.mcs -force
& u5 h& I2 ~0 u( S% J6 N第一个 bit 文件放在 0x000000 地址,第二个放在 0x400000 地址,烧写 flash ,上电后 fpga 从 deign1.bit3 S" D' M J. r+ K+ W0 t4 I5 h
启动,因为第一个 bit 在前面, fpga 上电后从 0x000000 地址开始读,会先读到 deign1.bit ,然后成功地从deign1.bit 初始化。' T8 ~9 `. q- m
8 `2 a, A w" K, i4 a6 Q0 {
若把 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 错误,最后发生配置失败。
% @, j- c. |( I2 a- A4 B9 g, o+ x$ {" W7 x6 K
若只把 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 的内容。
2 ]- J* A4 {1 `6 S8 `, T; n f9 a* _: ^# p5 p6 f: O
bitstream 约束
5 H4 y7 h# R0 ]3 y9 r7 h. H" Y对bit流进行压缩: g3 c7 m1 u$ L- d. b
8 ]/ C: ^( s8 m7 {6 J
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
4 j! B& V! B% e& I0 r$ V7 `打开看门狗功能
7 U, U0 T+ d+ D" _8 B" D% ~$ C5 Y: T
) M0 I; ^- n5 F( Y, Y! dset_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] 5 V4 c( D4 E# b1 A2 y& ~& z) e
如果加载 Update_Image 配置文件失败后,没有返回加载 Golden_Image ,则会根据指定的时间启动看门狗,强制返回加载 Golden_Image 。
5 W) ?( }2 v. |+ B7 U! V6 c/ q( `& {/ c" t
生成 bit 文件的头部添加 IPROG 命令和设置 WBSTAR 的命令3 R0 H8 r( W' b6 h& Z! |6 a$ i
8 j( I7 V5 e1 [' v" u# l4 v
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x0400000 [current_design]
/ {& S! v/ e2 @配置时执行到 IPROG 命令后,会直接跳转到指定的地址中继续执行配置。可用于 Golden_Image 中设置为跳转到 Update_Image 启动。其实加不加这个约束,生成的bit流中的头部,都会有 IPROG 和设置 WBSTAR 的相关命令的占位空间,只是不加该约束时, IPROG 的位置会由 000000 替代, NOP 指令,只是空的占位符;而写 WBSTAR 寄存器的指令依然存在,但是写 WBSTAR 的值却是 0 。- ~0 O8 n4 Z: {( R( u& s
|
|