對altera的FIFO讀寫操作深入研究


支持原創,如需轉載請注明出處。  

  由於本人一直使用的是A家的芯片,所以本次針對FIFO的讀寫操作也僅僅是在調用Quartus ii上的IP核上進行。

  針對FIFO有兩種使用方式,同步FIFO和異步FIFO,同步的不想多說。以下所有操作均為異步FIFO即DCFIFO。

  1. 針對FIFO讀操作的兩種不同設計做一下解釋:Normal mode 和Show-ahead mode,前者為先來讀請求信號,接下來一個時鍾才將q端數據讀出。后者來讀請求信號,這即將q讀數據讀出。

IP核設置如圖(1)

 

兩種時序操作如下圖:

Normal mode 

Normal mode:將讀信號rdreq置高后,下個時鍾才能將q端數據讀出。

Show-ahead mode

Show-ahead mode:將讀信號rdreq置高后,該時鍾才能將q端數據讀出,即數據已經在q端口准備好,讀請求一到數據即讀出。

  2.針對rdusedw和rdempty的使用。

   一般讀取操作判斷FIFO中數據都是根據rdusedw和rdempty來決定是否開啟讀操作的。當你讀完FIFO內數據的同時,讀端口狀態並不會馬上響應,即rdusedw不會在緊接的時鍾為0,rdempty不會高電平有效。這是由於FIFO有讀保護邏輯,所以更新才會慢上兩拍,如果此時再更具該信號判斷FIFO是否可讀必然會處錯誤,所以解決辦法延時一個時鍾之后再判斷reusedw是否大於0來決定能否開啟下一讀取操作(有先決條件)。

前方高能預警:上述操作針對的情況是讀時鍾 rdclk >= 2wrclk,如果不滿足條件就會導致FIFO滿。

因為通過判斷reusedw大於0,開啟讀操作,之后再延時1個時鍾等待reusedw變化,本次讀操作需要兩個時鍾才完成,若不滿足 rdclk >= 2wrclk必然會導致FIFO滿狀況的出現。

針對 wrclk < rdclk < 2wrclk情況,一般操作是可以讓FIFO中緩存一定數量的數據,之后在開始進行讀取操作,這樣FIFO中的數據一段一段的讀出就不會有問題。

問題升級:前提是讀操作和寫操作沒有任何關系:針對wrclk < rdclk < 2wrclk,FIFO深度為1024情況,數據一致在想FIFO中寫,要求保持FIFO中一直有256個數據存在,該過程如何判斷和如何操作。

解決辦法還沒想到,待續!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM