⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè)-old > 教程中(zhōng)心(xīn) > 認識FPGA >

基于(yú)FPGA高(gāo)速SDRAM控制器的(de)視頻應(yìng)用(yòng)

發(fà)布(bù)时(shí)間(jiān):2023-06-30   作者(zhě):FPGA大神 浏覽量(liàng):
DRAM(同(tóng)步動(dòng)态存儲器)是(shì)一(yī)種(zhǒng)應(yìng)用(yòng)廣泛的(de)存儲器,具有(yǒu)容量(liàng)大、數據(jù)读(dú)写速度(dù)快(kuài)、價格低廉等优點(diǎn),特(tè)别适合那(nà)些需要(yào)海量(liàng)存儲器的(de)應(yìng)用(yòng)領域,例如(rú)視頻方(fāng)面(miàn)。

这(zhè)里(lǐ)有(yǒu)一(yī)个(gè)視頻項目要(yào)求将非(fēi)标(biāo)準的(de)ITU-R BT.656視頻格式的(de)數據(jù)轉(zhuǎn)換成(chéng)VGA格式,直(zhí)接用(yòng)于(yú)顯示器顯示。如(rú)图(tú)1,輸入(rù)的(de)視頻格式是(shì)非(fēi)标(biāo)準的(de)ITU-R BT.656格式,图(tú)像分(fēn)辨率是(shì)1280×1024,幀速是(shì)15幀/秒(miǎo),每一(yī)个(gè)像素點(diǎn)是(shì)24bit;輸出(chū)的(de)視頻格式是(shì)VGA格式,图(tú)像分(fēn)辨率是(shì)1280× 1024,幀速是(shì)60幀/秒(miǎo),每一(yī)个(gè)像素點(diǎn)還(huán)是(shì)24bit。

本(běn)項目使用(yòng)SDRAM来(lái)存儲視頻數據(jù)。在(zài)設計(jì)中(zhōng),要(yào)求能(néng)够将一(yī)幅完整的(de)图(tú)像(1280×1024×24bit)存儲在(zài)SDRAM中(zhōng)。并且要(yào)求读(dú)写突發(fà)长度(dù)是(shì)1280,即一(yī)行視頻數據(jù)(1280×24bit)。SDRAM突發(fà)长度(dù)最(zuì)高(gāo)只(zhī)能(néng)达(dá)到(dào)256(即SDRAM芯片(piàn)的(de)一(yī)列的(de)长度(dù)),为(wèi)此(cǐ)需要(yào)使用(yòng)FPGA專門(mén)实現(xiàn)一(yī)个(gè)SDRAM控制器。在(zài)控制器的(de)設計(jì)中(zhōng)通(tòng)过(guò)采用(yòng)切(qiè)換bank操作、自(zì)動(dòng)預沖、集中(zhōng)刷新等技術(shù)实現(xiàn)了(le)这(zhè)種(zhǒng)超长突發(fà)长度(dù)的(de)數據(jù)读(dú)写。同(tóng)樣(yàng)通(tòng)过(guò)适當地(dì)修改此(cǐ)控制器,可(kě)以(yǐ)实現(xiàn)任意(yì)突發(fà)长度(dù)的(de)數據(jù)读(dú)写。

1 SDRAM基本(běn)特(tè)性(xìng)

