新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于FPGA的高速SDRAM控制器的視頻應(yīng)用

基于FPGA的高速SDRAM控制器的視頻應(yīng)用

作者: 時(shí)間:2009-09-15 來(lái)源:網(wǎng)絡(luò) 收藏

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

本文引用地址:http://2s4d.com/article/191928.htm

2 SDRAM的設(shè)計(jì)
2.1 SDRAM控制器的設(shè)計(jì)思路
SDRAM芯片完成一次讀寫(xiě)操作由三個(gè)命令組成:激活、讀/寫(xiě)、預(yù)沖。讀寫(xiě)數(shù)據(jù)的突發(fā)長(zhǎng)度往往是有限制的,在SDRAM芯片本身提供的突發(fā)長(zhǎng)度最大只能達(dá)到一行的容量(256,即全頁(yè)突發(fā)模式)。這樣當(dāng)一次讀寫(xiě)突發(fā)長(zhǎng)度結(jié)束后,如果需要發(fā)起下一次讀寫(xiě),就需要發(fā)預(yù)沖命令結(jié)束這一行,然后發(fā)激活命令開(kāi)啟下一行。這樣才能開(kāi)始寫(xiě)下一次數(shù)據(jù)。因此,如果想要連續(xù)的數(shù)據(jù)讀寫(xiě),就必須想辦法節(jié)省激活和預(yù)沖命令。
激活命令通過(guò)切換Bank操作來(lái)完成。SDRAM有4個(gè)獨(dú)立的bank,每一個(gè)bank可以同時(shí)允許有一行激活,彼此并不會(huì)相互干擾。這樣的話,在同一時(shí)刻最多可以有4個(gè)行處于激活狀態(tài)。這就為節(jié)約激活時(shí)間提供了解決方案:在突發(fā)讀寫(xiě)一個(gè)bank下的某一行時(shí),可以在突發(fā)長(zhǎng)度結(jié)束之前提前激活另一個(gè) bank下的某一行。這樣當(dāng)這個(gè)突發(fā)長(zhǎng)度結(jié)束時(shí)就可以直接讀寫(xiě)另一bank中被激活的行。預(yù)沖可以采用自動(dòng)預(yù)沖方式來(lái)完成,不需要額外的預(yù)沖命令。
通過(guò)上述兩種操作方式可以完全實(shí)現(xiàn)超長(zhǎng)突發(fā)長(zhǎng)度的數(shù)據(jù)讀寫(xiě),本設(shè)計(jì)將SDRAM設(shè)置成突發(fā)長(zhǎng)度為8,突發(fā)長(zhǎng)度結(jié)束后采用自動(dòng)預(yù)沖方式完成此行的預(yù)沖操作,具體設(shè)想如下:
在寫(xiě)SDRAM時(shí),先激活Bank0的第一行;發(fā)出帶自動(dòng)預(yù)沖模式的寫(xiě)操作;數(shù)據(jù)開(kāi)始寫(xiě)入這一行內(nèi);一段時(shí)間后(在突發(fā)長(zhǎng)度結(jié)束之前)將Bank1的第一行激活;在Bank0的寫(xiě)突發(fā)長(zhǎng)度結(jié)束的同時(shí),發(fā)出寫(xiě)B(tài)ank1的命令,這樣接下來(lái)的數(shù)據(jù)就寫(xiě)入Bank1的第一行中;而由于在寫(xiě)SDRAM的Bank0 時(shí)設(shè)置成自動(dòng)預(yù)沖模式,所以SDRAM會(huì)在Bank0的寫(xiě)操作結(jié)束后自動(dòng)預(yù)沖,經(jīng)過(guò)tRP(預(yù)沖時(shí)間)后,這一Bank自動(dòng)回到idle狀態(tài)。同樣 Bank1處于寫(xiě)突發(fā)長(zhǎng)度時(shí)將Bank2的第一行激活,在Bank1的寫(xiě)突發(fā)長(zhǎng)度結(jié)束的同時(shí)發(fā)出寫(xiě)B(tài)ank2的命令……如此四個(gè)bank輪流工作,將數(shù)據(jù)均勻地分配到4個(gè)bank中。
對(duì)于這種超長(zhǎng)的數(shù)據(jù)突發(fā)讀寫(xiě),完成一次讀寫(xiě)操作所花費(fèi)的時(shí)間比較多,例如讀寫(xiě)時(shí)鐘是108MHz時(shí),一次突發(fā)長(zhǎng)度是1280的寫(xiě)操作所花費(fèi)的時(shí)間是11. 6 μs,即在這段時(shí)間內(nèi)SDRAM的數(shù)據(jù)總線是不能被中斷的。因此采用集中刷新是最好的解決辦法。在突發(fā)讀寫(xiě)結(jié)束后,會(huì)有一段比較長(zhǎng)的空閑期(具體時(shí)間長(zhǎng)度根據(jù)視頻數(shù)據(jù)的視頻中行消隱數(shù)據(jù)個(gè)數(shù)和讀寫(xiě)時(shí)鐘決定),在這段時(shí)問(wèn)內(nèi)可以集中連續(xù)發(fā)出多個(gè)刷新命令,只需要保證在64ms內(nèi)總的刷新次數(shù)達(dá)到了要求即可。
2.2 SDRAM控制器的實(shí)現(xiàn)
本設(shè)計(jì)中將SDRAM控制器分成4個(gè)子模塊:sdr_master主控模塊、sdr_ctrl命令模塊、sdr_sig譯碼模塊、sdr_data數(shù)據(jù)通路模塊,見(jiàn)圖2。sdr_master主控模塊根據(jù)外部的讀寫(xiě)請(qǐng)求向sdr_ctrl命令模塊提供各種讀寫(xiě)控制信號(hào);sdr_ctrl命令模塊內(nèi)部的控制狀態(tài)機(jī)會(huì)依此發(fā)出各種SDRAM讀寫(xiě)控制命令;sdr_sig譯碼模塊會(huì)把sdr_ctrl輸出的控制命令譯碼成符合SDRAM接口的信號(hào)。此SDRAM 控制器的設(shè)計(jì),最復(fù)雜的部分在于如何設(shè)計(jì)SDRAM的工作時(shí)序,即SDRAM何時(shí)激活,何時(shí)讀/寫(xiě),何時(shí)預(yù)沖,何時(shí)刷新。這些控制除了滿足SDRAM的工作特性外,還要滿足設(shè)計(jì)要求。因此,鑒于SDRAM控制的復(fù)雜性,一般都采用狀態(tài)機(jī)來(lái)控制。本設(shè)計(jì)中sdr_ctrl命令模塊包括兩個(gè)狀態(tài)機(jī):初始化狀態(tài)機(jī)完成SDRAM的初始化;控制狀態(tài)機(jī)完成SDRAM的正常工作控制。下面分別詳述這兩個(gè)狀態(tài)機(jī)的設(shè)計(jì)。

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

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



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