FPGA系(xì)統設計(jì)的(de)仿真(zhēn)验(yàn)證之:SDRAM读(dú)写控制的(de)实現(xiàn)與(yǔ)Modelsim仿真(zhēn)
1.实例的(de)主(zhǔ)要(yào)內(nèi)容
本(běn)节(jié)旨在(zài)通(tòng)过(guò)分(fēn)析SDRAM控制器,介紹了(le)SDRAM的(de)基本(běn)工作模式。最(zuì)後(hòu)使用(yòng)Modelsim对(duì)读(dú)写控制器進(jìn)行仿真(zhēn),幫助读(dú)者(zhě)進(jìn)一(yī)步了(le)解(jiě)一(yī)个(gè)真(zhēn)实的(de)器件(jiàn)模块(kuài)是(shì)如(rú)何進(jìn)行Modelsim仿真(zhēn)的(de)。2.实例目标(biāo)
通(tòng)过(guò)本(běn)实例,读(dú)者(zhě)應(yìng)达(dá)到(dào)下(xià)面(miàn)的(de)目标(biāo)。
· 了(le)解(jiě)SDRAM存儲器的(de)工作模式。
· 熟悉Modelsim仿真(zhēn)的(de)基本(běn)流程。
· 可(kě)独立使用(yòng)Modelsim仿真(zhēn)新工程。
SDRAM簡介
在(zài)高(gāo)速实时(shí)或(huò)者(zhě)非(fēi)实时(shí)信(xìn)号(hào)处理系(xì)統當中(zhōng),常常使用(yòng)大容量(liàng)存儲器实現(xiàn)數據(jù)緩存。而(ér)大容量(liàng)存儲器的(de)控制與(yǔ)使用(yòng)是(shì)整个(gè)系(xì)統实現(xiàn)过(guò)程中(zhōng)的(de)重(zhòng)點(diǎn)和(hé)難點(diǎn)之一(yī)。
SDRAM(同(tóng)步動(dòng)态随即訪問(wèn)存儲器)具有(yǒu)價格低廉、精密度(dù)高(gāo)、读(dú)写速度(dù)快(kuài)等优點(diǎn),從而(ér)成(chéng)为(wèi)數據(jù)緩存器的(de)首選存儲介質(zhì)。但是(shì)SDRAM的(de)結構與(yǔ)SRAM有(yǒu)很大的(de)差异(yì),其控制时(shí)序和(hé)機(jī)制也(yě)比較複雜,这(zhè)就(jiù)限制了(le)SDRAM的(de)使用(yòng)範圍。
下(xià)面(miàn)我(wǒ)们(men)首先(xiān)对(duì)SDRAM進(jìn)行簡單介紹。
1.SDRAM信(xìn)号(hào)
SDRAM器件(jiàn)的(de)信(xìn)号(hào)可(kě)以(yǐ)分(fēn)为(wèi)控制、地(dì)址和(hé)數據(jù)信(xìn)号(hào)3類(lèi),具體(tǐ)定(dìng)義如(rú)下(xià)表(biǎo)所(suǒ)示。
SDRAM信(xìn)号(hào)
通(tòng)常一(yī)个(gè)SDRAM 中(zhōng)包(bāo)含幾(jǐ)个(gè)Bank,每个(gè)Bank的(de)存儲單元(yuán)是(shì)按行和(hé)列尋址的(de)。由(yóu)于(yú)这(zhè)種(zhǒng)特(tè)殊的(de)存儲結構,SDRAM有(yǒu)以(yǐ)下(xià)幾(jǐ)个(gè)工作特(tè)性(xìng)。
(1)SDRAM 的(de)初始化(huà)。
SDRAM 在(zài)上(shàng)電(diàn)100~200µs 後(hòu),必須由(yóu)一(yī)个(gè)初始化(huà)進(jìn)程来(lái)配置SDRAM的(de)模式寄存器,模式寄存器的(de)值決定(dìng)着SDRAM 的(de)工作模式。
(2)訪問(wèn)存儲單元(yuán)。
为(wèi)減少(shǎo)I/O 引脚數量(liàng),SDRAM 複用(yòng)了(le)地(dì)址線(xiàn)。所(suǒ)以(yǐ)在(zài)读(dú)写SDRAM 时(shí),先(xiān)由(yóu)ACTIVE 命令激活要(yào)读(dú)写的(de)Bank,并鎖存行地(dì)址,然後(hòu)在(zài)读(dú)写指令有(yǒu)效时(shí)鎖存列地(dì)址。一(yī)旦Bank被(bèi)激活後(hòu)只(zhī)有(yǒu)執行一(yī)次(cì)預充命令後(hòu)才能(néng)再次(cì)激活同(tóng)一(yī)Bank。
(3)刷新和(hé)預充。
为(wèi)了(le)提(tí)高(gāo)存儲密度(dù), SDRAM 采用(yòng)矽片(piàn)電(diàn)容存儲數據(jù),電(diàn)容總(zǒng)是(shì)傾向(xiàng)于(yú)放(fàng)電(diàn),因(yīn)此(cǐ)必須有(yǒu)定(dìng)时(shí)的(de)刷新周期(qī)以(yǐ)避免數據(jù)丢失。刷新周期(qī)可(kě)由(yóu)(最(zuì)小刷新周期(qī)÷时(shí)鐘(zhōng)周期(qī))計(jì)算獲得。对(duì)Bank預充電(diàn)或(huò)者(zhě)關(guān)閉已激活的(de)Bank,可(kě)預充特(tè)定(dìng)Bank 也(yě)可(kě)同(tóng)时(shí)作用(yòng)于(yú)所(suǒ)有(yǒu)Bank,A10、BA0和(hé)BA1用(yòng)于(yú)選擇Bank。
(4)操作控制。
SDRAM 的(de)具體(tǐ)控制命令由(yóu)一(yī)些專用(yòng)控制引脚和(hé)地(dì)址線(xiàn)輔助完成(chéng)。CS、RAS、CAS 和(hé)WR 在(zài)时(shí)鐘(zhōng)上(shàng)升(shēng)沿的(de)狀态決定(dìng)具體(tǐ)操作動(dòng)作,地(dì)址線(xiàn)和(hé)Bank選擇控制線(xiàn)在(zài)部(bù)分(fēn)操作動(dòng)作中(zhōng)作为(wèi)輔助參數輸入(rù)。
由(yóu)于(yú)特(tè)殊的(de)存儲結構,SDRAM 操作指令比較多(duō),不(bù)像SRAM 一(yī)樣(yàng)只(zhī)有(yǒu)簡單的(de)读(dú)写,具體(tǐ)操作指令如(rú)下(xià)表(biǎo)所(suǒ)示。
SDRAM命令真(zhēn)值表(biǎo)
3.SDRAM读(dú)写控制器
Xilinx、Altera、Lattice等較大的(de)FPGA制造廠(chǎng)商都編写了(le)自(zì)己的(de)SDRAM接口(kǒu)控制器。读(dú)者(zhě)可(kě)以(yǐ)到(dào)官方(fāng)网(wǎng)站去(qù)申請相關(guān)的(de)控制器源代(dài)碼。下(xià)面(miàn)簡單介紹其中(zhōng)一(yī)種(zhǒng),如(rú)下(xià)图(tú)所(suǒ)示是(shì)該SDRAM控制器總(zǒng)體(tǐ)設計(jì)框图(tú)和(hé)外(wài)部(bù)接口(kǒu)信(xìn)号(hào)。
在(zài)上(shàng)图(tú)中(zhōng),控制器右(yòu)端接口(kǒu)信(xìn)号(hào)均为(wèi)直(zhí)接與(yǔ)SDRAM 对(duì)應(yìng)管(guǎn)脚相連(lián)的(de)信(xìn)号(hào)
控制器左(zuǒ)端的(de)接口(kǒu)信(xìn)号(hào)为(wèi)與(yǔ)FPGA 相連(lián)的(de)系(xì)統控制接口(kǒu)信(xìn)号(hào),定(dìng)義如(rú)下(xià)。
· CLK:系(xì)統时(shí)鐘(zhōng)信(xìn)号(hào)。
· ADDR:系(xì)統給(gěi)出(chū)的(de)SDRAM 地(dì)址信(xìn)号(hào)。
· DATAIN:系(xì)統用(yòng)于(yú)写入(rù)SDRAM 的(de)數據(jù)信(xìn)号(hào)。
· DATAOUT:系(xì)統用(yòng)于(yú)從SDRAM读(dú)出(chū)的(de)數據(jù)信(xìn)号(hào)。
· CMD[1:0]、CMDACK:系(xì)統和(hé)控制器的(de)命令交互信(xìn)号(hào),參見(jiàn)表(biǎo)7.3。
· DM:數據(jù)Mask信(xìn)号(hào)。
一(yī)般来(lái)说(shuō),SDRAM的(de)读(dú)写控制时(shí)序可(kě)以(yǐ)分(fēn)为(wèi)初始化(huà)、写寄存器、自(zì)動(dòng)刷新、突發(fà)模式读(dú)、突發(fà)模式写、整页(yè)读(dú)以(yǐ)及(jí)整页(yè)写等主(zhǔ)要(yào)操作。具體(tǐ)的(de)时(shí)序图(tú)可(kě)以(yǐ)查閱相關(guān)的(de)器件(jiàn)數據(jù)手(shǒu)册,这(zhè)里(lǐ)不(bù)再列出(chū)。
SDRAM的(de)读(dú)写控制也(yě)可(kě)以(yǐ)由(yóu)如(rú)图(tú)7.34所(suǒ)示的(de)读(dú)写狀态機(jī)表(biǎo)示。
在(zài)FPGA中(zhōng),实現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de)狀态機(jī),再利用(yòng)已有(yǒu)的(de)SDR SDRAM控制器即可(kě)实現(xiàn)对(duì)SDRAM器件(jiàn)的(de)控制。
SDRAM控制器的(de)Modelsim仿真(zhēn)
(1)打(dǎ)開(kāi)ModelSim软(ruǎn)件(jiàn)。
(2)創建工程。
如(rú)下(xià)图(tú)所(suǒ)示,在(zài)Modelsim中(zhōng)創建新工程,并設置工程的(de)相關(guān)屬性(xìng)。
(3)添加設計(jì)輸入(rù)。
若要(yào)創建新的(de)文(wén)件(jiàn)就(jiù)選擇【Create New File】图(tú)标(biāo),若要(yào)添加已經(jīng)存在(zài)的(de)文(wén)件(jiàn)就(jiù)選擇【Add Existing File】图(tú)标(biāo),如(rú)图(tú)7.36所(suǒ)示。本(běn)实例中(zhōng)使用(yòng)已經(jīng)存在(zài)的(de)SDRAM控制器源文(wén)件(jiàn)作为(wèi)設計(jì)輸入(rù),添加後(hòu),在(zài)Workspace浏覽器中(zhōng)可(kě)以(yǐ)看(kàn)到(dào)如(rú)下(xià)图(tú)的(de)設計(jì)輸入(rù)列表(biǎo)。
(4)編譯設計(jì)輸入(rù)。
如(rú)下(xià)图(tú)所(suǒ)示,在(zài)任意(yì)一(yī)个(gè)源文(wén)件(jiàn)上(shàng)單擊右(yòu)鍵,選擇“Compile”/“Compile All”,对(duì)所(suǒ)有(yǒu)的(de)源文(wén)件(jiàn)進(jìn)行編譯。
編譯後(hòu),若有(yǒu)錯誤,Modelsim会(huì)在(zài)信(xìn)息欄中(zhōng)顯示出(chū)来(lái)。这(zhè)时(shí)只(zhī)要(yào)双(shuāng)擊該錯誤,ModelSim就(jiù)会(huì)自(zì)動(dòng)打(dǎ)開(kāi)該錯誤所(suǒ)在(zài)的(de)文(wén)件(jiàn),并定(dìng)位到(dào)出(chū)現(xiàn)錯誤所(suǒ)在(zài)的(de)位置附近(jìn)。若編譯正(zhèng)确通(tòng)过(guò),源文(wén)件(jiàn)後(hòu)面(miàn)的(de)藍(lán)色(sè)問(wèn)号(hào)就(jiù)替換成(chéng)为(wèi)綠(lǜ)色(sè)的(de)对(duì)号(hào),如(rú)上(shàng)图(tú)所(suǒ)示。
(5)仿真(zhēn)。
在(zài)Workspace浏覽器中(zhōng)選擇“Library”複選页(yè),單擊Work左(zuǒ)邊(biān)的(de)小加号(hào)。在(zài)弹出(chū)的(de)子菜單里(lǐ)面(miàn)找(zhǎo)到(dào)仿真(zhēn)模块(kuài)“sdram_test_tb”。双(shuāng)擊或(huò)右(yòu)鍵選擇“Simulate”選項,ModelSim就(jiù)会(huì)自(zì)動(dòng)運行仿真(zhēn),如(rú)下(xià)图(tú)所(suǒ)示。

