基于FPGA的DDR內存條的控制研究
1 內存條的工作原理
本文引用地址:http://www.j9360.com/article/201706/349333.htmDDR內存條是由多顆粒的DDR SDKAM芯片互連組成,DDR SDRAM是雙數據率同步動態隨機存儲器的縮寫。DDR SDRAM采用雙數據速率接口,也就是在時鐘的正沿或負沿都需要對數據進行采樣。在本設計中采用的內存是hynix公司的lGB的HYMD564M646CP6-J。內存條的工作原理與單顆粒內存芯片的工作原理一樣,主要的控制信號以及控制信號完成的主要功能如表1所示。
以上的控制信號及地址信號都是由差分時鐘信號中CK的正沿觸發。DDR SDRAM必須按照一定的工作模式來完成初始化,完成初始化后才能進入到讀寫過程。DDR SDRAM的控制流程如圖1所示。
初始化的過程為:(1)上電后,延時200us等待時鐘穩定,然后將CKE拉高,執行一次NOP或者DESELECT操作。(2)執行一次precharge all操作。(3)設置擴展模式寄存器(BAl為低電平BA0為高電平)使能DLL。(4)設置模式寄存器(BAl,BA0均為低電平)復位DLL。(5)執行一次pre-charge all指令。(6)再經過2個自刷新(Auto refresh)指令后再次設置模式寄存器設置操作模式。(7)延時200個周期才能進行讀操作。DDR SDRAM的擴展模式寄存器和模式寄存器的定義如圖2和圖3所示。
完成初始化后進入圖1中的IDEL狀態,此時可以進行讀寫操作。在進行寫操作時,首先要進入Row active狀態,此時選中要操作的bank與row。然后執行NOP操作等待tRCD的時間后可以進入寫狀態。
2 內存條電路設計
由于DDR SDRAM采用的時鐘頻率較高,加上DDRSDRAM的數據率為時鐘速率的兩倍,DDR SDRAM對時鐘質量的要求很高,必須保證時鐘上升沿的時間小于5%的時鐘周期。DDR SDRAM的數據線與相對應的數據采樣信號(DQS)的長度要盡量相等,來保證數據的采樣窗口盡量要大一些。由于信號質量要求高,我們將所有的信號線都采用微電線和帶狀線來傳輸。使用FPGA和內存條的IBIS模型進行仿真來保證設計中信號的完整性,我們將信號分為3類,第一類,由FPGA到DDR SDRAM的時鐘差分信號;第二類,由FPGA到DDR SDRAM的控制線;第三類,FPGA與DDR SDRAM之間的雙向傳輸線。對三類IBIS模型的herperlinx仿真如圖4:
通過仿真我們可以確定3類信號線中帶狀線和微帶線板厚,銅厚,以及信號線的線寬,線長等參數。
3 FPGA對DDR SDRAM的控制
本設計中使用的FPGA是ALTERA公司的cyclone II系列的EP2C20F484C6。對內存條的工作模式設置為BL=4,CL=3,如圖7為FPGA對DDR SD-RAM的控制模塊框圖。
其中,Clkin為外部輸入的時鐘信號,為了使FPGA到DDR SDRAM的兩對時鐘信號的質量盡量好,使用FPGA內部的兩個鎖相環輸出差分時鐘信號。為了保證鎖相環輸出的兩路差分信號相位一致,在設計PCB時我們使晶振輸出到FPGA兩個PLL輸入的布線距離相等,為了保證兩個鎖相環輸出信號到達DDR SDRAM接口時相位一致,由FPGA鎖相環輸出到DDR SDRAM的接口布線長度相等。
控制模塊采用的工作模式是按照圖2所示的狀態來跳轉,上電以后首先是對DDR SDRAM進行初始化,初始化完成以后就可以進出等待工作的狀態。此時刷新計數器開始計數,等待7.8 us后給出刷新請求,在空閑狀態時(IDEL)刷新請求的優先級最高,響應刷新請求后執行REFR-ESH指令同時復位刷新計數器。初始化后如果FIF00的讀空標志為O說明FIF00中有數據,此時可以進入到寫狀態。由于采用的是BL=4的工作狀態,寫操作每次都寫入4個64位的數。所以,我們將輸入的數據進行并位成256位的數,每次寫操作只需要從FIF00中讀出一個256位的數。假設我們采用1OOMHz的時鐘,每寫4個64位的數大概需要10個時鐘周期。如果輸入的數據位寬為16位,那么由外部傳給FPGA的數據率要小于160 MHz。寫操作完成的時候進入空閑狀態,等待刷新標志或者讀空標志。讀的時候需要等待系統發出讀命令(read),然后進入讀狀態,讀出的數據由Ddrout[127:O]送到FIF01和FIF02中。通過控制FIF01和FIF02的寫請求信號來實現將數據分別寫入。讀的時候BL=4每次讀出4個64位數,執行一次讀操作大約需要10個時鐘周期。如果輸出的數據位寬為16位,那么數據由FPGA向外傳輸的速率要小于160 MHzo控制模塊在讀寫內存條的時候控制數據模塊來實現數據率為時鐘速度的兩倍,數據模塊使用兩個時鐘一個是系統時鐘一個是2倍的系統時鐘。
因為DDR SDRAM的控制相對復雜,我們可以使用內存條的vefilog模型,通過對內存條的vefilog仿真,我們可以知道自己程序的正確性,圖8為modelsim中的仿真波形。如果仿真過程正確,我就可以對程序進行編譯,布局布線,然后下載到FPGA中,由于布局布線的延時,輸出的信號波形與仿真波形不一致,此時,可以通過調整FPGA內部的鎖相環來調整時序,實現對內存條的控制。
4 結束語
通過介紹內存條的工作原理,以及內存條電路設計時的注意事項的介紹,我們可以更合理的實現FPGA與內存條的互連。最后,給出FPGA內部對內存條控制的方法,以及給出仿真波形,實現對內存條的控制。實現FPGA對DDRSDRAM內存條的控制,可以實現大容量高速的數據存儲,在工程中的得到廣泛的應用
評論