本(běn)設計(jì)中(zhōng)采用(yòng)的(de)SDRAM芯片(piàn)的(de)型号(hào)是(shì)MT48LC2M3282-7。SDRAM的(de)主(zhǔ)要(yào)操作包(bāo)括初始化(huà)、读(dú)写和(hé)刷新操作。SDRAM的(de)初始化(huà)操作过(guò)程如(rú)下(xià):上(shàng)電(diàn)後(hòu)等待100 μs;然後(hòu)依次(cì)完成(chéng)預沖,两(liǎng)次(cì)刷新操作;接下(xià)来(lái)就(jiù)可(kě)以(yǐ)配置寄存器了(le)。至(zhì)此(cǐ)整个(gè)初始化(huà)工作結束(shù),SDRAM進(jìn)入(rù)正(zhèng)常工作狀态。SDRAM進(jìn)入(rù)正(zhèng)常工作狀态後(hòu),就(jiù)可(kě)以(yǐ)根(gēn)據(jù)命令来(lái)工作。这(zhè)些命令包(bāo)括:預沖(Precharge)和(hé)自(zì)動(dòng)預沖(AutoPrecharge)、激活(Active)、读(dú) (read)、写(write)、自(zì)動(dòng)刷新(Auto Refresh)和(hé)自(zì)刷新(Self Refresh)等。根(gēn)據(jù)本(běn)設計(jì)的(de)需要(yào),这(zhè)里(lǐ)詳细(xì)介紹設計(jì)中(zhōng)相關(guān)的(de)命令:自(zì)動(dòng)預沖、激活、读(dú)写、自(zì)動(dòng)刷新。自(zì)動(dòng)預沖命令是(shì)SDRAM芯片(piàn)在(zài)一(yī)次(cì)突發(fà)读(dú)/写結束(shù)後(hòu)自(zì)動(dòng)發(fà)出(chū)預沖命令,将读(dú)写的(de)行關(guān)閉。它(tā)與(yǔ)預沖命令有(yǒu)着相同(tóng)的(de)功能(néng),但是(shì)發(fà)起命令的(de)方(fāng)式不(bù)一(yī)樣(yàng)。預沖命令是(shì)SDRAM控制器發(fà)起的(de)命令,它(tā)需要(yào)占據(jù) SDRAM的(de)總(zǒng)線(xiàn),在(zài)这(zhè)段(duàn)时(shí)間(jiān)不(bù)能(néng)读(dú)写數據(jù)。而(ér)自(zì)動(dòng)預沖命令是(shì)SDRAM自(zì)動(dòng)的(de)行为(wèi),不(bù)需要(yào)占據(jù)SDRAM的(de)總(zǒng)線(xiàn)。这(zhè)个(gè)命令是(shì)在(zài)發(fà)起读(dú)写命令时(shí)設置的(de)。

激活命令是(shì)对(duì)SDRAM的(de)某一(yī)行激活,这(zhè)樣(yàng)才能(néng)对(duì)这(zhè)一(yī)行數據(jù)發(fà)起读(dú)写操作。读(dú)写命令是(shì)对(duì)某一(yī)激活的(de)行進(jìn)行突發(fà)读(dú)写操作。具體(tǐ)的(de)突發(fà)读(dú)写的(de)數據(jù)长度(dù)在(zài)初始化(huà)时(shí)配置寄存器时(shí)設置了(le)。

刷新命令是(shì)对(duì)SDRAM內(nèi)的(de)數據(jù)完成(chéng)再生(shēng)的(de)操作,因(yīn)为(wèi)SDRAM采用(yòng)電(diàn)容存儲數據(jù),而(ér)電(diàn)容存在(zài)漏電(diàn)的(de)現(xiàn)象(xiàng),因(yīn)此(cǐ)需要(yào)隔一(yī)段(duàn)时(shí)間(jiān)对(duì)電(diàn)容作一(yī)次(cì)刷新(即重(zhòng)新充電(diàn)),一(yī)般来(lái)说(shuō)要(yào)求64ms內(nèi)将SDRAM的(de)所(suǒ)有(yǒu)行都刷一(yī)遍(biàn)。SDRAM有(yǒu)两(liǎng)種(zhǒng)刷新命令:自(zì)動(dòng)刷新和(hé)自(zì)刷新。自(zì)刷新是(shì)在(zài)芯片(piàn)处于(yú)低功耗狀态下(xià)时(shí)才使用(yòng)的(de)方(fāng)式,芯片(piàn)內(nèi)部(bù)自(zì)動(dòng)完成(chéng)刷新操作。自(zì)動(dòng)刷新是(shì)控制器發(fà)起的(de)刷新操作,它(tā)必須在(zài)SDRAM沒(méi)有(yǒu)激活行时(shí)才能(néng)進(jìn)行刷新操作,而(ér)且需要(yào)占用(yòng)一(yī)定(dìng)的(de)时(shí)間(jiān)(大約 60~70ns)。控制器可(kě)以(yǐ)根(gēn)據(jù)需要(yào)選擇在(zài)何时(shí)刷新,即定(dìng)时(shí)刷新,或(huò)集中(zhōng)刷新。定(dìng)时(shí)刷新是(shì)隔一(yī)段(duàn)时(shí)間(jiān)就(jiù)刷新一(yī)次(cì);集中(zhōng)刷新是(shì)在(zài)某一(yī)段(duàn)空閑时(shí)間(jiān)內(nèi)連(lián)續刷新若干(gàn)次(cì)。这(zhè)个(gè)只(zhī)要(yào)保證在(zài)64 ms內(nèi)将所(suǒ)有(yǒu)的(de)行都刷一(yī)遍(biàn)即可(kě),具體(tǐ)的(de)刷新方(fāng)式可(kě)以(yǐ)根(gēn)據(jù)自(zì)己的(de)應(yìng)用(yòng)需要(yào)来(lái)設計(jì)。

