《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 其他 > 教學(xué):SDRAM控制器設(shè)計(jì)

教學(xué):SDRAM控制器設(shè)計(jì)

2022-08-16
來(lái)源:FPGA之家
關(guān)鍵詞: FPGA 控制器 SDRAM

  在FPGA視頻圖像處理系統(tǒng)中,,經(jīng)常需要使用到SDRAM作為視頻圖像緩存,。SDRAM控制器可以分為上電初始化,自動(dòng)刷新,,讀操作和寫操作這四個(gè)部分,,他們之間的轉(zhuǎn)換可以通過(guò)狀態(tài)機(jī)來(lái)控制,。下面分別實(shí)現(xiàn)這幾個(gè)部分。

  1.SDRAM上電初始化

  SDRAM上電初始化時(shí)序如下圖所示,。

e970072c-1aa0-11ed-ba43-dac502259ad0.jpg

  由時(shí)序圖可知初始化大概的過(guò)程為:上電后等待電源VDD和時(shí)鐘信號(hào)穩(wěn)定100μs(期間命令為空命令),,同時(shí)在100μs內(nèi)設(shè)置CKE(時(shí)鐘使能)信號(hào)為高。隨后對(duì)所有Bank發(fā)送預(yù)充電(PRECH ARGE)命令,,發(fā)送兩次自動(dòng)刷新(REFRESH)命令,,最后發(fā)送裝載模式寄存器(LOAD MODE REGISTER)命令,并將設(shè)置寄存器的值傳入地址總線A0~A11,。

 e989048e-1aa0-11ed-ba43-dac502259ad0.png

  上述過(guò)程的實(shí)現(xiàn)可以通過(guò)線性序列機(jī)來(lái)實(shí)現(xiàn),。即需要對(duì)初始化過(guò)程時(shí)間進(jìn)行計(jì)數(shù),當(dāng)時(shí)間到達(dá)時(shí)就執(zhí)行某個(gè)命令,。下面是部分代碼,。

  1.計(jì)時(shí)器

e99b1066-1aa0-11ed-ba43-dac502259ad0.png

  2.命令執(zhí)行時(shí)間設(shè)置

e9bb0100-1aa0-11ed-ba43-dac502259ad0.jpg

  3.對(duì)應(yīng)時(shí)間執(zhí)行對(duì)應(yīng)命令

 e9d21688-1aa0-11ed-ba43-dac502259ad0.png

  2.SDRAM自動(dòng)刷新

  同樣給出自動(dòng)刷新的時(shí)序圖。

 e9f26636-1aa0-11ed-ba43-dac502259ad0.jpg

  過(guò)程比較簡(jiǎn)單:首先對(duì)所有Bank預(yù)充電,,然后發(fā)送兩次自動(dòng)刷新命令,。

 ea154336-1aa0-11ed-ba43-dac502259ad0.png

  同樣可以使用線性序列機(jī)的方法來(lái)實(shí)現(xiàn),這里就不重復(fù)了,。但需要添加一個(gè)刷新?tīng)顟B(tài)標(biāo)志,。ref_opt_done=1表示刷新完成,ref_opt=1表示正在刷新,。

 ea218a38-1aa0-11ed-ba43-dac502259ad0.png

  3.SDRAM寫操作

ea449154-1aa0-11ed-ba43-dac502259ad0.jpg

  從時(shí)序圖上看首先發(fā)出激活命令,,并給出行地址Bank地址;隨后發(fā)出寫命令,,并指定寫入Bank,,起始列地址和寫入數(shù)據(jù);最后進(jìn)行預(yù)充電,,關(guān)閉所有Bank,。這里每次突發(fā)寫入4個(gè)數(shù)據(jù),即突發(fā)長(zhǎng)度為4,突發(fā)長(zhǎng)度可以在之前初始化的模式寄存器中設(shè)置,。

 ea682470-1aa0-11ed-ba43-dac502259ad0.png

  同樣使用序列機(jī)的實(shí)現(xiàn)方法,,在寫操作中也需要添加寫操作完成狀態(tài)標(biāo)志,和過(guò)程狀態(tài)標(biāo)志,。此外只有當(dāng)寫入突發(fā)長(zhǎng)度數(shù)據(jù)的時(shí)候我們才使能數(shù)據(jù)線輸入有效,,其他時(shí)刻讓數(shù)據(jù)線保持高阻態(tài),所以要添加一個(gè)寫數(shù)據(jù)狀態(tài)標(biāo)志W(wǎng)r_data_valid=1時(shí)表示正在寫數(shù)據(jù),。

 ea76287c-1aa0-11ed-ba43-dac502259ad0.png

  4.SDRAM讀操作

