柴若楠,張景芝,和志強
(河北經(jīng)貿(mào)大學信息技術學院,河北石家莊 050061)
大容量數(shù)據(jù)存儲器設計與實現(xiàn)
柴若楠,張景芝,和志強
(河北經(jīng)貿(mào)大學信息技術學院,河北石家莊 050061)
介紹了一種大容量數(shù)據(jù)存儲器的設計方法,該存儲器以高集成度FPGA為控制核心、以大容量SDRAM為存儲介質,利用網(wǎng)絡傳輸接口,實現(xiàn)了大容量數(shù)據(jù)的快速、實時、高效存儲。
存儲器;SDRAM控制器;FPGA;Verilog
隨著科學技術的發(fā)展,通訊、航天等領域對數(shù)據(jù)采集系統(tǒng)的要求越來越高,不僅要求較高的采集精度和采集速率,還要求采集設備網(wǎng)絡化及大容量數(shù)據(jù)存儲。為此,筆者設計了大容量數(shù)據(jù)存儲器,具有簡單、可移植及靈活的特性??蓮V泛應用到多種嵌入式系統(tǒng)中,大大縮短開發(fā)周期,具有很強的市場競爭力[1]。
整個存儲器設計采用64Mbit的SDRAM(同步動態(tài)隨機存儲器)作為存儲介質,與傳統(tǒng)的SRAM、FIFO等相比,其存儲容量大、價格便宜、讀寫速度快。但是,SDRAM的接口復雜,需要相應的控制器支持。筆者通過使用Verilog語言對FPGA芯片進行設計,實現(xiàn)SDRAM控制器。
存儲器總體結構框圖如圖1所示。存儲器設計采用了ALTERA公司的CYCLONEII系列的EP2C5Q208芯片,SDRAM使用三星公司的K4S641632芯片,SDRAM控制器使用硬件描述語言Verilog實現(xiàn)。在網(wǎng)絡環(huán)境下的數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)量非常大,數(shù)據(jù)通過網(wǎng)絡傳輸接口,經(jīng)過前端處理及A/D轉換后需要在SDRAM中緩存,通過設計SDRAM控制器實現(xiàn)對SDRAM初始化、SDRAM刷新控制以及數(shù)據(jù)讀寫控制。
存儲器設計中SDRAM存儲有復雜的時序要求,需要設計SDRAM控制器對其進行控制。
1.2.1 SDRAM常用命令
三星K4S641632芯片存儲容量為64Mbit,數(shù)據(jù)寬度為32位,工作時鐘為133MHz,所有輸入都以系統(tǒng)時鐘的上升沿為基準[2]。SDRAM命令控制信息見表2,各命令功能如下。
(1)無操作:當SDRAM被片選,且處于空閑或者等待狀態(tài)時,這個命令阻止意外的命令被寄存。
(2)模式寄存器設置:初始化時通過裝載A0~A11進行模式寄存器設置。其中A11~A10是用戶保留位;A9用來配置寫突發(fā)模式;A8~A7是操作模式,通常為“00”,代表標準操作模式;A6~A4設置CAS延遲時間;A3決定突發(fā)操作模式是順序還是交替;最后的三位A2~A0用來配置突發(fā)長度。如表1所示。
圖1 數(shù)據(jù)存儲器總體結構
表1 工作模式寄存器
(3)激活:以三星公司的這款K4S641632芯片為例,其內部分為4個Bank,該命令用于選擇某一空閑Bank中的一行。該操作經(jīng)過t RCD個周期后進行讀或寫操作。
(4)預充電:即L-Bank關閉現(xiàn)有工作行,準備打開新行的操作。由于SDRAM的尋址具有獨占性,同一時刻每個Bank內只能有一行被激活,如果需要訪問某一Bank內的另外一行,就必須使用預充電命令將當前打開的行關閉[3]。在發(fā)出預充電命令之后,要經(jīng)過一段時間才能允許發(fā)送行有效命令打開新的工作行。
(5)自動刷新:動態(tài)RAM的本質決定了必須定時對SDRAM進行刷新[3],刷新有固定的周期,刷新過程中,所有L-Bank都停止工作,依次對所有行進行操作。目前公認的標準認為,64ms是存儲體中電容的數(shù)據(jù)有效保存期的上限,每次刷新所占用的時間為9個時鐘周期。64ms之后則再次對同一行進行刷新,如此周而復始進行循環(huán)刷新。
(6)讀/寫操作:某行被激活后,通過此命令來開始一段讀操作或寫操作。
表2 SDRAM命令控制信號
1.2.2 SDRAM工作流程
(1)SDRAM初始化時的操作。系統(tǒng)上電,將cke置高并給出Nop命令,此時處于i_nop狀態(tài)。保持上述狀態(tài)200μs后,跳轉到i_pre狀態(tài),發(fā)出預充電命令,接著跳轉到i_tRP等待狀態(tài),經(jīng)過t RP時間后,即完成對所有L-Bank預充電。然后狀態(tài)跳轉到i_AR1,發(fā)第一次刷新命令,再在i_t RF1等待t RF時間后發(fā)第二次刷新命令。依次執(zhí)行8次刷新。接下來轉到狀態(tài)i_MRS,進行模式寄存器設置。等待t_MRD時間后初始化完成。初始化完成后,SDRAM處于i_done狀態(tài),讀、寫和刷新操作準備就緒。初始化狀態(tài)轉移如圖2。
(2)SDRAM正常工作時的操作。SDRAM初始化完成后,即進入w_idle狀態(tài)。等待訪問請求。控制器接到刷新請求信號后,即進入刷新w_AR狀態(tài),經(jīng)過t RFC時間后,刷新完成,進入w_idle狀態(tài),等待讀寫請求。當讀寫請求到來時,進入w_ACTIVE激活狀態(tài),經(jīng)過t RCD時間后,進入w_READ或者w_WRITE狀態(tài)。當進入w_READ后,需要經(jīng)過tCL時間后才進行讀操作。w_ WRITE則直接進入寫操作,命令發(fā)出同時數(shù)據(jù)線上輸出待寫的第一個數(shù)據(jù)。
需要說明的是(1)在SDRAM中只有一條指令在執(zhí)行,先到的指令先執(zhí)行。其他指令到來時等待前一條指令執(zhí)行完;(2)讀寫指令與刷新請求同時到來時,刷新操作先執(zhí)行,這是防止沒有及時刷新而丟失SDRAM內容。SDRAM工作流程圖如圖3所示。
圖2 SDRAM初始化狀態(tài)轉移圖
圖3 SDRAM工作流程圖
根據(jù)SDRAM的指令操作特點將SDRAM控制器劃分為狀態(tài)控制模塊、命令模塊和數(shù)據(jù)讀寫模塊[4]三個主要模塊。
sdram_ctrl是SDRAM狀態(tài)控制模塊,該模塊主要完成SDRAM的上電初始化以及刷新控制、讀寫控制等狀態(tài)的變化[4]。
sdram_cmd是SDRAM命令模塊,該模塊根據(jù)sdram_ctrl模塊的不同狀態(tài)指示輸出相應的SDRAM控制命令和地址。
sdram_wr是SDRAM數(shù)據(jù)讀寫模塊,該模塊同樣是根據(jù)sdram_ctrl模塊的狀態(tài)指示完成SDRAM數(shù)據(jù)總線的控制,SDRAM的數(shù)據(jù)讀寫都在該模塊完成。
本文中的存儲器設計采用了FPGA芯片、Verilog編程語言和QuartusII開發(fā)及Modesim仿真工具,已應用到數(shù)字存儲示波器上。僅僅通過改變存儲器的個別參數(shù)就可以將其移植到不同的嵌入式系統(tǒng)中,大大縮短開發(fā)周期,具有廣泛的應用價值及強大的市場競爭力。
[1]李燕萍.基于FPGA的連續(xù)存儲系統(tǒng)實現(xiàn)[D].北京:首都師范大學,2007:1-4.
[2]SAMSUNG corporation.K4S641632E DATASHEET.2003.
[3]段然,樊曉椏,張盛兵,沈戈,梁婕.基于狀態(tài)機的SDRAM控制器的設計與實現(xiàn)[J].計算機工程與應用.2005,17:111-112.
[4]吳厚航.深入淺出玩轉FPGA[M].北京航空航天大學出版社.2010.
[5]ddhttp://www.sumsung.com/products/Semiconductor/Sync_AsyncDRAM/SDRSDRAM/Component//64Mbit/K4S641632E.htm.
The design and implementation of large-capacity data storage
CHAI Ruo-nan,ZHANG Jing-zhi,HE Zhi-qiang
(CollegeofInformationTechnology,HebeiUniversityofEconomicsandBusiness,ShijiazhuangHebei050061,China)
In this paper,design method of the large-capacity data storage is discussed.It uses FPGA as the kernel controller and SDRAM as the storage media.Through the network interfaces,the fast,realtime and efficient storage of the large-capacity data is achieved.
Storage;SDRAM controller;FPGA;Verilog
TP333
:A
1001-9383(2011)03-0061-05
2011-06-30
河北省應用基礎研究計劃項目(10963529D)、河北省高等學校科學技術研究項目(ZD2010213)
柴若楠(1987-),女,碩士研究生,主要研究方向:高速數(shù)據(jù)采集技術.