2 SDRAM控制器的(de)設計(jì)

2.1 SDRAM控制器的(de)設計(jì)思(sī)路(lù)

SDRAM芯片(piàn)完成(chéng)一(yī)次(cì)读(dú)写操作由(yóu)三(sān)个(gè)命令組成(chéng):激活、读(dú)/写、預沖。读(dú)写數據(jù)的(de)突發(fà)长度(dù)往往是(shì)有(yǒu)限制的(de),在(zài)SDRAM芯片(piàn)本(běn)身(shēn)提(tí)供的(de)突發(fà)长度(dù)最(zuì)大只(zhī)能(néng)达(dá)到(dào)一(yī)行的(de)容量(liàng)(256,即全(quán)页(yè)突發(fà)模式)。这(zhè)樣(yàng)當一(yī)次(cì)读(dú)写突發(fà)长度(dù)結束(shù)後(hòu),如(rú)果(guǒ)需要(yào)發(fà)起下(xià)一(yī)次(cì)读(dú)写,就(jiù)需要(yào)發(fà)預沖命令結束(shù)这(zhè)一(yī)行,然後(hòu)發(fà)激活命令開(kāi)啟下(xià)一(yī)行。这(zhè)樣(yàng)才能(néng)開(kāi)始写下(xià)一(yī)次(cì)數據(jù)。因(yīn)此(cǐ),如(rú)果(guǒ)想(xiǎng)要(yào)連(lián)續的(de)數據(jù)读(dú)写,就(jiù)必須想(xiǎng)辦(bàn)法节(jié)省(shěng)激活和(hé)預沖命令。

激活命令通(tòng)过(guò)切(qiè)換Bank操作来(lái)完成(chéng)。SDRAM有(yǒu)4个(gè)独立的(de)bank,每一(yī)个(gè)bank可(kě)以(yǐ)同(tóng)时(shí)允许有(yǒu)一(yī)行激活,彼(bǐ)此(cǐ)并不(bù)会(huì)相互干(gàn)擾。这(zhè)樣(yàng)的(de)話(huà),在(zài)同(tóng)一(yī)时(shí)刻最(zuì)多(duō)可(kě)以(yǐ)有(yǒu)4个(gè)行处于(yú)激活狀态。这(zhè)就(jiù)为(wèi)节(jié)約激活时(shí)間(jiān)提(tí)供了(le)解(jiě)決方(fāng)案(àn):在(zài)突發(fà)读(dú)写一(yī)个(gè)bank下(xià)的(de)某一(yī)行时(shí),可(kě)以(yǐ)在(zài)突發(fà)长度(dù)結束(shù)之前(qián)提(tí)前(qián)激活另(lìng)一(yī)个(gè) bank下(xià)的(de)某一(yī)行。这(zhè)樣(yàng)當这(zhè)个(gè)突發(fà)长度(dù)結束(shù)时(shí)就(jiù)可(kě)以(yǐ)直(zhí)接读(dú)写另(lìng)一(yī)bank中(zhōng)被(bèi)激活的(de)行。預沖可(kě)以(yǐ)采用(yòng)自(zì)動(dòng)預沖方(fāng)式来(lái)完成(chéng),不(bù)需要(yào)額外(wài)的(de)預沖命令。