ea9599c8-1aa0-11ed-ba43-dac502259ad0.jpg

  與寫操作類似,,但是我們輸入讀命令的時(shí)候,數(shù)據(jù)并不是立刻輸出,,而是要經(jīng)過(guò)一個(gè)CAS_Latency后輸出。這個(gè)延時(shí)也可以通過(guò)模式寄存器的配置來(lái)調(diào)整,。我們同樣需要給出讀操作完成,、讀操作過(guò)程,讀出突發(fā)數(shù)據(jù)的有效區(qū)間,。

eab7f6da-1aa0-11ed-ba43-dac502259ad0.png

eac770c4-1aa0-11ed-ba43-dac502259ad0.png

  5.SDRAM控制器設(shè)計(jì)

  首先SDRAM上電后進(jìn)入空閑狀態(tài),,初始化完成后進(jìn)入刷新?tīng)顟B(tài),然后根據(jù)輸入命令進(jìn)行轉(zhuǎn)換,,實(shí)際上狀態(tài)機(jī)的控制對(duì)于刷新操作,,讀/寫操作是有一個(gè)優(yōu)先級(jí)的:刷新操作>寫操作>讀操作。即假設(shè)寫命令和刷新命令同時(shí)到來(lái)時(shí)先執(zhí)行刷新操作,。下圖為狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖,。具體實(shí)現(xiàn)可參考完整代碼。

  eaea2010-1aa0-11ed-ba43-dac502259ad0.jpg

  由于SDRAM需要固定時(shí)間間隔刷新一次,,我們還得考慮一個(gè)刷新定時(shí)器,,固定時(shí)間產(chǎn)生一個(gè)刷新請(qǐng)求。

eb156d24-1aa0-11ed-ba43-dac502259ad0.png

  最后我們還需要考慮如果在讀操作的時(shí)候,,產(chǎn)生了刷新請(qǐng)求或?qū)懻?qǐng)求怎么辦呢,?寫操作的時(shí)候,產(chǎn)生了刷新請(qǐng)求或讀請(qǐng)求怎么辦,?或者在刷新操作時(shí)產(chǎn)生了讀/寫請(qǐng)求怎么辦,?

  對(duì)于刷新請(qǐng)求的突然到來(lái)我們采取記住刷新標(biāo)志,等待當(dāng)前任務(wù)完成后進(jìn)行刷新操作,。

  在刷新操作時(shí)讀/寫請(qǐng)求突然到來(lái),,我們也采取記住讀/寫標(biāo)志,等待當(dāng)前任務(wù)完成后進(jìn)行讀/寫操作,。

  但是對(duì)于在讀/寫操作時(shí)外部讀/寫請(qǐng)求的到來(lái),,我們選擇了忽略這次請(qǐng)求。部分代碼如下。

eb24db7e-1aa0-11ed-ba43-dac502259ad0.jpg

  由于視頻信號(hào)數(shù)據(jù)讀入讀出都是連續(xù)不斷的,,因此在某些時(shí)刻會(huì)導(dǎo)致讀寫的遺漏,,但一般會(huì)在SDRAM讀出寫入前加上一個(gè)FIFO進(jìn)行緩存控制數(shù)據(jù)的讀寫,當(dāng)寫FIFO中數(shù)據(jù)大于一次突發(fā)長(zhǎng)度時(shí),,使能寫信號(hào),;當(dāng)讀FIFO中數(shù)據(jù)小于突發(fā)長(zhǎng)度時(shí),使能讀信號(hào),,就可以解決這個(gè)問(wèn)題,。



更多信息可以來(lái)這里獲取==>>電子技術(shù)應(yīng)用-AET<< 

mmexport1621241704608.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。