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