通(tòng)过(guò)上(shàng)述两(liǎng)種(zhǒng)操作方(fāng)式可(kě)以(yǐ)完全(quán)实現(xiàn)超长突發(fà)长度(dù)的(de)數據(jù)读(dú)写,本(běn)設計(jì)将SDRAM設置成(chéng)突發(fà)长度(dù)为(wèi)8,突發(fà)长度(dù)結束(shù)後(hòu)采用(yòng)自(zì)動(dòng)預沖方(fāng)式完成(chéng)此(cǐ)行的(de)預沖操作,具體(tǐ)設想(xiǎng)如(rú)下(xià):

在(zài)写SDRAM时(shí),先(xiān)激活Bank0的(de)第(dì)一(yī)行;發(fà)出(chū)带(dài)自(zì)動(dòng)預沖模式的(de)写操作;數據(jù)開(kāi)始写入(rù)这(zhè)一(yī)行內(nèi);一(yī)段(duàn)时(shí)間(jiān)後(hòu)(在(zài)突發(fà)长度(dù)結束(shù)之前(qián))将Bank1的(de)第(dì)一(yī)行激活;在(zài)Bank0的(de)写突發(fà)长度(dù)結束(shù)的(de)同(tóng)时(shí),發(fà)出(chū)写Bank1的(de)命令,这(zhè)樣(yàng)接下(xià)来(lái)的(de)數據(jù)就(jiù)写入(rù)Bank1的(de)第(dì)一(yī)行中(zhōng);而(ér)由(yóu)于(yú)在(zài)写SDRAM的(de)Bank0 时(shí)設置成(chéng)自(zì)動(dòng)預沖模式,所(suǒ)以(yǐ)SDRAM会(huì)在(zài)Bank0的(de)写操作結束(shù)後(hòu)自(zì)動(dòng)預沖,經(jīng)过(guò)tRP(預沖时(shí)間(jiān))後(hòu),这(zhè)一(yī)Bank自(zì)動(dòng)回(huí)到(dào)idle狀态。同(tóng)樣(yàng) Bank1处于(yú)写突發(fà)长度(dù)时(shí)将Bank2的(de)第(dì)一(yī)行激活,在(zài)Bank1的(de)写突發(fà)长度(dù)結束(shù)的(de)同(tóng)时(shí)發(fà)出(chū)写Bank2的(de)命令……如(rú)此(cǐ)四(sì)个(gè)bank轮流工作,将數據(jù)均勻地(dì)分(fēn)配到(dào)4个(gè)bank中(zhōng)。

对(duì)于(yú)这(zhè)種(zhǒng)超长的(de)數據(jù)突發(fà)读(dú)写,完成(chéng)一(yī)次(cì)读(dú)写操作所(suǒ)花費的(de)时(shí)間(jiān)比較多(duō),例如(rú)读(dú)写时(shí)鐘(zhōng)是(shì)108MHz时(shí),一(yī)次(cì)突發(fà)长度(dù)是(shì)1280的(de)写操作所(suǒ)花費的(de)时(shí)間(jiān)是(shì)11. 6 μs,即在(zài)这(zhè)段(duàn)时(shí)間(jiān)內(nèi)SDRAM的(de)數據(jù)總(zǒng)線(xiàn)是(shì)不(bù)能(néng)被(bèi)中(zhōng)斷的(de)。因(yīn)此(cǐ)采用(yòng)集中(zhōng)刷新是(shì)最(zuì)好(hǎo)的(de)解(jiě)決辦(bàn)法。在(zài)突發(fà)读(dú)写結束(shù)後(hòu),会(huì)有(yǒu)一(yī)段(duàn)比較长的(de)空閑期(qī)(具體(tǐ)时(shí)間(jiān)长度(dù)根(gēn)據(jù)視頻數據(jù)的(de)視頻中(zhōng)行消隐數據(jù)个(gè)數和(hé)读(dú)写时(shí)鐘(zhōng)決定(dìng)),在(zài)这(zhè)段(duàn)时(shí)問(wèn)內(nèi)可(kě)以(yǐ)集中(zhōng)連(lián)續發(fà)出(chū)多(duō)个(gè)刷新命令,只(zhī)需要(yào)保證在(zài)64ms內(nèi)總(zǒng)的(de)刷新次(cì)數达(dá)到(dào)了(le)要(yào)求即可(kě)。

