基于FPGA的高速SDRAM控制器的視頻應用

發(fā)布時(shí)間:2010-8-13 11:37    發(fā)布者:lavida
關(guān)鍵詞: FPGA , SDRAM , 控制器 , 視頻
SDRAM(同步動(dòng)態(tài)存儲器)是一種應用廣泛的存儲器,具有容量大、數據讀寫(xiě)速度快、價(jià)格低廉等優(yōu)點(diǎn),特別適合那些需要海量存儲器的應用領(lǐng)域,例如視頻方面。  

這里有一個(gè)視頻項目要求將非標準的ITU-R BT.656視頻格式的數據轉換成VGA格式,直接用于顯示器顯示。如圖1,輸入的視頻格式是非標準的ITU-R BT.656格式,圖像分辨率是1280×1024,幀速是15幀/秒,每一個(gè)像素點(diǎn)是24bit;輸出的視頻格式是VGA格式,圖像分辨率是1280× 1024,幀速是60幀/秒,每一個(gè)像素點(diǎn)還是24bit。  


  
本項目使用SDRAM來(lái)存儲視頻數據。在設計中,要求能夠將一幅完整的圖像(1280×1024×24bit)存儲在SDRAM中。并且要求讀寫(xiě)突發(fā)長(cháng)度是1280,即一行視頻數據(1280×24bit)。SDRAM突發(fā)長(cháng)度最高只能達到256(即SDRAM芯片的一列的長(cháng)度),為此需要使用FPGA專(zhuān)門(mén)實(shí)現一個(gè)SDRAM控制器。在控制器的設計中通過(guò)采用切換bank操作、自動(dòng)預沖、集中刷新等技術(shù)實(shí)現了這種超長(cháng)突發(fā)長(cháng)度的數據讀寫(xiě)。同樣通過(guò)適當地修改此控制器,可以實(shí)現任意突發(fā)長(cháng)度的數據讀寫(xiě)。  

1 SDRAM基本特性  

本設計中采用的SDRAM芯片的型號是MT48LC2M3282-7。SDRAM的主要操作包括初始化、讀寫(xiě)和刷新操作。SDRAM的初始化操作過(guò)程如下:上電后等待100 μs;然后依次完成預沖,兩次刷新操作;接下來(lái)就可以配置寄存器了。至此整個(gè)初始化工作結束,SDRAM進(jìn)入正常工作狀態(tài)。SDRAM進(jìn)入正常工作狀態(tài)后,就可以根據命令來(lái)工作。這些命令包括:預沖(Precharge)和自動(dòng)預沖(AutoPrecharge)、激活(Active)、讀 (read)、寫(xiě)(write)、自動(dòng)刷新(Auto Refresh)和自刷新(Self Refresh)等。根據本設計的需要,這里詳細介紹設計中相關(guān)的命令:自動(dòng)預沖、激活、讀寫(xiě)、自動(dòng)刷新。自動(dòng)預沖命令是SDRAM芯片在一次突發(fā)讀/寫(xiě)結束后自動(dòng)發(fā)出預沖命令,將讀寫(xiě)的行關(guān)閉。它與預沖命令有著(zhù)相同的功能,但是發(fā)起命令的方式不一樣。預沖命令是SDRAM控制器發(fā)起的命令,它需要占據 SDRAM的總線(xiàn),在這段時(shí)間不能讀寫(xiě)數據。而自動(dòng)預沖命令是SDRAM自動(dòng)的行為,不需要占據SDRAM的總線(xiàn)。這個(gè)命令是在發(fā)起讀寫(xiě)命令時(shí)設置的。  

激活命令是對SDRAM的某一行激活,這樣才能對這一行數據發(fā)起讀寫(xiě)操作。讀寫(xiě)命令是對某一激活的行進(jìn)行突發(fā)讀寫(xiě)操作。具體的突發(fā)讀寫(xiě)的數據長(cháng)度在初始化時(shí)配置寄存器時(shí)設置了。  

