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

在對DDR SDRAM 初始化完成之后,就可進(jìn)行讀、寫(xiě)或其他操作。在執行讀(寫(xiě))命令之前,先要激活將要讀(寫(xiě))的行,之后便可對該行進(jìn)行突發(fā)讀(寫(xiě))。在控制器的設計中,所有的讀寫(xiě)命令都是不帶預充電的,因此,某一行被激活之后將一直處于激活狀態(tài),直到用戶(hù)發(fā)送突發(fā)終止命令,此時(shí)控制器將自動(dòng)產(chǎn)生一個(gè)預充電命令來(lái)關(guān)閉當前行。這樣,某一行被激活之后用戶(hù)便可進(jìn)行連續的突發(fā)讀(寫(xiě))操作,從而節省了每次突發(fā)讀寫(xiě)所需要的激活時(shí)間,提高了系統的數據吞吐率。
評論