(6)观察波(bō)形。
在(zài)Workspace浏覽器中(zhōng)選擇“Sim”複選页(yè),可(kě)以(yǐ)看(kàn)到(dào)仿真(zhēn)模块(kuài)的(de)实例列表(biǎo),如(rú)下(xià)图(tú)所(suǒ)示。
如(rú)下(xià)图(tú)所(suǒ)示,右(yòu)鍵單擊頂层测試模块(kuài),選擇“Add”/“Add to Wave”選項,将該仿真(zhēn)模块(kuài)的(de)所(suǒ)有(yǒu)实例添加至(zhì)波(bō)形观察器中(zhōng)。
添加後(hòu),ModelSim将会(huì)自(zì)動(dòng)打(dǎ)開(kāi)一(yī)个(gè)波(bō)形观察器,并将頂层测試模块(kuài)的(de)所(suǒ)有(yǒu)寄存器和(hé)接口(kǒu)添加進(jìn)去(qù)。回(huí)到(dào)ModelSim的(de)界面(miàn),在(zài)命令輸入(rù)窗(chuāng)口(kǒu)中(zhōng)鍵入(rù)“run 20us”,開(kāi)始執行仿真(zhēn),如(rú)下(xià)图(tú)所(suǒ)示。
執行仿真(zhēn)後(hòu),經(jīng)过(guò)相應(yìng)的(de)仿真(zhēn)时(shí)間(jiān),就(jiù)可(kě)以(yǐ)在(zài)波(bō)形观察器中(zhōng)看(kàn)見(jiàn)如(rú)图(tú)7.44所(suǒ)示的(de)仿真(zhēn)結果(guǒ)。这(zhè)个(gè)就(jiù)是(shì)通(tòng)过(guò)利用(yòng)已有(yǒu)的(de)SDRAM控制器及(jí)SDRAM器件(jiàn)模型,由(yóu)用(yòng)戶編写对(duì)SDRAM控制器的(de)狀态機(jī)控制後(hòu)得到(dào)的(de)仿真(zhēn)結果(guǒ)。
小結
本(běn)节(jié)对(duì)數字(zì)系(xì)統中(zhōng)常用(yòng)的(de)存儲器SDRAM做了(le)初步的(de)介紹,并在(zài)Modelsim中(zhōng)实現(xiàn)了(le)对(duì)SDRAM控制器的(de)仿真(zhēn)。通(tòng)过(guò)这(zhè)个(gè)实例,读(dú)者(zhě)能(néng)够掌握分(fēn)立器件(jiàn)是(shì)如(rú)何與(yǔ)FPGA邏輯实現(xiàn)Modelsim聯合仿真(zhēn)的(de)。
在(zài)大型的(de)系(xì)統設計(jì)中(zhōng),在(zài)系(xì)統硬(yìng)件(jiàn)实現(xiàn)前(qián)对(duì)系(xì)統進(jìn)行仿真(zhēn)是(shì)非(fēi)常必要(yào)的(de)。而(ér)这(zhè)个(gè)仿真(zhēn)又不(bù)僅僅局(jú)限在(zài)FPGA等可(kě)編程邏輯器件(jiàn)內(nèi)部(bù),與(yǔ)之相關(guān)的(de)分(fēn)立器件(jiàn)也(yě)是(shì)系(xì)統仿真(zhēn)的(de)重(zhòng)要(yào)組成(chéng)部(bù)分(fēn)。因(yīn)此(cǐ)掌握分(fēn)立器件(jiàn)的(de)聯合仿真(zhēn)是(shì)一(yī)个(gè)非(fēi)常重(zhòng)要(yào)的(de)技能(néng)。
温(wēn)馨提(tí)示:明(míng)德揚2023推出(chū)了(le)全(quán)新課程——邏輯設計(jì)基本(běn)功修煉課,降低学習FPGA門(mén)檻的(de)同(tóng)时(shí),增加了(le)学習的(de)趣味性(xìng)
http://old.mdy-edu.com/chanpinzhongxin/peixunkecheng/2023/0215/1889.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)步)