刷新命令是對SDRAM內的數據完成再生的操作,因為SDRAM采用電容存儲數據,而電容存在漏電的現象,因此需要隔一段時(shí)間對電容作一次刷新(即重新充電),一般來(lái)說(shuō)要求64ms內將SDRAM的所有行都刷一遍。SDRAM有兩種刷新命令:自動(dòng)刷新和自刷新。自刷新是在芯片處于低功耗狀態(tài)下時(shí)才使用的方式,芯片內部自動(dòng)完成刷新操作。自動(dòng)刷新是控制器發(fā)起的刷新操作,它必須在SDRAM沒(méi)有激活行時(shí)才能進(jìn)行刷新操作,而且需要占用一定的時(shí)間(大約 60~70ns)?刂破骺梢愿鶕枰x擇在何時(shí)刷新,即定時(shí)刷新,或集中刷新。定時(shí)刷新是隔一段時(shí)間就刷新一次;集中刷新是在某一段空閑時(shí)間內連續刷新若干次。這個(gè)只要保證在64 ms內將所有的行都刷一遍即可,具體的刷新方式可以根據自己的應用需要來(lái)設計。        
                                                               
2 SDRAM控制器的設計  

2.1 SDRAM控制器的設計思路  

SDRAM芯片完成一次讀寫(xiě)操作由三個(gè)命令組成:激活、讀/寫(xiě)、預沖。讀寫(xiě)數據的突發(fā)長(cháng)度往往是有限制的,在SDRAM芯片本身提供的突發(fā)長(cháng)度最大只能達到一行的容量(256,即全頁(yè)突發(fā)模式)。這樣當一次讀寫(xiě)突發(fā)長(cháng)度結束后,如果需要發(fā)起下一次讀寫(xiě),就需要發(fā)預沖命令結束這一行,然后發(fā)激活命令開(kāi)啟下一行。這樣才能開(kāi)始寫(xiě)下一次數據。因此,如果想要連續的數據讀寫(xiě),就必須想辦法節省激活和預沖命令。  
激活命令通過(guò)切換Bank操作來(lái)完成。SDRAM有4個(gè)獨立的bank,每一個(gè)bank可以同時(shí)允許有一行激活,彼此并不會(huì )相互干擾。這樣的話(huà),在同一時(shí)刻最多可以有4個(gè)行處于激活狀態(tài)。這就為節約激活時(shí)間提供了解決方案:在突發(fā)讀寫(xiě)一個(gè)bank下的某一行時(shí),可以在突發(fā)長(cháng)度結束之前提前激活另一個(gè) bank下的某一行。這樣當這個(gè)突發(fā)長(cháng)度結束時(shí)就可以直接讀寫(xiě)另一bank中被激活的行。預沖可以采用自動(dòng)預沖方式來(lái)完成,不需要額外的預沖命令。  

通過(guò)上述兩種操作方式可以完全實(shí)現超長(cháng)突發(fā)長(cháng)度的數據讀寫(xiě),本設計將SDRAM設置成突發(fā)長(cháng)度為8,突發(fā)長(cháng)度結束后采用自動(dòng)預沖方式完成此行的預沖操作,具體設想如下:  

在寫(xiě)SDRAM時(shí),先激活Bank0的第一行;發(fā)出帶自動(dòng)預沖模式的寫(xiě)操作;數據開(kāi)始寫(xiě)入這一行內;一段時(shí)間后(在突發(fā)長(cháng)度結束之前)將Bank1的第一行激活;在Bank0的寫(xiě)突發(fā)長(cháng)度結束的同時(shí),發(fā)出寫(xiě)Bank1的命令,這樣接下來(lái)的數據就寫(xiě)入Bank1的第一行中;而由于在寫(xiě)SDRAM的Bank0 時(shí)設置成自動(dòng)預沖模式,所以SDRAM會(huì )在Bank0的寫(xiě)操作結束后自動(dòng)預沖,經(jīng)過(guò)tRP(預沖時(shí)間)后,這一Bank自動(dòng)回到idle狀態(tài)。同樣 Bank1處于寫(xiě)突發(fā)長(cháng)度時(shí)將Bank2的第一行激活,在Bank1的寫(xiě)突發(fā)長(cháng)度結束的同時(shí)發(fā)出寫(xiě)Bank2的命令……如此四個(gè)bank輪流工作,將數據均勻地分配到4個(gè)bank中。   

