LATTICE 存儲之FIFO的使用


 坑,,以后填

 對於Lattice 的  FIFO 存儲器分為兩種,見下圖:

         

       這兩個的主要區別是一個后面加DC一個不加,那這個DC是什么意思呢??DC這里是Dual  Clock的意思,也就是雙時鍾的意思,那意思就很明顯了,另一個是單時鍾;更本質的可以說單時鍾是同步FIFO的意思,雙時鍾是異步FIFO的意思。

   同步FIFO:

       一、先看datasheet  

               顯示端口說明: 

                           

          沒有輸出寄存器時的寫操作,可以看出,寫操作是在clk的上升沿的時候將 寫請求使能有效且寫數據准備好即可。寫入數據之后empty就會被拉低。

                 

                         

                  上圖顯示寫滿之后再寫數據就無效了。

                讀時序: 

                      

                          上圖可以看出,在寫使能有效的一個時鍾周期之后數據才送出Q端口。

                           

                                            當最后一次讀取數據的時候,empty信號會被拉高,然后一個時鍾周期之后數據從Q端口送出。

                        在輸出端口使能了輸出寄存器之后,對FIFO的寫操作沒有影響,只是對讀操作有影響,具體影響是:在原來的基礎上又延時了一個時鍾周期。

                            

                          最后需要注意的是: 

                                   

             這個操作和生成FIFO的設置有關系。

               現在就看FIFO生成的時候的設置吧:

                  首先是名字和路徑以及語言的選擇,直接跳過。

                  打開后界面如下:

                          

            界面設置也很簡單, 先是FIFO的類型,默認即可;地址深度就是存多少個數據,這里深度只能是2的冪即2的n次方;數據寬度可以任意選擇,默認輸入和輸出的深度寬度是一樣的。Enable output reg選項就是使能輸出寄存器選項,選擇之后就是輸出端數據延時兩個時鍾周期輸出。

      Controlled by RdEN 選擇時候,讀取的時候時序圖就是上面最后一個時序圖的時候。

          設置輸入滿,輸出空的閾值;設置顯示內部數據個數。

          最后選擇左下端的Import IPX to Diamond project 選項之后,生成的FIFO文件會直接加入到工程里面去。

         同步FIFO就到這里。 

   異步FIFO

       異步FIFO與同步FIFO有所不同,

           先是端口:

            

       可以看出它有兩個時鍾,但是本質其實和同步FIFO相似,可以看做為兩個同步FIFO,在不同的時鍾驅動下一個只進行讀操作,一個只進行寫操作,讀寫單獨操作互補影響,這里不做時序圖的介紹和記錄了,直接看生成時候的設置界面。

               

            可以看到  上圖兩個紅色方塊內是兩個不同之處,上面是讀和寫操作都要設置FIFO的存儲深度和數據寬度。   而且深度要是2的冪。

最重要的是要確保輸入的深度乘以數據寬度要等於輸出的 深度乘以數據的寬度。否則生成不了FIFO。

             下面方框內是數據的計數,讀寫數據分別計數。在寫數據的計數增加之后,讀數據的計數也會在讀時鍾作用下相應的增加。

    


免責聲明!

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



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