FPGA的調(diào)試是個(gè)很蛋疼的事,即便Vivado已經(jīng)比ISE好用了很多,但調(diào)試起來(lái)依舊蛋疼。即便是同一個(gè)程序,F(xiàn)PGA每次重新綜合、實(shí)現(xiàn)后結(jié)果都多多少少會(huì)有所不同。而且加入到ila中的數(shù)據(jù)會(huì)占用RAM資源,影響布局布線的結(jié)果。
尤其是在時(shí)序緊張的情況下,ila占的資源越多,布線的難度就會(huì)越大。當(dāng)時(shí)序不收斂時(shí),就可能會(huì)導(dǎo)致一個(gè)問題,我們從ila中看到的信號(hào)可能不是真實(shí)的。
下面說(shuō)一下今天在調(diào)試中碰到的現(xiàn)象:
場(chǎng)景還原:
1. 程序中有4個(gè)主時(shí)鐘,而且一直處于在時(shí)序收斂的邊緣狀態(tài),也就是說(shuō)有時(shí)候Implementation后時(shí)序收斂,有時(shí)時(shí)序違規(guī),但我沒有去管,因?yàn)閳?bào)時(shí)序違規(guī)的地方并不是我當(dāng)時(shí)調(diào)試的代碼處。
2. 數(shù)據(jù)的位寬較大,為256bit,要對(duì)該數(shù)據(jù)做一系列的處理,比如原始數(shù)據(jù)為A[255:0],在數(shù)據(jù)處理過(guò)程中需要將A賦值給B[255:0],再將B賦值給C[255:0]。
3. 數(shù)據(jù)C最后通過(guò)PCIe傳給了上位機(jī),在上位機(jī)中看到C波形有時(shí)會(huì)有毛刺,但不確定是哪一步出了問題,于是將A、B和C都引入到ila中,又多抓了幾個(gè)相關(guān)的信號(hào),加起來(lái)總共有800多bits。
4. 總的BARM占用率不超過(guò)40%,LUT RAM沒超過(guò)10%,LUT和FF都沒有超過(guò)30%,BUFG用了47%。
出現(xiàn)的問題:
1. 在沒有加這么多的debug信號(hào)前,偶爾時(shí)序會(huì)報(bào)違規(guī),但都是個(gè)別的一兩處報(bào)的setup違規(guī)。但加了這些信號(hào)后,所有時(shí)鐘的Intra-Clock Paths的Hold-up Time都違規(guī)。如果是建立時(shí)間不過(guò),解決辦法有很多,但保持時(shí)間不過(guò),就有點(diǎn)麻煩了。但這肯定是增加了這么多的debug導(dǎo)致的,所以不用去理會(huì)。
2. 由于看到上位機(jī)中的波形有毛刺,首先確定C的數(shù)據(jù)是否有問題,排除PCIe傳輸中的錯(cuò)誤。對(duì)比發(fā)現(xiàn)C和上位機(jī)的數(shù)據(jù)完全一樣,因此毛刺肯定是出現(xiàn)在前面的邏輯中。
3. 發(fā)現(xiàn)A、B和C的數(shù)據(jù)都是不一致的,可能會(huì)出現(xiàn)下面的現(xiàn)象:
A的數(shù)據(jù)是xxxx10101010xxxx
B的數(shù)據(jù)是xxxx00101010xxxx
C的數(shù)據(jù)是xxxx10101011xxxx
也就是說(shuō),在B中發(fā)現(xiàn)數(shù)據(jù)出現(xiàn)了誤碼,1->0,但C中該bit依然是對(duì)的,跟原始數(shù)據(jù)的A是一樣的,由于我們的 賦值過(guò)程是A->B->C。
說(shuō)明可能有兩種原因:
1. 從B到C的傳輸過(guò)程中,剛好在這個(gè)bit處產(chǎn)生了誤碼
2. 數(shù)據(jù)B的這個(gè)bit其實(shí)是正確的,只是抓出來(lái)的數(shù)據(jù)有問題
由于程序中在很多地方都會(huì)出現(xiàn)這種情況,所以認(rèn)為第二種可能性更大一些。
總結(jié):
在時(shí)序不收斂的情況下,我們通過(guò)ila抓出來(lái)的數(shù)據(jù)可能并不是真實(shí)的,在碰到這種問題時(shí),可能需要我們先把時(shí)序調(diào)整后再進(jìn)行后續(xù)調(diào)試。
最后,碰到這種問題怎么解決呢?最根本的解決辦法當(dāng)然是修改設(shè)計(jì),使時(shí)序能夠收斂。還有一種笨辦法,由于程序Implementation后有時(shí)能收斂有時(shí)不能收斂,那我們就把時(shí)序收斂時(shí)的bit作Release即可,再對(duì)這個(gè)bit程序做詳細(xì)測(cè)試。
-
FPGA
+關(guān)注
關(guān)注
1624文章
21568瀏覽量
600622 -
Vivado
+關(guān)注
關(guān)注
19文章
803瀏覽量
66141
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論