楊 斌,段哲民,高 峰
(西北工業大學 電子信息學院,陜西 西安 710129)
現如今,隨著電子技術和通信技術的飛速發展,電路設計對存儲器的要求也越來越高,其主要體現在對存儲器的容量和存儲操作速度兩個方面。鑒于此,JEDEC定義了DDR2[1]SDRAM技術標準[2],其以低能耗、低發熱量、高密度以及高頻率成為了現代存儲技術的核心器件。DDR2自身的工作頻率可以達到677 MHz,幾乎可以滿足所有電路設計的要求。而這也就使得整個電路設計的頻率瓶頸出現在了用戶設計部分與DDR2存儲器之間的邏輯上,主要是因為DDR2本身的結構特性使得DDR2的操作時序很復雜苛刻。而這之間的部分又主要分為DDR2存儲控制器和用戶接口部分[3]。現如今已經有了很多的廠家在生產DDR2存儲控制器,其中以XILINX公司設計的DDR2存儲控制器效率最高使用最為廣泛,該存儲控制器的單獨操作頻率非常高,完全不會影響DDR2存儲器的操作,因此這又將整個電路系統的頻率瓶頸縮小到了用戶接口部分。用戶接口的設計有很多種方案,而FPGA以其高速度、豐富的片上資源、靈活的設計以及簡單方便的調試特性成為了用戶接口設計的必然選擇。
DDR2存儲器一般作為片上系統的輔助器件,其應用的一般模式如圖1所示。

圖1 DDR2存儲器一般的應用模式框圖Fig.1 Block diagram of DDR2 memory general application model
用戶設計部分是整個片上系統的核心,主要是完成系統要實現的所有任務,對整個系統進行整體的調度和控制。
用戶接口部分主要是接收用戶設計部分傳送的操作數據,以及與這些操作數據相對應的控制指令,之后將這些數據進行整理,然后按照一定的時序要求發出。如果操作的是多路不同種類的數據時,則還要將這多路數據進行仲裁,保證所有數據都不會被發錯或者丟失。
DDR2存儲控制器主要是接收用戶接口部分發給的特定的讀寫操作控制指令和已經整理好的數據,將這些指令進行進一步的解析,最后將經過解析產生的那些DDR2存儲器硬件可以識別的信號以及與讀寫有效信號有關的寫數據輸出給DDR2,讀數據從DDR2存儲器中讀回。
DDR2存儲器主要是按照讀寫有效信號將要處理的數據進行讀出和寫入操作。
用戶接口設計的原理如圖2所示。
其主要包括寫數據通路、讀數據通路以及接口控制3大模塊。

圖2 用戶接口設計的原理框圖Fig.2 Principle block diagram of user interface design
寫數據通路按照輸入存儲器路數的不同分為以下兩種:只有一路數據輸入時只有控制模塊和地址計算模塊;當有多路數據輸入時,不僅有控制模塊和地址計算模塊還有仲裁模塊。
控制模塊主要是將輸入的數據進行一次2乒乓操作的緩存,再將緩存后的數據拼接成64位數據,之后在仲裁模塊允許該路數據寫操作時將這些數據發送給仲裁模塊。
地址計算模塊主要是計算每路信號的每個數據的存儲地址,由于每路數據都是不同數據類型的,因此必須要將每路地址的計算與其數據嚴格地對應起來,要正確的保存好每次寫數據操作的地址,以便產生下次操作的正確地址。
仲裁模塊主要是保證多路數據對DDR2控制器的訪問可以正確進行。DDR2存儲控制器采用的是高效的burst操作[4](對于本設計采用的是burst為30),也就是在一次讀操作或者是寫操作的過程中要連續處理burst長度所定義的數據個數(在本設計中每次讀寫操作要完成30個64位數據的讀出或寫入)。這樣在一次請求操作被響應之后,在接下來的15個周期只能傳輸這路數據,在將這路數據傳輸完成之前不能再響應其他路數據的操作請求,這樣就有可能導致其他多路數據的操作請求在本次操作結束之后同時到來,這樣就要求仲裁模塊必須要很好地控制每路數據之間的操作順序,使得多路信號對存儲器的訪問機率大致相同。鑒于此,本設計中采用了輪詢的機制[5]。
讀通路和寫通路基本類似,只是讀通路不需要對數據進行拼接,相反的需要對數據進行拆分,將DDR2存儲器輸出的64位數據拆分成原始輸入時的數據,并將這些數據存入讀操作端的FIFO中。這樣在外部請求數據數據時,若要求的數據已經在FIFO中則直接將數據輸出即可,不需要再向DDR2存儲控制器請求,若要求的數據還沒在FIFO中則要先向DDR2存儲控制器請求數據,將數據存入該FIFO,之后再將FIFO中本次要求讀出的數據輸出。
接口控制模塊主要是接收寫通路的寫操作請求信號以及它對應的地址信號和數據信號,讀通路的讀操作請求信號以及它對應的地址信號,并將這些信號按照DDR2存儲控制器的時序要求發送給DDR2存儲控制器,之后再接收DDR2存儲控制器發回的讀數據。DDR2存儲控制器的讀寫操作時序如圖3所示[6]。

