1.1?問題背景
在FIFO的使用過程中不可避免的在某些應(yīng)用下必須使用reset信號,將當(dāng)前FIFO中數(shù)據(jù)清空,但是我們現(xiàn)在調(diào)用的xilinx的FIFO核在復(fù)位條件不滿足時會偶現(xiàn)FIFO進入復(fù)位狀態(tài)無法恢復(fù),必須重新斷上電才能恢復(fù)的問題,所以在使用FIFO時我們必須嚴(yán)格的按照datasheet上要求執(zhí)行,以免出現(xiàn)異常。
1.2?IP核形式FIFO異步復(fù)位要求
IP核形式FIFO復(fù)位主要參考pg057-fifo-generator.pdf文檔中說明。詳見第3章RESET段描述。
其中reset要求如圖1所示:
圖1 FIFO Asynchronous Reset Socket Timing
結(jié)合文檔詳細(xì)說明,reset主要符合以下五點:
- 如果不必要,則建議不例化reset信號。
- 復(fù)位過程中讀寫時鐘必須穩(wěn)定,若過程中出現(xiàn)時鐘不穩(wěn)定,則等時鐘穩(wěn)定了再次進行一次復(fù)位。
- 復(fù)位信號保持時間長度必須大于3個周期的慢時鐘長度。
- 復(fù)位過程中不允許有讀寫操作,即reset信號和wr_rst_busy信號任意一個為高的時候wr_en和rd_en信號必須為低。
- 第2次復(fù)位在有wr_rst_busy指示信號時應(yīng)等wr_rst_busy信號拉低,若無該信號則兩次復(fù)位之間至少相隔6個周期的慢時鐘長度。
1.3?XMP形式FIFO異步復(fù)位要求
XMP形式FIFO復(fù)位主要參考ug974-vivado-ultrascale-libraries.pdf文檔中說明。詳見第2章XMP_FIFO_ASYNC段描述.
其中reset要求如圖2所示:
圖2 XPM_FIFO RESET Behavior
結(jié)合文檔詳細(xì)說明,reset主要符合以下四點:
- 復(fù)位信號必須與寫時鐘同步,復(fù)位有效時讀寫時鐘必須都穩(wěn)定。
- 寫復(fù)位過程中不允許有寫信號;即reset信號、wr_rst_busy信號任意一個為高時不允許有wr_en信號為高
- 讀復(fù)位過程中不允許有讀信號;即rd_rst_busy信號拉高時不允許rd_en信號為高
- 第2次復(fù)位必須等第一次復(fù)位完成后才可進行,即wr_rst_busy信號拉低后才可以進行第二次復(fù)位。
2?總結(jié)
建議復(fù)位標(biāo)志同時滿足IP核和XMP的要求,方便代碼移植和修改,但由于客觀原因不能同時滿足,則至少保證符合當(dāng)前使用FIFO類型的要求。
若可以同時滿足,則按照如下進行:
- 復(fù)位信號必須與寫時鐘同步,復(fù)位有效時讀寫時鐘必須同時穩(wěn)定
- 復(fù)位信號時間長度必須大于慢時鐘的3個時鐘周期長度
- 在reset、wr_rst_busy、rd_rst_busy三個信號任意一個為高時,不允許有wr_en或rd_en拉高。
- 第2次復(fù)位必須等上一次復(fù)位完成后才可使能,及必須等到wr_rst_busy、rd_rst_busy信號都拉低以后才能開啟第二次復(fù)位流程。