基于FPGA 的DDR SDRAM控制器在高速數(shù)據(jù)采集系統(tǒng)中
實(shí)現(xiàn)數(shù)據(jù)的高速大容量存儲是數(shù)據(jù)采集系統(tǒng)中的一項關(guān)鍵技術(shù)。本設(shè)計采用Altera 公司Cyclone系列的FPGA 完成了對DDR SDRAM 的控制,以狀態(tài)機(jī)來描述對DDR SDRAM 的各種時序操作,設(shè)計了DDR SDRAM 的數(shù)據(jù)與命令接口。用控制核來簡化對DDR SDRAM 的操作,并采用自頂至下模塊化的設(shè)計方法,將控制核嵌入到整個數(shù)據(jù)采集系統(tǒng)的控制模塊中,完成了數(shù)據(jù)的高速采集、存儲及上傳。使用開發(fā)軟件Quartus II 中內(nèi)嵌的邏輯分析儀SignalTap II 對控制器的工作流程進(jìn)行了驗(yàn)證和調(diào)試。最終采集到的數(shù)據(jù)波形表明,完成了對DDR SDRAM 的突發(fā)讀寫操作,達(dá)到了預(yù)期設(shè)計的目標(biāo)。
本文引用地址:http://2s4d.com/article/189786.htmDDR SDRAM 是Double Data Rate SDRAM 的縮寫,即雙倍速率同步動態(tài)隨機(jī)存儲器。
DDR 內(nèi)存是在SDRAM 內(nèi)存基礎(chǔ)上發(fā)展而來的,能夠在時鐘的上升沿和下降沿各傳輸一次數(shù)據(jù),可以在與SDRAM 相同的總線時鐘頻率下達(dá)到更高的數(shù)據(jù)傳輸率。本設(shè)計中采用Altera 公司Cyclone 系列型號為EP1C6Q240C8 的FPGA 實(shí)現(xiàn)控制器,以Hynix 公司生產(chǎn)的型號為HY5DU121622B(L)TP 的DDR SDRAM 為存儲器,完成了對數(shù)據(jù)的高速大容量存儲。
1 DDR SDRAM 的控制原理及存儲功能的實(shí)現(xiàn)
DDR SDRAM 支持的常用命令有7 種:空操作(NOP)、激活操作(Active)、突發(fā)讀(BurstRead)、突發(fā)寫(Burst Write)、自動刷新(Autorefresh)、預(yù)充電(Precharge)、模式寄存器配置(Mode Register Set)。所有的操作命令都是通過信號線RAS_N、CAS_N、WE_N 共同控制來實(shí)現(xiàn)的。在對DDR SDRAM 進(jìn)行存取數(shù)據(jù)操作之前,首先要對其初始化,即設(shè)置DDR SDRAM的普通模式寄存器和擴(kuò)展模式寄存器,確定DDR SDRAM 的工作方式,這些設(shè)置包括突發(fā)長度、突發(fā)類型、CAS 潛伏期和工作模式以及擴(kuò)展模式寄存器中的對DDR SDRAM 內(nèi)部延遲鎖定回路(DLL)的使能與輸出驅(qū)動能力的設(shè)置。
初始化完成之后,DDR SDRAM 便進(jìn)入正常的工作狀態(tài),此時便可對存儲器進(jìn)行讀寫和刷新。DDR SDRAM 在一對差分時鐘的控制下工作。命令(地址和控制信號)在每個時鐘的上升沿被觸發(fā)。隨著數(shù)據(jù)DQ 一起傳送的還包括一個雙向的數(shù)據(jù)選通信號DQS,接收方通過該信號來接收數(shù)據(jù)。DQS 作為選通信號在讀周期中由DDR SDRAM 產(chǎn)生,在寫周期中由存儲器的控制器產(chǎn)生。該選通信號與數(shù)據(jù)相關(guān),其作用類似于一個獨(dú)立的時鐘,并滿足相應(yīng)的時序要求。由于DDR SDRAM 的數(shù)據(jù)接口在時鐘的兩個沿的觸發(fā)下工作,其數(shù)據(jù)寬度是存儲器數(shù)據(jù)寬度的一半。為實(shí)現(xiàn)數(shù)據(jù)的大容量存儲,設(shè)計時采用的是一個控制核同時對兩片DDR SDRAM 進(jìn)行操作,外接數(shù)據(jù)線的寬度由單片DDR SDRAM 的16 位擴(kuò)展到32位。
對DDR SDRAM 的讀和寫操作是基于突發(fā)的,即從一個選定的地址單元開始,連續(xù)存取已設(shè)置長度的地址單元,該長度就是所謂的突發(fā)長度。DDR SDRAM 提供的可編程的讀或?qū)懙耐话l(fā)長度為2,4 或8。數(shù)據(jù)的存取以一個激活命令(Active)開始,接著便是讀(BurstRead)或?qū)?Burst Write)命令。與激活命令一起被觸發(fā)的地址位用來選擇將要存取的區(qū)和頁(或行),與讀或?qū)懨钜黄鸨挥|發(fā)的地址位用來選擇突發(fā)存取的起始列單元。讀命令被觸發(fā)后,數(shù)據(jù)將在1.5~3 個時鐘周期之后出現(xiàn)在數(shù)據(jù)總線上。這個延遲就是所謂的CAS 潛伏期(CAS latency),即從DDR SDRAM 內(nèi)核讀出數(shù)據(jù)到數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上所需要的時間。CAS 潛伏期的大小與SDRAM 的速度和存儲器的時鐘頻率有關(guān)。當(dāng)要存取一個不同行的地址單元時,需要通過一個預(yù)充電(Precharge)操作關(guān)閉當(dāng)前行。
自動刷新(Autorefresh)命令用來周期性地刷新DDR SDRAM,以保持其內(nèi)部的數(shù)據(jù)不丟失。2 DDR SDRAM 控制器的設(shè)計DDR SDRAM 控制器的功能包括:
(1)初始化DDR SDRAM;
(2)簡化DDR SDRAM的讀寫時序;
(3)將DDR SDRAM 接口的雙時鐘沿數(shù)據(jù)轉(zhuǎn)換為單時鐘沿數(shù)據(jù),使得對DDR SDRAM 的操作類似于普通RAM;
(4)控制器還要產(chǎn)生周期性的刷新命令來維持DDR SDRAM 內(nèi)的數(shù)據(jù)而不丟失。其控制轉(zhuǎn)換圖如圖1 所示。
在對DDR SDRAM 初始化完成之后,就可進(jìn)行讀、寫或其他操作。在執(zhí)行讀(寫)命令之前,先要激活將要讀(寫)的行,之后便可對該行進(jìn)行突發(fā)讀(寫)。在控制器的設(shè)計中,所有的讀寫命令都是不帶預(yù)充電的,因此,某一行被激活之后將一直處于激活狀態(tài),直到用戶發(fā)送突發(fā)終止命令,此時控制器將自動產(chǎn)生一個預(yù)充電命令來關(guān)閉當(dāng)前行。這樣,某一行被激活之后用戶便可進(jìn)行連續(xù)的突發(fā)讀(寫)操作,從而節(jié)省了每次突發(fā)讀寫所需要的激活時間,提高了系統(tǒng)的數(shù)據(jù)吞吐率。
評論