fpga 上電時(shí),默認(rèn)是從 flash 的 0x00 地址開(kāi)始讀數(shù)據(jù)。如 UG470 文檔 page144 描述
fpga 會(huì)從 0 開(kāi)始讀,地址不斷自增,直到讀取到有效的同步字 sync word(0xAA995566),才認(rèn)為接下來(lái)的內(nèi)容是一個(gè)有效的 bin 文件內(nèi)容的開(kāi)始。讀到有效 sync word 后不會(huì)再繼續(xù)讀搜尋其他的 bin 文件。如 UG470 文檔 page81 描述:
幾種情況
只有一個(gè) bit 文件,使用如下命令將該 bit 文件寫出轉(zhuǎn)換為 mcs 文件,并燒入 spi flash 中。
write_cfgmem-formatmcs-interfacespix4-size8-loadbit{up 0x400000./soc_top.bit}-filesoc_top_0x400000.mcs-force
該 bit 文件在 flash 中存放的起始地址是 0x400000 ,上電 fpga 能正常啟動(dòng),因?yàn)榍安糠值牡刂?0x000000-0x400000 之間都是無(wú)效數(shù)據(jù), fpga 從 0x000000 地址開(kāi)始讀,沒(méi)有有效的 sync word ,讀地址不斷增加,直到 0x400000 地址才會(huì)讀到同步字,然后就能正常的從 0x400000 開(kāi)始配置。
有兩個(gè) bit 文件,使用該命令轉(zhuǎn)換為一個(gè) mcs 文件
write_cfgmem-formatmcs-interfacespix4-size8-loadbit{up0x000000./design1.bit up0x400000./design2.bit}-filemixed.mcs-force
第一個(gè) bit 文件放在 0x000000 地址,第二個(gè)放在 0x400000 地址,燒寫 flash ,上電后 fpga 從 deign1.bit
啟動(dòng),因?yàn)榈谝粋€(gè) bit 在前面, fpga 上電后從 0x000000 地址開(kāi)始讀,會(huì)先讀到 deign1.bit ,然后成功地從deign1.bit 初始化。
若把 mcs 文件中關(guān)于 deign1.bit 的 FDRI data 的內(nèi)容手動(dòng)改為其他值,使得配置的時(shí)候會(huì)出現(xiàn) CRC 校驗(yàn)錯(cuò)誤, deign2.bit 相關(guān)的內(nèi)容不變,燒寫進(jìn)flash,上電, FPGA 無(wú)法正常配置數(shù)據(jù),既不會(huì)從deign1.bit啟動(dòng),也不能從deign2.bit 啟動(dòng),這是因?yàn)榈谝粋€(gè)bit在前面, fpga 上電后從 0x000000 地址開(kāi)始讀,會(huì)先讀到 deign1.bit ,然后從 deign1.bit 開(kāi)始初始化,但是會(huì)發(fā)生CRC錯(cuò)誤,然后又fallback 回 0 地址讀,依然是讀到 design1.bit 的數(shù)據(jù),還是 CRC 錯(cuò)誤,最后發(fā)生配置失敗。
若只把 mcs 文件中關(guān)于 deign1.bit 的 sync word 的內(nèi)容手動(dòng)改為其他值,比如 0xAA997866 ,deign2.bit 相關(guān)的內(nèi)容不變,燒寫進(jìn) flash 上電, FPGA 成功從 deign2.bit 啟動(dòng)。這是因?yàn)榈谝粋€(gè) bit 在前面, fpga 上電后從0x000000 地址開(kāi)始讀,讀到 deign1.bit 的 sync word 為 0xAA997866 時(shí),發(fā)現(xiàn)不是有效的 sync word ,不會(huì)判斷接下來(lái)的內(nèi)容是屬于一個(gè)有效的配置文件,于是繼續(xù)自增地址往上讀,直到讀到 0x400000 地址后面,成功讀到 design2.bit 的 sync word ,發(fā)現(xiàn)有效,然后從 deign2.bit 開(kāi)始初始化。這樣就跳過(guò)了前面 deign1.bit 的內(nèi)容。
bitstream 約束
對(duì)bit流進(jìn)行壓縮
set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]
打開(kāi)看門狗功能
set_propertyBITSTREAM.CONFIG.CONFIGFALLBACKENABLE[current_design]
如果加載 Update_Image 配置文件失敗后,沒(méi)有返回加載 Golden_Image ,則會(huì)根據(jù)指定的時(shí)間啟動(dòng)看門狗,強(qiáng)制返回加載 Golden_Image 。
生成 bit 文件的頭部添加 IPROG 命令和設(shè)置 WBSTAR 的命令
set_propertyBITSTREAM.CONFIG.NEXT_CONFIG_ADDR0x0400000[current_design]
配置時(shí)執(zhí)行到 IPROG 命令后,會(huì)直接跳轉(zhuǎn)到指定的地址中繼續(xù)執(zhí)行配置。可用于 Golden_Image 中設(shè)置為跳轉(zhuǎn)到 Update_Image 啟動(dòng)。其實(shí)加不加這個(gè)約束,生成的bit流中的頭部,都會(huì)有 IPROG 和設(shè)置 WBSTAR 的相關(guān)命令的占位空間,只是不加該約束時(shí), IPROG 的位置會(huì)由 000000 替代, NOP 指令,只是空的占位符;而寫 WBSTAR 寄存器的指令依然存在,但是寫 WBSTAR 的值卻是 0 。
原文標(biāo)題:Xilinx FPGA 從spi flash啟動(dòng)配置數(shù)據(jù)時(shí)的地址問(wèn)題
文章出處:【微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21794瀏覽量
605129 -
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
120926 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7133瀏覽量
89375
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論