最近遇到一個(gè)問(wèn)題,直接往FPGA里燒寫(xiě)bit文件有時(shí)候能成功,有時(shí)候不能成功。假如先往PROM里寫(xiě)程序,不斷電,再通過(guò)JTAG往FPGA里寫(xiě)程序,就一定燒不進(jìn)去。
直接上結(jié)論:
在Generate Programming File的選項(xiàng)里把Enable Internal Done Pipe的選項(xiàng)勾選上,或許問(wèn)題就可以解決了。
原理
FPGA 的配置寄存器中有一個(gè)叫COR寄存器(配置選項(xiàng)寄存器)。這個(gè)寄存器的第25位是DONE_PIPE。VIRTEX II 系列的手冊(cè)里對(duì)這一位的描述是這樣的:
Add a pipeline stage for the DONEIN signal. The DONEIN signal reflects the logic level on the DONE pin, not whether the device has released the DONE pin. This pipeline stage can be useful if the rise time on the DONE pin is slow, which could otherwise cause configuration to fail.
翻譯過(guò)來(lái)是
為DONEIN信號(hào)添加管道級(jí)。DONEIN信號(hào)反映的是DONE引腳上的邏輯電平,而不是設(shè)備是否釋放了DONE引腳。如果DONE引腳上的上升時(shí)間很慢,則此管道階段非常有用,否則可能導(dǎo)致配置失敗。
關(guān)于這些寄存器的說(shuō)明可以看英文原版手冊(cè)或者我復(fù)制粘貼的一篇VIRTEX II系列FPGA手冊(cè)的翻譯。
VIRTEX II 系列FPGA的配置部分文檔的翻譯閱讀參考
ISE的默認(rèn)選項(xiàng)里是不選中這個(gè)DONE_PIPE的(或者至少我用的10.1版本是這樣的)。
問(wèn)題的發(fā)現(xiàn)
發(fā)現(xiàn)問(wèn)題的方法說(shuō)簡(jiǎn)單很簡(jiǎn)單,說(shuō)復(fù)雜很復(fù)雜。
用邏輯分析儀抓JTAG下載信號(hào),把數(shù)據(jù)存下來(lái)然后自己在EXCEL里寫(xiě)公式,把JTAG狀態(tài)機(jī)和FPGA里的一些寄存器解析出來(lái)。
在EXCEL里發(fā)現(xiàn)我在CFG_IN指令下發(fā)送的數(shù)據(jù)是這樣的:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-400822.html
0xAA995566是同步字
0x30012001選中的是COR寄存器
0xA0BF3D是往寄存器中寫(xiě)入的內(nèi)容
很明顯第25位寫(xiě)入的是0,也就是DONE_PIPE沒(méi)有選中
當(dāng)我嘗試著在生成選項(xiàng)里勾選DONG_PIPE之后,下載就成功了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400822.html
到了這里,關(guān)于FPGA直接燒寫(xiě).bit文件失敗但是可以通過(guò)PROM配置的情況的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!