以前很少用到仿真,這次在仿真的過程中,遇到了某個警告,于是轉(zhuǎn)過頭又去研究了FIFO中的Safety Circuit的作用。
FIFO在FPGA中用的很多,常用于做少量數(shù)據(jù)的緩存和同步數(shù)據(jù)時鐘域, 本文將介紹Memory Collision Error on RAMB36E1錯誤及相應(yīng)的解決方案,其中涉及到Vivodo FIFO IP核的Safety Circuit設(shè)置。
事情是這樣的,在某個設(shè)計中,我需要用異步FIFO同步數(shù)據(jù)的時鐘域,在這個工程中,讀寫會持續(xù)進行,雖然讀時鐘速率是寫時鐘速率的N倍,但是讀使能N個讀時鐘周期才會拉高一次,所以兩邊速率可以說是一致;在寫入一半的數(shù)據(jù)后,讀過程也開始了,兩邊一讀一寫,F(xiàn)IFO內(nèi)部的數(shù)據(jù)量不增不減。
在仿真的過程中,我遇到了下圖的仿真警告提示。
之所以說不是錯誤而是警告,是因為這個提示并沒有影響最終的結(jié)果。仿真依舊在運行,直到結(jié)束。
隨后搜集了一番資料,在參考資料1(AR34859)中,解決方案是對FIFO內(nèi)部的Block RAM,在雙端口模式下,使用WRITE_FIRST或NO_CHANGE模式;
在資料2(Xilinx Memeory Resource pdf)的17頁,介紹了Block RAM寫模式,幾種模式中,區(qū)別主要在
- WRITE_FIRST: 寫入的數(shù)據(jù)會馬上出現(xiàn)在數(shù)據(jù)輸出端口
- READ_FIRST: 寫入數(shù)據(jù)的同時,數(shù)據(jù)輸出端口的數(shù)據(jù)還是該地址保存的前一個數(shù)據(jù)
- NO_CHANGE: 在寫入數(shù)據(jù)的時候,數(shù)據(jù)輸出端口的數(shù)據(jù)會一直保持前一次讀出的數(shù)據(jù)不變。
最后,官方給出了避免Conflict的建議。雖然,F(xiàn)IFO內(nèi)部確實使用了Block RAM,但Xilinx對其加密了,無法看到內(nèi)部的實現(xiàn)細節(jié);官方應(yīng)該不至于在FIFO Block RAM的設(shè)置上有這種錯誤,感覺問題并不是出現(xiàn)在這。
把FIFO單獨拿出來做仿真測試時,卻怎么也無法復(fù)原這個BUG。于是找到參考資料3(FIFO IP核手冊),在Reset相關(guān)章節(jié)發(fā)現(xiàn)了一點玄機。
FIFO Asynchronous Reset Timing Without Safety Circuit
在異步FIFO里,只能選擇異步復(fù)位,而FIFO內(nèi)部會把輸入的異步復(fù)位信號同步到各自的時鐘域;根據(jù)上圖,復(fù)位信號拉低后,還是有一段時間不能對FIFO有讀寫操作,那么怎么知道是哪段時間呢。IP核的設(shè)置里面,可以設(shè)置在復(fù)位狀態(tài)下,F(xiàn)ULL的輸出狀態(tài),設(shè)置為1,這樣就可以根據(jù)FULL防止寫入,復(fù)位后EMPTY為1,也可以防止讀取。
而在我對FIFO的操作中,我好心的把異步復(fù)位信號同步到RD時鐘域下,然后輸入到FIFO的RST端口,但是卻沒有注意到這個地方。
我取消了異步復(fù)位信號的同步,直接輸入到FIFO的RST,復(fù)位與寫使能之間的時間隔得足夠長,警告果然消失了。
這里,再介紹另一種方法,選中上圖的Enable Safety Circuit,在Safety Circuit啟用下,時序圖又變成這樣:
FIFO Asynchronous Reset Timing With Safety Circuit
在復(fù)位后,需要等待WR_RST_BUSY從1到0后,才能進行其他的操作(包括復(fù)位和寫);同理,讀取數(shù)據(jù)也需要等待RD_RST_BUSY從1到0。
此外,Enable Safety Circuit會同步FIFO內(nèi)部的BRAM輸入信號和輸出信號,具體可以看看參考資料4(AR42571);文檔也提到了,復(fù)位信號最好保持MAX(3, C_SYNCHRONIZER_STAGE)個慢時鐘周期,兩次復(fù)位中間要間隔6個慢時鐘周期。
-
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
26514 -
RAM
+關(guān)注
關(guān)注
8文章
1368瀏覽量
114669 -
FIFO存儲
+關(guān)注
關(guān)注
0文章
103瀏覽量
5970 -
RST
+關(guān)注
關(guān)注
0文章
31瀏覽量
7396 -
BRAM
+關(guān)注
關(guān)注
0文章
41瀏覽量
10963
發(fā)布評論請先 登錄
相關(guān)推薦
評論