2.2 SDRAM控制器的(de)实現(xiàn)

本(běn)設計(jì)中(zhōng)将SDRAM控制器分(fēn)成(chéng)4个(gè)子模块(kuài):sdr_master主(zhǔ)控模块(kuài)、sdr_ctrl命令模块(kuài)、sdr_sig譯碼模块(kuài)、sdr_data數據(jù)通(tòng)路(lù)模块(kuài),見(jiàn)图(tú)2。sdr_master主(zhǔ)控模块(kuài)根(gēn)據(jù)外(wài)部(bù)的(de)读(dú)写請求向(xiàng)sdr_ctrl命令模块(kuài)提(tí)供各(gè)種(zhǒng)读(dú)写控制信(xìn)号(hào);sdr_ctrl命令模块(kuài)內(nèi)部(bù)的(de)控制狀态機(jī)会(huì)依此(cǐ)發(fà)出(chū)各(gè)種(zhǒng)SDRAM读(dú)写控制命令;sdr_sig譯碼模块(kuài)会(huì)把sdr_ctrl輸出(chū)的(de)控制命令譯碼成(chéng)符合SDRAM接口(kǒu)的(de)信(xìn)号(hào)。此(cǐ)SDRAM 控制器的(de)設計(jì),最(zuì)複雜的(de)部(bù)分(fēn)在(zài)于(yú)如(rú)何設計(jì)SDRAM的(de)工作时(shí)序,即SDRAM何时(shí)激活,何时(shí)读(dú)/写,何时(shí)預沖,何时(shí)刷新。这(zhè)些控制除了(le)滿足SDRAM的(de)工作特(tè)性(xìng)外(wài),還(huán)要(yào)滿足設計(jì)要(yào)求。因(yīn)此(cǐ),鉴于(yú)SDRAM控制的(de)複雜性(xìng),一(yī)般都采用(yòng)狀态機(jī)来(lái)控制。本(běn)設計(jì)中(zhōng)sdr_ctrl命令模块(kuài)包(bāo)括两(liǎng)个(gè)狀态機(jī):初始化(huà)狀态機(jī)完成(chéng)SDRAM的(de)初始化(huà);控制狀态機(jī)完成(chéng)SDRAM的(de)正(zhèng)常工作控制。下(xià)面(miàn)分(fēn)别詳述这(zhè)两(liǎng)个(gè)狀态機(jī)的(de)設計(jì)。

初始化(huà)狀态機(jī)的(de)結構見(jiàn)下(xià)图(tú)。系(xì)統在(zài)上(shàng)電(diàn)(複位)後(hòu),处于(yú)i NOP狀态;當等待了(le)100 μs後(hòu),狀态跳轉(zhuǎn)到(dào)i PRE,發(fà)出(chū)預沖命令;接着跳轉(zhuǎn)到(dào)i tRP等待;經(jīng)过(guò)tRP时(shí)間(jiān)後(hòu),狀态跳轉(zhuǎn)到(dào)i_AR1,發(fà)第(dì)一(yī)次(cì)刷新命令,然後(hòu)在(zài)i_tRFC1等待tRFC时(shí)間(jiān)後(hòu)發(fà)第(dì)二(èr)次(cì)刷新命令,再等待tRFC;接下(xià)来(lái)轉(zhuǎn)到(dào)狀态i MRS,發(fà)裝(zhuāng)载模式字(zì)命令,然後(hòu)等待tMRD时(shí)間(jiān)後(hòu)初始化(huà)完成(chéng),進(jìn)入(rù)i_ready狀态。至(zhì)此(cǐ)初始化(huà)完成(chéng),SDRAM芯片(piàn)就(jiù)可(kě)以(yǐ)正(zhèng)常工作了(le)。

