嵌入式實時圖像處理系統(tǒng)中SDRAM控制器的實現(xiàn)
SDRAM作為大容量、高速度、低價格、低功耗的存儲器件,在嵌入式實時圖像處理系統(tǒng)中具有很高的應(yīng)用價值,但其控制機制復(fù)雜,因此需要設(shè)計控制器,以簡化系統(tǒng)對SDRAM的訪問。雖然目前許多微處理器及DSP都提供了與SDRAM的直接接口,但這種通用控制器的執(zhí)行效率很低,難以滿足實時系統(tǒng)對速度的要求。鑒于此,介紹一種基于FPGA設(shè)計而實現(xiàn)高效SDRAM控制器的方案。結(jié)合實際系統(tǒng),該方案將SDRAM配置為全頁突發(fā)模式,并采用異步FIFO作為FPGA與SDRAM間的數(shù)據(jù)緩沖器。分析表明,全頁突發(fā)操作模式能夠很好地發(fā)揮SDRAM高速讀寫的性能;同時,設(shè)計成乒乓操作結(jié)構(gòu)的異步FIFO,在保證數(shù)據(jù)連續(xù)性的同時,更能降低低速前端對高速SDRAM訪問的影響。
1 SDRAM簡介
1.1 SDRAM的特點
相對于其他存儲器件,SDRAM具備以下特性。
(1)上電后必須通過一個初始化進程配置模式寄存器的值,以決定SDRAM的工作模式;
(2)基于三極管和電容的存儲結(jié)構(gòu)SDRAM決定了必須對其定時執(zhí)行刷新操作,以免數(shù)據(jù)丟失;
(3)訪問SDRAM時,先由Active命令激活要讀寫的Bank及行并鎖存行址,然后在Read/Write命令有效時鎖存列址。當(dāng)訪問當(dāng)前Bank的其他行時,須先使用Pre-charge命令關(guān)閉當(dāng)前行;
(4)SDRAM的內(nèi)部操作由命令控制,CS_N,RAS_N,CAS_N和WE_N在時鐘上升沿的狀態(tài)決定了具體的操作,Bank及行列地址線在部分操作中作為輔助參數(shù)輸入。
1.2 全頁(Full-page)模式突發(fā)操作
進行大量數(shù)據(jù)讀寫時,全頁突發(fā)模式是充分利用SDRAM性能,提高讀寫速度的良好選擇。
激活Bank的某一行后即可對該行進行讀寫操作。
寫入數(shù)據(jù)在發(fā)出寫命令的當(dāng)前時鐘周期即可有效,因此寫操作可以在單周期內(nèi)完成;而讀出數(shù)據(jù)將在發(fā)出讀命令之后CL(CAS Latency)時鐘周期才能輸出到總線,即隨機讀取單個數(shù)據(jù)至少需要1+CL時鐘周期。可見,隨機讀操作會大大降低系統(tǒng)效率。若采用全頁突發(fā)方式,對于列寬度為n的SDRAM存儲器,整頁輸出所需的總周期數(shù)為2n+CL,平均單個數(shù)據(jù)輸出所需周期為(2n+CL)/2n△1,由此讀操作延遲對系統(tǒng)效率的影響可降至最低。
2 SDRAM控制器設(shè)計
實際的實時紅外熱成像系統(tǒng)采用了ISSI公司生產(chǎn)的型號為IS42S16160B的SDRAM作為數(shù)據(jù)緩存,其存儲單元組織結(jié)構(gòu)為4 Bank×8 192行×512列×16位。
SDRAM控制器主要由時鐘鎖相環(huán)模塊、初始化模塊、刷新計數(shù)模塊、數(shù)據(jù)通路模塊、輸入/輸出FIFO模塊、FIFO接口模塊和主控制器模塊組成,如圖1所示。
在該SDRAM控制器中,片上時鐘鎖相環(huán)模塊的作用是將輸入時鐘倍頻為所需要的時鐘,并根據(jù)電路板布局進行移相,以保證在時鐘上升沿準(zhǔn)確采樣命令及數(shù)據(jù)。初始化模塊負(fù)責(zé)產(chǎn)生規(guī)定了時間、順序和個數(shù)的控制命令對SDRAM進行配置,并在進程結(jié)束后發(fā)出ini_end信號,以啟動主控制器。刷新控制模塊的作用是每隔最長7.812 5μs發(fā)出刷新請求信號ref_req,并接收主控制器發(fā)出的ref_ack信號重置刷新計數(shù)器。數(shù)據(jù)通路模塊用于控制數(shù)據(jù)的有效輸入/輸出。
由于系統(tǒng)對控制器中讀寫操作的數(shù)據(jù)連續(xù)性要求很高,且讀寫速度比較低,而控制器對SDRAM中讀寫操作的數(shù)據(jù)連續(xù)性并無要求,且讀寫速度很高,因此需要使用異步FIFO作為輸入/輸出緩存。輸入/輸出FIFO的數(shù)據(jù)寬度為16 b,深度可視系統(tǒng)需要而定,但應(yīng)大于一次讀寫的數(shù)據(jù)長度LENGTH。另外,為配合SDRAM的全頁突發(fā)模式,并充分發(fā)揮SDRAM高速讀寫的特點,F(xiàn)IFO采用了乒乓操作的流水線結(jié)構(gòu)?,F(xiàn)以輸入FIFO為例,當(dāng)某個輸入FIFO寫滿LENGTH數(shù)據(jù)時,主控制器從該輸入FIFO讀出數(shù)據(jù)寫入SDRAM,同時系統(tǒng)向另一個輸入FIFO寫入數(shù)據(jù)。
FIFO接口模塊的主要信號如圖2所示。其作用是將FIFO的狀態(tài)信號轉(zhuǎn)換為主控制器的讀寫請求信號,并控制切換輸入/輸出的兩個FIFO。以向SDRAM寫入數(shù)據(jù)為例,若某個輸入FIFO的寫人數(shù)據(jù)個數(shù)標(biāo)志信號in_wr_used與LENGTH相等,則向主控制器發(fā)出寫SDRAM請求,并將該輸入FIFO中的LENGTH數(shù)據(jù)一次寫入SDRAM,同時控制系統(tǒng)向另一個輸入FIFO寫入數(shù)據(jù)。
SDRAM支持多種工作模式,將其全部包含在主控制器狀態(tài)機中會大大增加設(shè)計難度,并降低運行速度。考慮到一些模式在實時圖像處理系統(tǒng)中并不需要,所以對SDRAM主控制器韻狀態(tài)進行了簡化,如圖3所示。
評論