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