對于這種超長(cháng)的數據突發(fā)讀寫(xiě),完成一次讀寫(xiě)操作所花費的時(shí)間比較多,例如讀寫(xiě)時(shí)鐘是108MHz時(shí),一次突發(fā)長(cháng)度是1280的寫(xiě)操作所花費的時(shí)間是11. 6 μs,即在這段時(shí)間內SDRAM的數據總線(xiàn)是不能被中斷的。因此采用集中刷新是最好的解決辦法。在突發(fā)讀寫(xiě)結束后,會(huì )有一段比較長(cháng)的空閑期(具體時(shí)間長(cháng)度根據視頻數據的視頻中行消隱數據個(gè)數和讀寫(xiě)時(shí)鐘決定),在這段時(shí)問(wèn)內可以集中連續發(fā)出多個(gè)刷新命令,只需要保證在64ms內總的刷新次數達到了要求即可。  

2.2 SDRAM控制器的實(shí)現  

本設計中將SDRAM控制器分成4個(gè)子模塊:sdr_master主控模塊、sdr_ctrl命令模塊、sdr_sig譯碼模塊、sdr_data數據通路模塊,見(jiàn)圖2。sdr_master主控模塊根據外部的讀寫(xiě)請求向sdr_ctrl命令模塊提供各種讀寫(xiě)控制信號;sdr_ctrl命令模塊內部的控制狀態(tài)機會(huì )依此發(fā)出各種SDRAM讀寫(xiě)控制命令;sdr_sig譯碼模塊會(huì )把sdr_ctrl輸出的控制命令譯碼成符合SDRAM接口的信號。此SDRAM 控制器的設計,最復雜的部分在于如何設計SDRAM的工作時(shí)序,即SDRAM何時(shí)激活,何時(shí)讀/寫(xiě),何時(shí)預沖,何時(shí)刷新。這些控制除了滿(mǎn)足SDRAM的工作特性外,還要滿(mǎn)足設計要求。因此,鑒于SDRAM控制的復雜性,一般都采用狀態(tài)機來(lái)控制。本設計中sdr_ctrl命令模塊包括兩個(gè)狀態(tài)機:初始化狀態(tài)機完成SDRAM的初始化;控制狀態(tài)機完成SDRAM的正常工作控制。下面分別詳述這兩個(gè)狀態(tài)機的設計。  


  
初始化狀態(tài)機的結構見(jiàn)圖3。系統在上電(復位)后,處于i NOP狀態(tài);當等待了100 μs后,狀態(tài)跳轉到i PRE,發(fā)出預沖命令;接著(zhù)跳轉到i tRP等待;經(jīng)過(guò)tRP時(shí)間后,狀態(tài)跳轉到i_AR1,發(fā)第一次刷新命令,然后在i_tRFC1等待tRFC時(shí)間后發(fā)第二次刷新命令,再等待tRFC;接下來(lái)轉到狀態(tài)i MRS,發(fā)裝載模式字命令,然后等待tMRD時(shí)間后初始化完成,進(jìn)入i_ready狀態(tài)。至此初始化完成,SDRAM芯片就可以正常工作了。  

  
控制狀態(tài)機的狀態(tài)跳變見(jiàn)圖4。此狀態(tài)機是為了滿(mǎn)足超長(cháng)數據的連讀或連寫(xiě)而特殊設計的。上電后處于c_idle狀態(tài),當初始化完成后,控制狀態(tài)機才能開(kāi)始正常工作。當外部要求進(jìn)行讀寫(xiě)操作時(shí),會(huì )正式地啟動(dòng)狀態(tài)機。此時(shí)狀態(tài)機跳變到c_ACT狀態(tài),使SDRAM控制器發(fā)出激活命令;接下來(lái)兩個(gè)狀態(tài) c_tRCD1、c_tRCD2是激活等待時(shí)間tRCD;然后狀態(tài)機根據外部是讀請求還是寫(xiě)請求,來(lái)決定下一個(gè)狀態(tài)是發(fā)讀命令還是寫(xiě)命令。下面以寫(xiě)數據為例進(jìn)行說(shuō)明,讀數據的工作過(guò)程是一樣的。                                                                        


  
當要求寫(xiě)SDRAM時(shí),控制狀態(tài)機的狀態(tài)由c_tRCD2跳變到c_WR狀態(tài),發(fā)出寫(xiě)命令。SDRAM控制器會(huì )在發(fā)寫(xiě)命令的同時(shí)將本次突發(fā)數據的第一個(gè)數據送到總線(xiàn)上,接著(zhù)是三個(gè)周期的狀態(tài):c_tDAL1、c_DAL2、c_tDAL3,之后回到c_idle狀態(tài)。這樣完成了寫(xiě)數據的一次循環(huán),剛好需要 8個(gè)周期。在回到c_idle狀態(tài)后即可啟動(dòng)下一次寫(xiě)數據傳輸,這時(shí)狀態(tài)機跳到c_ACT狀態(tài),發(fā)出激活另一個(gè)bank的某一行的命令,然后經(jīng)過(guò)兩個(gè)周期后,此時(shí)上一次寫(xiě)操作的數據突發(fā)長(cháng)度剛好結束。下一個(gè)周期狀態(tài)變成c_WR,發(fā)下一次的寫(xiě)命令,同時(shí)將這一次突發(fā)長(cháng)度的第一個(gè)數據放到SDRAM數據總線(xiàn)上……如此循環(huán),可以完成長(cháng)度是1280的連續數據的寫(xiě)入。這個(gè)循環(huán)如何結束呢?當發(fā)了最后一個(gè)突發(fā)寫(xiě)命令后,狀態(tài)機回到c_idle時(shí),即可停止循環(huán),不再進(jìn)入激活狀態(tài)?傊ㄟ^(guò)控制這個(gè)狀態(tài)機可以完成長(cháng)度是8的倍數的連續數據讀寫(xiě)?刂茽顟B(tài)機還有實(shí)現刷新操作的功能,當要求對SDRAM進(jìn)行刷新操作時(shí),控制狀態(tài)機的狀態(tài)會(huì )跳變到c_AR,SDRAM控制器會(huì )依此發(fā)出刷新命令。然后狀態(tài)機跳變到c_tRFC狀態(tài)等待刷新操作的結束。當刷新操作結束后,狀態(tài)機將恢復到c_idle。這樣就完成了一次刷新操作。如果需要多次刷新,就可以連續進(jìn)行多次這樣的循環(huán)。  