圖3 DDR2存儲控制器的讀寫時序Fig.3 Read and write timing of DDR2 memory controller
對本設計的驗證采用的是6路8位數據以27 MHz的頻率寫入讀出操作。對其進行整體讀寫仿真的時序結果如圖4所示。
由該圖可知,當將數據寫入到DDR2中的數量到達一定程度時,開始向向外讀出數據,寫入的時序和讀出的時序整體上符合設計要求。

圖4 整體讀寫時序Fig.4 Overall read and write timing
對讀寫操作的具體仿真時序如圖5所示。
由該圖可知,寫操作時的各種控制指令以及地址和數據的發送都是完全正確的;讀操作時的各種控制指令以及地址和數據的發送也是完全正確的。
對該設計采用XILINX Spartan6系列的xc6slx16-2ftg256器件進行綜合,其結果如圖6所示。

圖5 具體讀寫時序Fig.5 Specific read and write timing

圖6 綜合結果Fig.6 Synthesis result
由該圖可知該設計使用的邏輯資源相當小,其中寄存器還不到總數的百分之一,查找表也只使用了總數的百分之二。
在一般情況下,DDR2的硬件存儲速率很快,其會等待存儲控制器發送下一個操作指令,而DDR2存儲控制器的操作指令是由用戶接口發出的,因此可以提出以下改進方案。可以在存儲控制器前端添加多個FIFO,將與操作有關的所有指令、地址以及數據對應起來存入這些FIFO中,這樣等到DDR2存儲控制器將本次操作完成之后自動將所有FIFO中與下次操作有關的指令和數據讀出,直接進行下一次DDR2的操作,與此同時用戶接口部分在這些FIFO沒滿的情況下,還仍然向這些FIFO中寫入要操作的所有指令和數據。
由以上仿真結果可知,該設計在整個設計讀寫頻率很高時仍然可以保證所有數據的正確操作,不會存在數據的丟失或者錯誤。由以上綜合結果可知,該設計占用的FPGA片上資源很少[7],運行頻率很高,基本可以滿足所有設計的要求。因此可知,該設計具有很高的工作頻率,解決了電路設計中DDR2存儲器讀寫操作頻率的瓶頸問題,使得整個設計的工作效率得到很大的提高。
[1]羅朝霞,高書莉.CPLD/FPGA設計及應用[M].北京:人民郵電出版社,2007.
[2]Hynix DDR2 SDRAM Device Operation&Timing Diagram[D].Hynix Semiconducter Inc,2004.
[3]Janzen J.DDR2 Offers New Features and Functionality[M].Micron Technology,2003.
[4]鄧麗.高帶寬低延時的DDR2內存控制器的研究與實現[D].長沙:國防科學技術大學,2006.
[5]張凱,李云崗.基于AMBA總線的DDR2 SDRAM控制器研究與實現[J].微電子學與計算機,2005,22(9):117-119,122.ZHANG Kai,LI Yun-gang.Based on the AMBA bus DDR2 SDRAM Controller[J].Microelectronics and Computer,2005,22(9):117-119,122.
[6]趙天云,王洪迅.DDR2 SDRAM控制器的設計與實現[J].微電子學與計算機,2005(3):203-207.ZHAOTian-yun,WANGHong-xun.Design and implementation of DDR2 SDRAM controller[J].Microelectronics and Computer,2005(3):203-207.
[7]須文波,胡丹.DDR2 SDRAM控制器的FPGA實現[J].江南大學學校:自然科學版,2006,5(2):145-148.XU Wen-bo,HU Dan.FPGA implementation of the DDR2 SDRAM Controller [J].Journal of Southern Yangtze University:Natural Science Edition,2006,5(2):145-148.