多端口SDRAM控制器的設計與實(shí)現
將數據采集模塊得到的兩組數據同時(shí)存貯到各自的寫(xiě)緩存FIFO 里,只要寫(xiě)緩存里的數據達到了SDRAM 每頁(yè)的數據大小,就產(chǎn)生對SDRAM 的寫(xiě)請求,因為每個(gè)緩存的大小是兩頁(yè)SDRAM ,所以此時(shí)數據采集模塊還可以繼續存數據。類(lèi)似的,VGA 所顯示的數據也是從兩個(gè)讀緩存 FIFO 得到的,只要讀緩存里的數據小于SDRAM 每頁(yè)的數據,就產(chǎn)生對SDRAM 的讀請求,這樣每個(gè)緩存里的兩頁(yè)輪流操作。關(guān)鍵代碼如下:
2.2 地址生成模塊:
該模塊用來(lái)自動(dòng)生成對SDRAM進(jìn)行存取操作的Bank地址,起始地址和突發(fā)長(cháng)度。由于30位的像素數據等分各存入兩個(gè)Bank里,所以在Bank里它們的對應地址是相同變化的,這樣存取數據時(shí),對兩個(gè)Bank的讀寫(xiě)地址的控制就是統一增減的,降低了使用一個(gè)Bank時(shí)讀寫(xiě)控制的繁雜性。
2.3 自動(dòng)刷新模塊:
SDRAM需要不斷的刷新操作,同一行的存儲單元每隔64m s 需要刷新一次,對于本芯片的一個(gè)Bank 中的4096 行存儲單元,則每15. 625us 就需要發(fā)出一個(gè)刷新命令,由于本設計采取緩存的辦法,所以應該按讀寫(xiě)SDRAM到緩存FIFO的時(shí)間為準來(lái)設計刷新計數器的初始值。以頁(yè)模式進(jìn)行讀寫(xiě),讀數據的整個(gè)時(shí)間過(guò)程是tRCD+ tCL+mLENGTH ,寫(xiě)數據的整個(gè)時(shí)間過(guò)程是tRCD+mLENGTH ,其中tRCD是激活命令到讀或寫(xiě)命令期間的延遲,tCL是讀命令發(fā)出后到第一個(gè)有效數據之間的間隔,mLENGTH 是SDRAM 的頁(yè)長(cháng),本設計中tRCD =3, tCL=3,mLength=256 。因此刷新計數器的初始值設置為2X(256+3+3)+ 2X(256+3)=1042 ,經(jīng)計算遠遠小于所要求的刷新周期,初值設置合理。開(kāi)始工作后,每當刷新計數器值減為0, 便會(huì )發(fā)出刷新命令,保證SDRAM內的數據不丟失,自動(dòng)刷新之后直接進(jìn)行預充電來(lái)關(guān)閉工作行。
2.4 命令產(chǎn)生模塊:該模塊主要負責命令仲裁、命令生成以及時(shí)序控制等。SDRAM 優(yōu)先級仲裁算法通常有兩種:一種是固定優(yōu)先級算法,另一種是循環(huán)優(yōu)先級算法。本文設計的SDRAM 控制器是應
用在實(shí)時(shí)圖像處理系統中的,對數據處理效率要求很高,因此設計中選用固定優(yōu)先級算法。本文規定優(yōu)先級如下:初始化請求>刷新請求>讀請求>寫(xiě)請求>其他。
評論