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