[FPGA系列] SDRAM项目实战总结
? ? ? ? 這個項目里面包含了大量的知識點,內容比較復雜,為了方便后續復習,對其中的內容進行一個大概的梳理。
一、項目介紹
????????設計并實現一個 SDRAM 數據讀寫控制器,使用 PC 機通過串口向 SDRAM 寫入 10 字節數據,并將寫入的 10 字節數據讀出,通過串口回傳至 PC 機,在串口助手上位機上打印顯示回傳數據。
? ? ? ? 項目中用到的SDRAM型號為W9825G6KH , 存 儲 容 量 為 256Mbit(32MByte),地址位寬 13 位,數據位寬 16 位。
二、思路整理
? ? ? ? 這個項目大大小小調用了13個模塊,其模塊框圖如下所示。
? ? ? ? ?根據硬件設計的思路,其程序流向如下圖所示。
? ? ? ? ?端口數和線路連接雖然很多,但只要弄清楚每個端口的作用和每個模塊的作用,整個項目就會清晰很多。
? ? ? ? ?整體大致可以分為三個模塊:
? ? ? ? ①sdram_ctrl:這個模塊的作用是將對SDRAM最底層的讀寫、刷新、初始化等操作進行了封裝,留出基本的地址線、數據線、命令線等,方便后續直接對SDRAM進行讀寫操作。
? ? ? ? ②sdram_top:這個模塊是在sdram_ctrl基礎上,加入了fifo模塊,并進行封裝,整個模塊具有了基本的緩沖功能,方便后續跨時鐘域對SDRAM進行讀寫操作。
? ? ? ? ③uart_sdram:這個是最頂層的模塊,在本項目中,我們使用了uart通信實現PC與SDRAM間數據交互,加入了fifo_read模塊,對SDRAM讀出的數據進行緩存,然后提供給uart_tx模塊將數據輸出。
? ? ? ? 其他模塊,比如對SDRAM進行基本操作的模塊,可以根據SDRAM數據手冊進行編寫,從下至上,步步為營,每個模塊仿真沒有問題后,一步步封裝引用,到最后水到渠成。
三、項目總結(細節知識整理)
????????1、SDRAM的自動刷新操作
? ? ? ? SDRAM的存儲體是利用電容能夠保持電荷以及可充放電的特性制成,電容所存儲的電荷會隨時間慢慢釋放,這就需要不斷刷新為電容充電,以保證存儲數據可靠性。
????????SDRAM的刷新操作是周期性的,在兩次刷新的間隔可以進行數據的相關操作,所以我們需要計算出執行刷新操作的時間間隔。目前國際公認的標準是,存儲體中電容的數據有效保存期上限是64ms,也就是說每一行刷新的循環周期最大為 64ms,那么刷新速度就是:行數/64ms。
? ? ? ? 刷新命令一次對一行有效,刷新間隔也是隨總行數而變化,由此可知,刷新周期計算公式為:T = 64ms \ 總行數?。要注意的是,這里算出的刷新周期是允許的最大周期,一般設置的比這個周期小一點更穩妥。
????????2、仲裁模塊
? ? ? ? 在項目中,我們共涉及到SDRAM的4種操作方式,初始化操作、自動刷新操作、數據寫操作和數據讀操作,其中初始化操作優先級最高,SDRAM只有經過初始化操作后,才可被正常使用。SDRAM初始化后,自動刷新操作周期執行,而讀和寫操作不定時執行,為了協調好這些模塊的運行,我們使用仲裁模塊對其進行處理。
? ? ? ? 使用狀態機來表示仲裁模塊的執行:
?????????由圖可知, SDRAM 上電后處于初始狀態(IDLE),初始化完成后,狀態跳轉到仲裁狀態(ARBIT);當狀態機處于仲裁狀態時,若自動刷新請求、讀請求、寫請求中的任意一路請求有效,且其他兩路請求信號無效,狀態跳轉到有效請求信號對應狀態,對應操作完成后,對應結束信號有效,狀態跳回到仲裁狀態,等待下一次請求信號。
????????若多路請求信號同時有效,優先執行優先級較高的操作,默認優先級為自動刷新操作>數據寫操作>數據讀操作。
????????各路請求信號只有在仲裁狀態才會被響應,這就保證某一操作正在執行時,不會被新的請求信號打斷。
? ? ? ? 3、數據流銜接
? ? ? ? 項目能夠順利實現,很重要的一點就是要處理好數據流之間的銜接關系,也就是“打拍打地恰到好處”。比如項目中用到了FIFO模塊,我們使用的FIFO 讀模式為normal模式,這樣從FIFO中讀取數據會有“延一拍”的效果,在使能信號到達后,還要再來一拍數據才會輸出,而寫模式卻沒有滯后,所以要理清每個端口數據流接收與發送之間的時間關系,設計時才會成竹在胸。
參考資料:《FPGA Verilog開發實戰指南——基于Altera EP4CE10》
總結
以上是生活随笔為你收集整理的[FPGA系列] SDRAM项目实战总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴Java开发手册下载地址
- 下一篇: 小马哥-----高仿米4拆机 刷机主板多