控制狀态機(jī)的(de)狀态跳變(biàn)如(rú)下(xià)图(tú)所(suǒ)示。此(cǐ)狀态機(jī)是(shì)为(wèi)了(le)滿足超长數據(jù)的(de)連(lián)读(dú)或(huò)連(lián)写而(ér)特(tè)殊設計(jì)的(de)。上(shàng)電(diàn)後(hòu)处于(yú)c_idle狀态,當初始化(huà)完成(chéng)後(hòu),控制狀态機(jī)才能(néng)開(kāi)始正(zhèng)常工作。當外(wài)部(bù)要(yào)求進(jìn)行读(dú)写操作时(shí),会(huì)正(zhèng)式地(dì)啟動(dòng)狀态機(jī)。此(cǐ)时(shí)狀态機(jī)跳變(biàn)到(dào)c_ACT狀态,使SDRAM控制器發(fà)出(chū)激活命令;接下(xià)来(lái)两(liǎng)个(gè)狀态 c_tRCD1、c_tRCD2是(shì)激活等待时(shí)間(jiān)tRCD;然後(hòu)狀态機(jī)根(gēn)據(jù)外(wài)部(bù)是(shì)读(dú)請求還(huán)是(shì)写請求,来(lái)決定(dìng)下(xià)一(yī)个(gè)狀态是(shì)發(fà)读(dú)命令還(huán)是(shì)写命令。下(xià)面(miàn)以(yǐ)写數據(jù)为(wèi)例進(jìn)行说(shuō)明(míng),读(dú)數據(jù)的(de)工作过(guò)程是(shì)一(yī)樣(yàng)的(de)。

