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