intel-FPGA的片內存儲器問題


  FPGA的片內有很多的存儲器資源,可以配置成單端口的ROM、RAM和雙端口的ROM、RAM,以及移位寄存器和FIFO等。在學習過程中,筆者遇到過幾個小問題,總結如下:

        片內是不是有ROM或者RAM?

        個人觀點:片內沒有ROM或者RAM的,有的只是一些功能比較強大的存儲器塊,可以通過配置變成我們想要的功能。例如將RAM的wren端子和data端子直接接地,那么就變成了ROM。片內有的是一些M9K、M4K等等,M9K代表容量為9Kbits的存儲器。

        選擇組成存儲器的類型以及存儲器塊的最大深度?

圖1

  

個人觀點:對於這兩個的話,建議選擇“AUTO”。下圖是官方給出的建議:

圖2

圖3

  對於RAM和ROM模式,q輸出段是否應該被寄存?

        個人觀點:其實寄存也好,不被寄存也好,結果只是輸出的是不是會延遲一個時鍾周期。但是筆者建議q應該被寄存一下。在RAM或者ROM中,地址被寄存,而最終的輸出是用的組合邏輯進行輸出,如果q被引用時也經過了大量的邏輯,那么存儲器中的邏輯和被引用時的邏輯就會組成一個比較大的邏輯,整個設計的速度就會變慢。

 

        對於RAM和ROM模式,是否應該引出rden信號?

        個人觀點:之前我在學習中,rden從來沒有引出過,因為自己的設計自己知道,什么時候去讀,只要正確的時序就可以了,近期接觸到官方文檔后,官方推薦引出rden信號,用於降低功耗。

圖4

  在RAM模式中,如果出現對於同一個地址進行讀寫會出現什么情況?

  

圖5

  

  個人觀點:之前學習中,這個界面幾乎從來沒有關系過,直接都是略過,保持默認值不變。近期考慮這個問題,查看官方手冊,此項可以選擇New Data、Old Data和Donot Care,默認值是New Data。

        這個問題可以分為兩個方向考慮:

        同一個端口同時讀寫,那么時序如下:

圖6

圖7

  對於不同的端口來說,只有Old DATA,don’t care就不關心了。

圖8

  對於初始化文件.hex或者.mif文件,當存儲器發生寫入時,文件內容沒有發生改變?

        個人觀點:.hex或者.mif文件並沒有被下板,只是綜合器在綜合時,將文件中的內容讀取出來,配置給存儲器而已,本身文件和下板沒有關系,所以在仿真也好,或者下板也好,對於存儲器的寫入並不會改變文件中的值。對於經常使用.txt初始化的設計者,結果也是一樣的,.txt的內容並不會被改變。

 

        使用reg [n-1:0] reg_name [m-1:0]定義存儲器。

        個人觀點:此種方法是可以定義存儲器的,但是經過筆者實際測試,不同的深度和位寬會影響綜合器選擇存儲器塊還是LE構成,並且會綜合器在綜合過程中會產生很多的警告。筆者在公司研發,使用此種方式進行存儲器定義使用,被領導批評過。具體的原因有待發掘,在此,筆者建議設計者在設計時,如果要用到存儲器,利用IPCore的插件向導完成還是比較好的。

筆者將上文中所用的存儲器官方資料都放到了,QQ群:173560979群文件中,如果有需要的可以下載。

筆者水平有限,如果設計中,有什么不妥的地方,懇請大佬們指出來。

  歡迎加好友探討QQ(奮斗的小孩郝旭帥):746833924,QQ群:173560979。


免責聲明!

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



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