2.3 SDRAM控制器的綜合  

本設計使用的SDRAM芯片是MT48LC2M3282,FPGA芯片是cyclone的EP1C6Q240C6。綜合工具是QuartusII 6.0。綜合的結果是邏輯單元使用了170個(gè),占總資源的3%;工作頻率最高可以達到240.10 MHz,滿(mǎn)足項目要求。   

3 代碼的仿真測試  

本設計的仿真工具是Modelsim6.1f,部分仿真測試波形見(jiàn)圖5。圖中描述了讀一行數據的時(shí)序圖,在開(kāi)始突發(fā)寫(xiě)數據后,SDRAM的數據總線(xiàn)sdr_DQ上的數據沒(méi)有被中斷。這個(gè)表示整個(gè)設計達到了能夠支持超長(cháng)數據突發(fā)讀寫(xiě)功能,能滿(mǎn)足設計要求。  


  
4 結束語(yǔ)  

本文介紹了一種實(shí)現超長(cháng)數據突發(fā)讀寫(xiě)的設計。此設計采用切換Bank操作節約了激活命令所花費的時(shí)間;采用自動(dòng)預沖命令節約了預沖命令所花費的時(shí)間;采用集中刷新完成了足夠的刷新操作。通過(guò)對上面操作的組合設計,能夠很好地完成超長(cháng)數據的突發(fā)讀寫(xiě)。在設計中,成功地實(shí)現了突發(fā)長(cháng)度是1280的數據讀寫(xiě),滿(mǎn)足了項目需求。
本文地址:http://selenalain.com/thread-21181-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页