基于FPGA的DDR2 SDRAM存儲(chǔ)器用戶接口設(shè)計(jì)
摘要:使用功能強(qiáng)大的FPGA來(lái)實(shí)現(xiàn)一種DDR2 SDRAM存儲(chǔ)器的用戶接口。該用戶接口是基于XILINX公司出產(chǎn)的DDR2 SDRAM的存儲(chǔ)控制器,由于該公司出產(chǎn)的這種存儲(chǔ)控制器具有很高的效率,使用也很廣泛,可知本設(shè)計(jì)具有很大的使用前景。本設(shè)計(jì)通過(guò)采用多路高速率數(shù)據(jù)讀寫探作仿真驗(yàn)證,可知其完全可以滿足時(shí)序要求,由綜合結(jié)果可知其使用邏輯資源很少,運(yùn)行速率很高,基本可以滿足所有設(shè)計(jì)需要。
關(guān)鍵詞:DDR2 SDRAM;FPGA;用戶接口;DDR2 SDRAM存儲(chǔ)控制器
現(xiàn)如今,隨著電子技術(shù)和通信技術(shù)的飛速發(fā)展,電路設(shè)計(jì)對(duì)存儲(chǔ)器的要求也越來(lái)越高,其主要體現(xiàn)在對(duì)存儲(chǔ)器的容量和存儲(chǔ)操作速度兩個(gè)方面。鑒于此,JEEDEC定義了DDR2SDRAM技術(shù)標(biāo)準(zhǔn),其以低能耗、低發(fā)熱量、高密度以及高頻率成為了現(xiàn)代存儲(chǔ)技術(shù)的核心器件。DDR2自身的工作頻率可以達(dá)到677 MHz,幾乎可以滿足所有電路設(shè)計(jì)的要求。而這也就使得整個(gè)電路設(shè)計(jì)的頻率瓶頸出現(xiàn)在了用戶設(shè)計(jì)部分與DDR2存儲(chǔ)器之間的邏輯上,主要是因?yàn)镈DR2本身的結(jié)構(gòu)特性使得DDR2的操作時(shí)序很復(fù)雜苛刻。而這之間的部分又主要分為DDR2存儲(chǔ)控制器和用戶接口部分?,F(xiàn)如今已經(jīng)有了很多的廠家在生產(chǎn)DDR2存儲(chǔ)控制器,其中以XILINX公司設(shè)計(jì)的DDR2存儲(chǔ)控制器效率最高使用最為廣泛,該存儲(chǔ)控制器的單獨(dú)操作頻率非常高,完全不會(huì)影響DDR2存儲(chǔ)器的操作,因此這又將整個(gè)電路系統(tǒng)的頻率瓶頸縮小到了用戶接口部分。用戶接口的設(shè)計(jì)有很多種方案,而FPGA以其高速度、豐富的片上資源、靈活的設(shè)計(jì)以及簡(jiǎn)單方便的調(diào)試特性成為了用戶接口設(shè)計(jì)的必然選擇。
1 DDR2存儲(chǔ)器應(yīng)用的一般模式
DDR2存儲(chǔ)器一般作為片上系統(tǒng)的輔助器件,其應(yīng)用的一般模式如圖1所示。
用戶設(shè)計(jì)部分是整個(gè)片上系統(tǒng)的核心,主要是完成系統(tǒng)要實(shí)現(xiàn)的所有任務(wù),對(duì)整個(gè)系統(tǒng)進(jìn)行整體的調(diào)度和控制。
用戶接口部分主要是接收用戶設(shè)計(jì)部分傳送的操作數(shù)據(jù),以及與這些操作數(shù)據(jù)相對(duì)應(yīng)的控制指令,之后將這些數(shù)據(jù)進(jìn)行整理,然后按照一定的時(shí)序要求發(fā)出。如果操作的是多路不同種類的數(shù)據(jù)時(shí),則還要將這多路數(shù)據(jù)進(jìn)行仲裁,保證所有數(shù)據(jù)都不會(huì)被發(fā)錯(cuò)或者丟失。
DDR2存儲(chǔ)控制器主要是接收用戶接口部分發(fā)給的特定的讀寫操作控制指令和已經(jīng)整理好的數(shù)據(jù),將這些指令進(jìn)行進(jìn)一步的解析,最后將經(jīng)過(guò)解析產(chǎn)生的那些DDR2存儲(chǔ)器硬件可以識(shí)別的信號(hào)以及與讀寫有效信號(hào)有關(guān)的寫數(shù)據(jù)輸出給DDR2,讀數(shù)據(jù)從DDR2存儲(chǔ)器中讀回。
DDR2存儲(chǔ)器主要是按照讀寫有效信號(hào)將要處理的數(shù)據(jù)進(jìn)行讀出和寫入操作。
2 用戶接口設(shè)計(jì)
用戶接口設(shè)計(jì)的原理如圖2所示。
其主要包括寫數(shù)據(jù)通路、讀數(shù)據(jù)通路以及接口控制3大模塊。
寫數(shù)據(jù)通路按照輸入存儲(chǔ)器路數(shù)的不同分為以下兩種:只有一路數(shù)據(jù)輸入時(shí)只有控制模塊和地址計(jì)算模塊;當(dāng)有多路數(shù)據(jù)輸入時(shí),不僅有控制模塊和地址計(jì)算模塊還有仲裁模塊。
控制模塊主要是將輸入的數(shù)據(jù)進(jìn)行一次2乒乓操作的緩存,再將緩存后的數(shù)據(jù)拼接成64位數(shù)據(jù),之后在仲裁模塊允許該路數(shù)據(jù)寫操作時(shí)將這些數(shù)據(jù)發(fā)送給仲裁模塊。
地址計(jì)算模塊主要是計(jì)算每路信號(hào)的每個(gè)數(shù)據(jù)的存儲(chǔ)地址,由于每路數(shù)據(jù)都是不同數(shù)據(jù)類型的,因此必須要將每路地址的計(jì)算與其數(shù)據(jù)嚴(yán)格地對(duì)應(yīng)起來(lái),要正確的保存好每次寫數(shù)據(jù)操作的地址,以便產(chǎn)生下次操作的正確地址。
仲裁模塊主要是保證多路數(shù)據(jù)對(duì)DDR2控制器的訪問(wèn)可以正確進(jìn)行。DDR2存儲(chǔ)控制器采用的是高效的burst操作(對(duì)于本設(shè)計(jì)采用的是burst為30),也就是在一次讀操作或者是寫操作的過(guò)程中要連續(xù)處理burst長(zhǎng)度所定義的數(shù)據(jù)個(gè)數(shù)(在本設(shè)計(jì)中每次讀寫操作要完成30個(gè)64位數(shù)據(jù)的讀出或?qū)懭?。這樣在一次請(qǐng)求操作被響應(yīng)之后,在接下來(lái)的15個(gè)周期只能傳輸這路數(shù)據(jù),在將這路數(shù)據(jù)傳輸完成之前不能再響應(yīng)其他路數(shù)據(jù)的操作請(qǐng)求,這樣就有可能導(dǎo)致其他多路數(shù)據(jù)的操作請(qǐng)求在本次操作結(jié)束之后同時(shí)到來(lái),這樣就要求仲裁模塊必須要很好地控制每路數(shù)據(jù)之間的操作順序,使得多路信號(hào)對(duì)存儲(chǔ)器的訪問(wèn)機(jī)率大致相同。鑒于此,本設(shè)計(jì)中采用了輪詢的機(jī)制。
讀通路和寫通路基本類似,只是讀通路不需要對(duì)數(shù)據(jù)進(jìn)行拼接,相反的需要對(duì)數(shù)據(jù)進(jìn)行拆分,將DDR2存儲(chǔ)器輸出的64位數(shù)據(jù)拆分成原始輸入時(shí)的數(shù)據(jù),并將這些數(shù)據(jù)存入讀操作端的FIFO中。這樣在外部請(qǐng)求數(shù)據(jù)數(shù)據(jù)時(shí),若要求的數(shù)據(jù)已經(jīng)在FIFO中則直接將數(shù)據(jù)輸出即可,不需要再向DDR2存儲(chǔ)控制器請(qǐng)求,若要求的數(shù)據(jù)還沒(méi)在FIFO中則要先向DDB2存儲(chǔ)控制器請(qǐng)求數(shù)據(jù),將數(shù)據(jù)存入該FIFO,之后再將FIFO中本次要求讀出的數(shù)據(jù)輸出。
接口控制模塊主要是接收寫通路的寫操作請(qǐng)求信號(hào)以及它對(duì)應(yīng)的地址信號(hào)和數(shù)據(jù)信號(hào),讀通路的讀操作請(qǐng)求信號(hào)以及它對(duì)應(yīng)的地址信號(hào),并將這些信號(hào)按照DDR2存儲(chǔ)控制器的時(shí)序要求發(fā)送給DDR2存儲(chǔ)控制器,之后再接收DDR2存儲(chǔ)控制器發(fā)回的讀數(shù)據(jù)。DDR2存儲(chǔ)控制器的讀寫操作時(shí)序如圖3所示。
3 仿真驗(yàn)證
對(duì)本設(shè)計(jì)的驗(yàn)證采用的是6路8位數(shù)據(jù)以27 MHz的頻率寫入讀出操作。對(duì)其進(jìn)行整體讀寫仿真的時(shí)序結(jié)果如圖4所示。
由該圖可知,當(dāng)將數(shù)據(jù)寫入到DDR2中的數(shù)量到達(dá)一定程度時(shí),開(kāi)始向向外讀出數(shù)據(jù),寫入的時(shí)序和讀出的時(shí)序整體上符合設(shè)計(jì)要求。
對(duì)讀寫操作的具體仿真時(shí)序如圖5所示。
由該圖可知,寫操作時(shí)的各種控制指令以及地址和數(shù)據(jù)的發(fā)送都是完全正確的;讀操作時(shí)的各種控制指令以及地址和數(shù)據(jù)的發(fā)送也是完全正確的。
對(duì)該設(shè)計(jì)采用XILINX Spartan6系列的xc6slx16—2ftg256器件進(jìn)行綜合,其結(jié)果如圖6所示。
由該圖可知該設(shè)計(jì)使用的邏輯資源相當(dāng)小,其中寄存器還不到總數(shù)的百分之一,查找表也只使用了總數(shù)的百分之二。
4 改進(jìn)
在一般情況下,DDR2的硬件存儲(chǔ)速率很快,其會(huì)等待存儲(chǔ)控制器發(fā)送下一個(gè)操作指令,而DDR2存儲(chǔ)控制器的操作指令是由用戶接口發(fā)出的,因此可以提出以下改進(jìn)方案。可以在存儲(chǔ)控制器前端添加多個(gè)FIFO,將與操作有關(guān)的所有指令、地址以及數(shù)據(jù)對(duì)應(yīng)起來(lái)存入這些FIFO中,這樣等到DDR2存儲(chǔ)控制器將本次操作完成之后自動(dòng)將所有FIFO中與下次操作有關(guān)的指令和數(shù)據(jù)讀出,直接進(jìn)行下一次DDR2的操作,與此同時(shí)用戶接口部分在這些FIFO沒(méi)滿的情況下,還仍然向這些FIFO中寫入要操作的所有指令和數(shù)據(jù)。
5 結(jié)論
由以上仿真結(jié)果可知,該設(shè)計(jì)在整個(gè)設(shè)計(jì)讀寫頻率很高時(shí)仍然可以保證所有數(shù)據(jù)的正確操作,不會(huì)存在數(shù)據(jù)的丟失或者錯(cuò)誤。由以上綜合結(jié)果可知,該設(shè)計(jì)占用的FPGA片上資源很少,運(yùn)行頻率很高,基本可以滿足所有設(shè)計(jì)的要求。因此可知,該設(shè)計(jì)具有很高的工作頻率,解決了電路設(shè)計(jì)中DDR2存儲(chǔ)器讀寫操作頻率的瓶頸問(wèn)題,使得整個(gè)設(shè)計(jì)的工作效率得到很大的提高。