當要(yào)求写SDRAM时(shí),控制狀态機(jī)的(de)狀态由(yóu)c_tRCD2跳變(biàn)到(dào)c_WR狀态,發(fà)出(chū)写命令。SDRAM控制器会(huì)在(zài)發(fà)写命令的(de)同(tóng)时(shí)将本(běn)次(cì)突發(fà)數據(jù)的(de)第(dì)一(yī)个(gè)數據(jù)送到(dào)總(zǒng)線(xiàn)上(shàng),接着是(shì)三(sān)个(gè)周期(qī)的(de)狀态:c_tDAL1、c_DAL2、c_tDAL3,之後(hòu)回(huí)到(dào)c_idle狀态。这(zhè)樣(yàng)完成(chéng)了(le)写數據(jù)的(de)一(yī)次(cì)循环(huán),刚好(hǎo)需要(yào) 8个(gè)周期(qī)。在(zài)回(huí)到(dào)c_idle狀态後(hòu)即可(kě)啟動(dòng)下(xià)一(yī)次(cì)写數據(jù)傳輸,这(zhè)时(shí)狀态機(jī)跳到(dào)c_ACT狀态,發(fà)出(chū)激活另(lìng)一(yī)个(gè)bank的(de)某一(yī)行的(de)命令,然後(hòu)經(jīng)过(guò)两(liǎng)个(gè)周期(qī)後(hòu),此(cǐ)时(shí)上(shàng)一(yī)次(cì)写操作的(de)數據(jù)突發(fà)长度(dù)刚好(hǎo)結束(shù)。下(xià)一(yī)个(gè)周期(qī)狀态變(biàn)成(chéng)c_WR,發(fà)下(xià)一(yī)次(cì)的(de)写命令,同(tóng)时(shí)将这(zhè)一(yī)次(cì)突發(fà)长度(dù)的(de)第(dì)一(yī)个(gè)數據(jù)放(fàng)到(dào)SDRAM數據(jù)總(zǒng)線(xiàn)上(shàng)……如(rú)此(cǐ)循环(huán),可(kě)以(yǐ)完成(chéng)长度(dù)是(shì)1280的(de)連(lián)續數據(jù)的(de)写入(rù)。这(zhè)个(gè)循环(huán)如(rú)何結束(shù)呢?當發(fà)了(le)最(zuì)後(hòu)一(yī)个(gè)突發(fà)写命令後(hòu),狀态機(jī)回(huí)到(dào)c_idle时(shí),即可(kě)停止循环(huán),不(bù)再進(jìn)入(rù)激活狀态。總(zǒng)之通(tòng)过(guò)控制这(zhè)个(gè)狀态機(jī)可(kě)以(yǐ)完成(chéng)长度(dù)是(shì)8的(de)倍數的(de)連(lián)續數據(jù)读(dú)写。控制狀态機(jī)還(huán)有(yǒu)实現(xiàn)刷新操作的(de)功能(néng),當要(yào)求对(duì)SDRAM進(jìn)行刷新操作时(shí),控制狀态機(jī)的(de)狀态会(huì)跳變(biàn)到(dào)c_AR,SDRAM控制器会(huì)依此(cǐ)發(fà)出(chū)刷新命令。然後(hòu)狀态機(jī)跳變(biàn)到(dào)c_tRFC狀态等待刷新操作的(de)結束(shù)。當刷新操作結束(shù)後(hòu),狀态機(jī)将恢複到(dào)c_idle。这(zhè)樣(yàng)就(jiù)完成(chéng)了(le)一(yī)次(cì)刷新操作。如(rú)果(guǒ)需要(yào)多(duō)次(cì)刷新,就(jiù)可(kě)以(yǐ)連(lián)續進(jìn)行多(duō)次(cì)这(zhè)樣(yàng)的(de)循环(huán)。

2.3 SDRAM控制器的(de)綜合

本(běn)設計(jì)使用(yòng)的(de)SDRAM芯片(piàn)是(shì)MT48LC2M3282,FPGA芯片(piàn)是(shì)cyclone的(de)EP1C6Q240C6。綜合工具是(shì)QuartusII 6.0。綜合的(de)結果(guǒ)是(shì)邏輯單元(yuán)使用(yòng)了(le)170个(gè),占總(zǒng)資源的(de)3%;工作頻率最(zuì)高(gāo)可(kě)以(yǐ)达(dá)到(dào)240.10 MHz,滿足項目要(yào)求。


温(wēn)馨提(tí)示:明(míng)德揚除了(le)培訓学習還(huán)有(yǒu)項目承接業务,擅长的(de)項目主(zhǔ)要(yào)包(bāo)括的(de)方(fāng)向(xiàng)有(yǒu)以(yǐ)下(xià)幾(jǐ)个(gè)方(fāng)面(miàn):


1. MIPI視頻拼接


2. SLVS-EC轉(zhuǎn)MIPI接口(kǒu)(IMX472 IMX492)

3. PCIE采集系(xì)統

4. 图(tú)像項目

5. 高(gāo)速多(duō)通(tòng)道(dào)ADDA系(xì)統

6. 基于(yú)FPGA板卡(kǎ)研發(fà)

7. 多(duō)通(tòng)道(dào)高(gāo)靈敏電(diàn)荷放(fàng)大器

8. 射頻前(qián)端

http://old.mdy-edu.com/xmucjie/2023/0201/1865.html

點(diǎn)擊了(le)解(jiě)項目承接業务詳情(qíng)☝

需要(yào)了(le)解(jiě)相關(guān)信(xìn)息可(kě)以(yǐ)聯系(xì):吴老(lǎo)师(shī)18022857217(微信(xìn)同(tóng)号(hào))
   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