雷能芳
(渭南師范學(xué)院 數(shù)理學(xué)院,陜西 渭南 714000)
數(shù)據(jù)采集系統(tǒng)中SDRAM控制器的FPGA設(shè)計(jì)
雷能芳
(渭南師范學(xué)院 數(shù)理學(xué)院,陜西 渭南 714000)
針對SDRAM時(shí)序控制復(fù)雜等設(shè)計(jì)難點(diǎn),提出了一種基于現(xiàn)場可編程門陣列 (FPGA)設(shè)計(jì)SDRAM控制器的方法。使用狀態(tài)機(jī)的設(shè)計(jì)思想,采用Verilog硬件描述語言對時(shí)序控制程序進(jìn)行了設(shè)計(jì)。通過Modelsim SE 6.0開發(fā)平臺進(jìn)行了時(shí)序仿真,得到的SDRAM讀寫仿真波形圖時(shí)序合理、邏輯正確。
FPGA;SDRAM控制器;狀態(tài)機(jī);Verilog硬件描述語言;時(shí)序仿真
數(shù)據(jù)存儲是數(shù)據(jù)采集系統(tǒng)中的重要組成部分,同步動態(tài)隨機(jī)存儲器(Synchronous Dynamic Random Access Memory,SDRAM)因其具有精度高、讀寫速度快、支持突發(fā)式讀寫及價(jià)格低廉等優(yōu)點(diǎn),成為數(shù)據(jù)緩存器的首選存儲介質(zhì)。但其需要不斷地刷新,控制時(shí)序和機(jī)制比較復(fù)雜,給用戶操作帶來不便[1-2]。因此其接口控制電路的設(shè)計(jì)是關(guān)鍵。而且,隨著集成電路和可編程邏輯器件的快速發(fā)展,使得FPGA在處理速度、硬件資源和靈活性方面具有更大的優(yōu)越性[3-4]?;贔PGA的這種優(yōu)勢,本文提出了一種基于FPGA芯片,采用大容量高速緩存器SDRAM來對傳輸數(shù)據(jù)進(jìn)行緩存,不但解決了存儲容量問題,而且也解決了速率問題[5]。
1.1 SDRAM有以下幾個(gè)工作特性
1)SDRAM的初始化
SDRAM在上電后要有200 us的輸入穩(wěn)定期,在這個(gè)時(shí)間內(nèi)不可以對SDRAM接口做任何操作;之后由一個(gè)預(yù)充電指令完成對所有頁的預(yù)充電操作;接著發(fā)出8條刷新操作指令;最后在模式配置指令下完成SDRAM內(nèi)部模式寄存器的配置[6-8]。
2)訪問存儲單元
通常一個(gè)SDRAM中包含幾個(gè)Bank,SDRAM是以Bank為組織,由Bank地址線BA控制Bank之間的選擇,每個(gè)Bank的存儲單元是按行和列尋址的。為了減少I/O引腳數(shù)量,SDRAM復(fù)用地址線,所以在讀寫SDRAM時(shí),先由行激發(fā)命令激活要讀寫的Bank,并鎖存行地址,然后在讀寫指令有效時(shí)鎖存列地址。
3)刷新
為了提高存儲密度,SDRAM采用硅片電容存儲數(shù)據(jù),而電容總是傾向于放電,因此SDRAM光是上電并不能一直保存數(shù)據(jù),必須在電容放電完成之前給電容提前充一次電即執(zhí)行一次自動刷新指令以避免數(shù)據(jù)丟失。
4)預(yù)充電
由于SDRAM的尋址具有獨(dú)占性,所以在進(jìn)行讀寫操作后,如果要對另一行進(jìn)行尋址,就要將原來有效(工作)行關(guān)閉,重新發(fā)送行/列地址。Bank關(guān)閉現(xiàn)有工作行,準(zhǔn)備打開新行的操作就是預(yù)充電。
5)操作控制
SDRAM的具體控制命令由一些專用控制引腳和地址線輔助完成。CS、RAS、CAS和WR在時(shí)鐘上升沿的狀態(tài)決定具體操作動作,地址線和Bank選擇控制線在部分操作動作中作為輔助參數(shù)輸入。SDRAM具體操作指令如表1所示。
表1 SDRAM 操作命令真值表
1.2SDRAM的幾個(gè)重要參數(shù)
tRCD:SDRAM[8-10]行列地址線復(fù)用,地址線分兩次送出,先送行地址線,再送列地址線,而且二者之間要有一定時(shí)間間隔tRCD。
CL(CAS Latency,CAS 潛伏期):讀命令與數(shù)據(jù)有效之間的延遲時(shí)間。
tREF:對所有行完成一次刷新的時(shí)間。目前公認(rèn)的標(biāo)準(zhǔn)是,存儲體中電容的數(shù)據(jù)有效保存期上限是64 ms。
tRP(Precharge command Period,預(yù)充電有效周期):在發(fā)出預(yù)充電命令之后,要經(jīng)過一段時(shí)間才能允許發(fā)送行激發(fā)命令打開新的工作行。
BL(Burst Lengths,突發(fā)長度):對某一 Bank 同一行中相鄰的存儲單元連續(xù)進(jìn)讀/寫操作所涉及到的存儲單元(列)的數(shù)量。SDRAM可實(shí)現(xiàn)突發(fā)式的讀/寫,支持的突發(fā)長度可設(shè)置為1個(gè),2個(gè),4個(gè),8個(gè)數(shù)據(jù)周期或者全頁模式。SDRAM雖然支持?jǐn)?shù)據(jù)全頁突發(fā)傳輸方式,但一次最多只能傳輸完一行的數(shù)據(jù),這是因?yàn)楫?dāng)存儲數(shù)據(jù)所在的行不同時(shí),需要用預(yù)充電命令釋放當(dāng)前行并由行有效命令重新激活所需行。
本設(shè)計(jì)使用的SDRAM芯片是HY57V643220D型號芯片,有4個(gè)Bank,2根Bank選擇線BA1、BA0,每一個(gè) Bank 有 11 行(A10~A0)、8 列(A7~A0),容量為4Bankx 512 Kx 32 bit,即8 MB。FPGA采用ALTERA公司的Cyclone系列芯片EP1C12Q240C8。
SDRAM控制器邏輯圖見圖1。它主要由時(shí)序控制模塊、命令解析模塊及數(shù)據(jù)傳輸模塊[11-14]組成。下面詳細(xì)介紹各個(gè)子模塊的功能及Verilog HDL[15]設(shè)計(jì)方法。
圖1 SDRAM控制器邏輯圖
2.1 時(shí)序控制模塊
時(shí)序控制模塊是SDRAM控制器的核心。該模塊內(nèi)部設(shè)有兩個(gè)狀態(tài)機(jī),其中一個(gè)用來控制上電初始化的狀態(tài)遷移,另外一個(gè)用來控制正常工作時(shí)的狀態(tài)遷移。通過對各個(gè)狀態(tài)的保持時(shí)間的控制,完成SDRAM的上電初始化、定時(shí)刷新和讀寫控制等狀態(tài)的遷移。SDRAM初始化時(shí)狀態(tài)遷移示意圖如圖2所示,正常工作時(shí)狀態(tài)遷移示意圖如圖3所示。
圖2 初始化狀態(tài)遷移示意圖
圖3 SDRAM讀寫狀態(tài)遷移示意圖
系統(tǒng)加電后SDRAM控制器先進(jìn)入初始化狀態(tài),依次完成如下過程:上電等待至少200 us;所有Bank預(yù)充電;8次自動刷新過程;模式寄存器設(shè)置等過程。初始化完成后,SDRAM將進(jìn)入正常工作狀態(tài)。
不操作SDRAM時(shí)控制器處于空閑狀態(tài)。在接到讀/寫請求之后,SDRAM處于行選通狀態(tài)。因?yàn)樾小⒘械刂肪€復(fù)用,二者之間有一個(gè)tRCD的時(shí)間間隔,此時(shí)間間隔通過行選通等待狀態(tài)來完成,之后控制器根據(jù)讀/寫請求信號進(jìn)入讀/寫數(shù)據(jù)狀態(tài),同時(shí)控制器產(chǎn)生一個(gè)SDRAM讀/寫應(yīng)答信號。如果控制器產(chǎn)生的是讀應(yīng)答信號,經(jīng)過CL的潛伏期進(jìn)入讀操作;如果控制器產(chǎn)生的是寫應(yīng)答信號,SDRAM開始進(jìn)行寫操作。在完成讀/寫操作后若需要換行進(jìn)行讀/寫,控制器必須執(zhí)行一次預(yù)充電命令關(guān)閉原來有效工作行,然后進(jìn)入到空閑狀態(tài)等待下一輪讀/寫操作。SDRAM要不斷進(jìn)行刷新才能保留住數(shù)據(jù),當(dāng)有自刷新請求信號產(chǎn)生時(shí),控制器進(jìn)入自刷新狀態(tài),而且自刷新操作優(yōu)先級高于讀/寫操作。
2.2 命令解析模塊
命令解析模塊是利用SDRAM命令真值表,根據(jù)時(shí)序控制模塊產(chǎn)生的各個(gè)不同狀態(tài)對FPGA和SDRAM 的接口控制信號 cke、ras_n、cas_n、we_n 等進(jìn)行賦值,從而來實(shí)現(xiàn)對SDRAM的控制。
2.3 數(shù)據(jù)傳輸模塊
數(shù)據(jù)傳輸模塊就是要在指定的時(shí)間狀態(tài)里,根據(jù)時(shí)序控制模塊的不同狀態(tài)指示讀寫SDRAM相應(yīng)地址的數(shù)據(jù),以實(shí)現(xiàn)對SDRAM數(shù)據(jù)總線的控制。由于dataout是雙向數(shù)據(jù)線,故要有一個(gè)方向控制位,也就是當(dāng)作為輸入數(shù)據(jù)線時(shí),輸出就是高阻態(tài);當(dāng)作為輸出口時(shí),輸入就為高阻態(tài)。
在本設(shè)計(jì)中,突發(fā)長度BL設(shè)置為全頁突發(fā)模式,潛伏期CL設(shè)置為3,行列地址線有效時(shí)間間隔tRCD設(shè)置為3。使用仿真工具M(jìn)odelsim SE對SDRAM控制器進(jìn)行了時(shí)序仿真[7-8]。圖4為突發(fā)寫操作的時(shí)序仿真波形,行選通后再經(jīng)過3個(gè)時(shí)鐘周期,發(fā)出寫操作命令,依次往Bank 0中寫入206、207、208、209等256個(gè)32位數(shù)據(jù)。圖5為突發(fā)讀操作的時(shí)序仿真波形,行選通后再經(jīng)過3個(gè)時(shí)鐘周期,發(fā)出讀操作命令,等待3個(gè)時(shí)鐘的潛伏期,從SDRAM的Bank 0 中依次讀出 206、207、208、209 等 256 個(gè) 32位數(shù)據(jù),實(shí)現(xiàn)了正確的全頁突發(fā)讀/寫操作。
圖4 SDRAM突發(fā)寫時(shí)序仿真波形
圖5 SDRAM突發(fā)讀時(shí)序仿真波形
文中結(jié)合SDRAM的控制指令,介紹了一種基于FPGA的SDRAM控制器的設(shè)計(jì)方案。設(shè)計(jì)中通過狀態(tài)機(jī)的設(shè)計(jì)思想,采用Verilog硬件描述語言編程實(shí)現(xiàn)對SDRAM邏輯控制。FPGA開發(fā)采用Altera公司的Quartus II9.1與Modelsim SE 6.0進(jìn)行綜合、布局布線與仿真。仿真結(jié)果表明,用現(xiàn)場可編程門陣列FPGA器件對SDRAM進(jìn)行復(fù)雜時(shí)序的控制設(shè)計(jì)是準(zhǔn)確可行的。SDRAM作為高速的數(shù)據(jù)緩存,在基于FPGA的控制下,將會在高速、高密度、高端的數(shù)字存儲和傳輸系統(tǒng)中得到更加廣泛的使用。
[1]李木國,何文濤,劉于之.基于PCI總線高速數(shù)據(jù)采集卡的SDRAM控制器設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2011,19(10):2578-2580.
[2]張富貴,陳宇熠,吳雪梅,等.SDRAM控制器的FPGA設(shè)計(jì)及驗(yàn)證[J].中國農(nóng)機(jī)化學(xué)報(bào),2013,39(5):238-241.
[3]惠為君.基于FPGA的SDRAM控制器[J].電腦知識與技術(shù),2015(5):241-242.
[4]項(xiàng)力領(lǐng),劉智,楊陽,等.單片SDRAM的數(shù)據(jù)讀寫乒乓操作設(shè)計(jì)[J].長春理工大學(xué)學(xué)報(bào):自然科學(xué)版, 2013,36(5):140-143.
[5]劉浩淼,卞樹檀,朱守保.SDRAM控制器簡易化設(shè)計(jì)[J].電子設(shè)計(jì)工程,2013,19(19):52-54.
[6]向強(qiáng),蔡威,姬高飛,等.基于FPGA的圖像數(shù)據(jù)緩存控制器設(shè)計(jì)[J].西南民族大學(xué)學(xué)報(bào):自然科學(xué)版, 2013,39(3):461-463.
[7]王永康,顧曉東.基于FPGA的星載圖像實(shí)時(shí)處理系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程, 2015,23(3):179-181.
[8]康磊,雒明世.基于FPGA的雙端口SDRAM控制器的實(shí)現(xiàn)[J].電氣自動化, 2013,35(4):97-99.
[9]柳炳琦,庹先國,蔣鑫.基于FPGA的多路數(shù)據(jù)采集系統(tǒng)的研究與設(shè)計(jì) [J].核電子學(xué)與探測技術(shù),2013,35(4):622-625.
[10]劉文彬,朱名日,鄭丹平.基于FPGA的大容量高速采集系統(tǒng)的設(shè)計(jì) [J].計(jì)算機(jī)測量與控制,2014,22(11):3751-3753.
[11]楊會建,田成軍,楊志娟,等.基于FPGA的SDRAM乒乓讀寫操作設(shè)計(jì)[J].長春理工大學(xué)學(xué)報(bào):自然科學(xué)版, 2015,38(2):67-71.
[12]侯宏錄,張文芳.基于FPGA的SDRAM控制器設(shè)計(jì)方案[J].兵工自動化, 2012,31(2):57-59.
[13]孫佳郡,劉子龍,何明軍.基于FPGA的高效率SDRAM讀寫雙口控制器設(shè)計(jì)[J].制造業(yè)自動化,2013,35(10):115-117.
[14]肖積濤,馬幼鳴,周鳴爭,等.基于FPGA的高速數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(6):217-219.
[15]王金明.數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL[M].4版.北京:電子工業(yè)出版社,2011.
Design of SDRAM controller in data acquisition system based on FPGA
LEI Neng-fang
(School of Mathematics and Physics, Weinan Teachers University, Weinan 714000, China)
According to the difficulty in complex timing control of SDRAM,a general SDRAM controller is designed using Field Programmable Gate Array (FPGA).The timing control program is designed by using the design concept of state machine and Verilog hardware description language.By using the simulator of the Modelsim SE 6.0,the simulative waveforms for reading and writing SDRAM are presented with reasonable time sequence and correct logic.
FPGA; SDRAM controller; state machine; Verilog HDL; timing simulation
TN929.11
:A
:1674-6236(2017)15-0137-04
2016-06-22稿件編號:201606158
陜西省教育廳科學(xué)研究計(jì)劃項(xiàng)目(14JK1247);渭南師范學(xué)院特色學(xué)科建設(shè)項(xiàng)目(14TSXK07)
雷能芳(1973—),女,陜西澄城人,講師。研究方向:數(shù)據(jù)采集與傳輸。