摘 要: 深入探討SDRAM的工作原理和工作時序,通過SDRAM三種常用尋址方式的對比,設(shè)計一種基于FPGA的頁快速命中尋址的16位SDRAM控制器。軟件仿真、硬件測試及實物調(diào)試結(jié)果表明:該控制器能極大地縮短尋址時間,并具有良好的實時性、高效性和模塊重用性;同時也節(jié)省了FPGA的內(nèi)部資源,縮短了研發(fā)周期。
關(guān)鍵詞: 頁快速命中; FPGA; SDRAM控制器; 尋址方式
中圖分類號: TN919.3?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)13?0063?04
Abstract: In this paper, working principle and time sequence analysis of SDRAM are discussed deeply. By comparing three common addressing modes, a 16?bit SDRAM controller of page fast hitting based on FPGA was designed. Results of software simulation, hardware test and practical debug show that the controller can shorten addressing time greatly. The controller has good real?time performance, high efficiency and module reusability. It also can save internal resources in FPGA and reduce development cycle.
Keywords: page fast hitting; FPGA; SDRAM controller; addressing mode
0 引 言
隨著現(xiàn)代通信及實時圖像處理的發(fā)展,大容量、高速度的儲存器越來越顯得重要。SDRAM即同步動態(tài)隨機(jī)存貯器[1],由于價格低廉及儲存量大的優(yōu)點,被廣泛地應(yīng)用于高速數(shù)據(jù)采集、處理的領(lǐng)域。但本身也具備一定缺點,如控制復(fù)雜,對時序要求高,無一不對應(yīng)用推廣有著反效果。FPGA即現(xiàn)場可編程門陣列,以并行運算為主,在速度和性能上是MCU無法比擬的。本文針對其復(fù)雜的邏輯控制、嚴(yán)格的時序要求,利用頁快速命中尋址方式,設(shè)計出一種能有效消除行尋址到列尋址之間間隔([tRCD])所帶來延遲的通用SDRAM控制器,并利用ALTERA公司的FPGA芯片EP2C35F484C8N[2]和三星公司的SDRAM芯片K4S641632K[3]作為硬件平臺,對該SDRAM控制器進(jìn)行了實物調(diào)試與驗證。
1 SDRAM的工作方式和時序分析
1.1 SDRAM的內(nèi)部結(jié)構(gòu)
SDRAM的內(nèi)部是一個存儲陣列。陣列就像一個表格,檢索方式與表格一樣,首先指定一個行,然后再指定一個列,就能精確地找到指定的單元格,這就是內(nèi)存芯片尋址的基本原理[4]。對于內(nèi)存、單元格就是列存儲單元,也是SDRAM的基本存儲單元,則這個表格就是邏輯Bank(Logical Bank,L_Bank)。相應(yīng)地,指定行的操作就是行尋址或行有效;指定列的操作是列尋址,列尋址時都伴隨著讀或?qū)懨?,故又稱為列讀取或列寫入操作。
1.2 SDRAM的工作時序分析
SDRAM的效率體現(xiàn)在內(nèi)存尋址的速度;而SDRAM的基本工作是寫入和讀取數(shù)據(jù),但在執(zhí)行這些工作時,并不是每一時刻都處于數(shù)據(jù)傳輸狀態(tài)。由于非數(shù)據(jù)傳輸時產(chǎn)生了各種延遲與潛伏期,導(dǎo)致SDRAM的效率沒有達(dá)到百分之百。以讀取操作為例,主要影響SDRAM工作效率的參數(shù)[5]有:行有效命令與列讀/寫命令的間隔([tRCD]);列讀取命令發(fā)出到第一批數(shù)據(jù)輸出的間隔([tCL]);預(yù)充電有效周期([tRP])。
圖1為典型的SDRAM讀取操作時序,通過行有效來打開相應(yīng)的工作行,之后發(fā)送列讀取命令在已打開的行中選擇某一列進(jìn)行讀取。經(jīng)過[tCL]延遲后,依次讀取選中的對應(yīng)突發(fā)長度[6]的列單元數(shù)據(jù),最后依靠預(yù)充電來關(guān)閉工作行。在關(guān)閉工作行的同時,其對應(yīng)行的列單元數(shù)據(jù)將被鎖存起來。
當(dāng)反復(fù)進(jìn)行讀取操作時,從上一次數(shù)據(jù)讀取的結(jié)束到本次數(shù)據(jù)讀取的開始,其間歷經(jīng)了預(yù)充電、行有效和列讀取命令三個執(zhí)行流程,總耗費時間為:
[T=tRCD+tCL+tRP] (1)
因此,根據(jù)SDRAM的讀取時間和尋址方式的不同,SDRAM的尋址方式可分為以下三種方式:
1.2.1 頁命中尋址方式[7]
頁命中的工作行和L_Bank是空閑的,也就是說該 L_Bank 的所有行是關(guān)閉的,此時可直接發(fā)送行有效命令。頁命中尋址方式的時間為:
[T1=tRCD+tCL] (2)
1.2.2 頁錯失尋址方式[7]
頁錯失尋址方式即上一次工作行沒有關(guān)閉,并且本次讀取的工作行需要換行。這種現(xiàn)象也稱為尋址沖突,需要通過預(yù)充電來關(guān)閉上一次的工作行,再執(zhí)行新一行的行有效命令,因此這種尋址方式所用的時間為:
[T2=tRCD+tCL+tRP] (3)
1.2.3 頁快速命中尋址方式[7]
頁快速命中亦稱為背靠背(Back To Back)尋址,即要尋址的行正好是前一個操作的工作行,此時可直接發(fā)送列讀/寫命令。這種尋址方式的時間僅為:
[T3=tCL] (4)
可見,三種尋址方式中尋址時間最短的是頁快速命中尋址方式。為了提高SDRAM的工作效率,本文設(shè)計一種基于FPGA的頁快速命中SDRAM控制器,使SDRAM的尋址方式始終為頁快速命中尋址方式。
2 基于FPGA的頁快速命中SDRAM控制器的
設(shè)計
2.1 SDRAM控制器在FPGA上的具體方案
SDRAM控制器的RTL層視圖如圖2所示,其主要分為3個模塊:鎖相環(huán)模塊(PLL),初始化模塊(sdram_Init)和數(shù)據(jù)讀/寫模塊(sdram_wr_data)。3個模塊共同組成SDRAM控制器的底層驅(qū)動,相應(yīng)的輸入/輸出端口主要分為兩類:一類是FPGA內(nèi)部控制接口,包括控制類型的復(fù)位信號(areset),SDRAM使能信號(sd_active)與讀/寫控制信號(rw),數(shù)據(jù)通信類型的地址信號(address),寫入數(shù)據(jù)信號(indata)和讀取數(shù)據(jù)信號(outdata);另一類是SDRAM控制接口,與外部SDRAM芯片K4S641632K引腳相連,包括了起數(shù)據(jù)通信作用的雙向通信數(shù)據(jù)口(SDRAM_DATA)和SDRAM命令輸出的信號行有效(RAS_N)、列有效(CAS_N)等。
2.1.1 PLL模塊
系統(tǒng)的輸入時鐘為50 MHz,而SDRAM芯片和SDRAM控制器的工作時鐘頻率設(shè)定為100 MHz。需要通過調(diào)用FPGA的內(nèi)部IP核[8]鎖相環(huán)模塊(PLL)來實現(xiàn)SDRAM和SDRAM控制器的工作頻率和時鐘相移。
2.1.2 sdram_init模塊
初始化模塊(sdram_init)的作用是實現(xiàn)SDRAM芯片的初始化和SDRAM控制指令輸出。主要由兩個有限狀態(tài)機(jī)[9]實現(xiàn),一個是初始化狀態(tài)機(jī),另一個是工作狀態(tài)機(jī)。初始化狀態(tài)機(jī)屬于摩爾型狀態(tài)機(jī),即輸出的SDRAM控制命令信號僅隨著狀態(tài)的更改而變化。當(dāng)完成初始化后,SDRAM控制器進(jìn)入工作狀態(tài);工作狀態(tài)機(jī)根據(jù)頁快速命中的工作方式,在輸入地址和當(dāng)前工作狀態(tài)的共同作用下,輸出SDRAM的控制命令和地址。上電復(fù)位后,兩個狀態(tài)機(jī)同時進(jìn)入復(fù)位狀態(tài),直至PLL輸出時鐘穩(wěn)定為止。當(dāng)PLL穩(wěn)定后,sdram_init模塊首先進(jìn)入初始化狀態(tài)機(jī),狀態(tài)機(jī)如圖3所示。初始化時先后經(jīng)歷了200 μs的穩(wěn)定期,所有L?Bank的預(yù)充電, 8個周期自動刷新,模式寄存器的設(shè)置(MRS)。當(dāng)初始化進(jìn)入結(jié)束狀態(tài)時,初始化狀態(tài)機(jī)結(jié)束,模塊進(jìn)入工作狀態(tài)機(jī)。
工作狀態(tài)機(jī)主要由空閑、行有效、讀取、寫入和自動刷新5個狀態(tài)組成。默認(rèn)狀態(tài)為空閑,優(yōu)先判斷是否需要進(jìn)入自動刷新狀態(tài)。通過判斷SDRAM使能信號(sd_active)決定是否需要進(jìn)入行有效狀態(tài),讀/寫控制信號(rw)選擇進(jìn)入讀取還是寫入狀態(tài)。K4S641632K需要在64 ms內(nèi)完成8 192個自動刷新周期,即每7.8 μs進(jìn)入自動刷新狀態(tài)1次。
2.1.3 sdram_wr_data模塊
數(shù)據(jù)讀/寫模塊(sdram_wr_data)負(fù)責(zé)SDRAM控制器的16位數(shù)據(jù)傳輸。主要端口有寫入數(shù)據(jù)信號(indata)、讀取數(shù)據(jù)信號(outdata)、SDRAM雙向通信數(shù)據(jù)口(SDRAM_DATA)、讀取有效信號(read_valid)和寫入有效信號(write_valid)。其中indata和outdata屬于SDRAM控制器FPGA內(nèi)部使用接口,與SDRAM上層驅(qū)動連接;read_valid和write_valid屬于數(shù)據(jù)傳輸輔助端口,與內(nèi)部模塊sdram_init相連;Sdram_Data是SDRAM控制器的底層雙通道數(shù)據(jù)接口,直接與外部的SDRAM芯片的數(shù)據(jù)端口相連。
2.2 SDRAM控制器的Modelsim仿真
本設(shè)計是基于Quartusii 9.1環(huán)境下通過編寫Verilog語言的testbench文件,并利用第三方軟件modelsim協(xié)助下的波形仿真。如圖4所示,SDRAM控制器處于連續(xù)寫工作狀態(tài),每個列寫入命令都伴隨著4個16位位寬的數(shù)據(jù)。由于仿真的目的在于驗證輸出命令與數(shù)據(jù)的正確性,故寫入數(shù)據(jù)信號(data)采用每工作周期自增1的連續(xù)數(shù)據(jù)。在突發(fā)長度期間,輸出命令主要為空命令(NOP),即行有效(RAS)、列有效(CAS)、地址線(A)和L_Bank地址線(BA)都輸出高;空命令實際就是無操作,等待下一次操作命令的到來,仿真時序處于行有效范圍內(nèi)且尚未自動刷新,故無需發(fā)送行有效命令。
2.3 SDRAM控制器的硬件測試與驗證
為了進(jìn)一步驗證SDRAM控制器的實用性和準(zhǔn)確性,實物驗證時添加了通信模塊uart,并且把FPGA與PC機(jī)相連,通過軟件串口調(diào)試助手進(jìn)行收發(fā)驗證。由于SDRAM工作時,輸入與輸出部分的工作時鐘一般與SDRAM異步。故此,在輸入與輸出部分需要設(shè)置16位異步FIFO[10]作為輸入和輸出緩存器。SDRAM控制器的實物驗證方案圖如圖5所示,主要包括輸入緩存器FIFOin,SDRAM控制器SDRAM_CONTROLLER,SDRAM邏輯控制器SDRAM_LOGIC,輸出緩存器FIFOout和串口通信模塊UART。
邏輯控制器SDRAM_LOGIC實現(xiàn)了SDRAM工作時的邏輯狀態(tài)跳轉(zhuǎn)。如圖6所示,SDRAM_LOGIC默認(rèn)狀態(tài)為邏輯空閑,當(dāng)輸入FIFOin寫滿或?qū)懭虢Y(jié)束時,邏輯狀態(tài)由邏輯空閑狀態(tài)跳轉(zhuǎn)到邏輯寫狀態(tài)。在所有數(shù)據(jù)寫入SDRAM后,邏輯狀態(tài)將從邏輯寫狀態(tài)跳轉(zhuǎn)到邏輯讀狀態(tài),相應(yīng)地讀出數(shù)據(jù),并與原來寫入的數(shù)據(jù)比較來驗證SDRAM控制器的正確性。
圖7為串口調(diào)試助手的驗證圖,通過串口調(diào)試助手發(fā)送一連串的數(shù)據(jù)到FPGA開發(fā)板上,uart模塊把接收的數(shù)據(jù)傳輸?shù)絊DRAM控制模塊上,控制模塊通過頁快速命中尋址方式把數(shù)據(jù)依次寫入到SDRAM芯片上。寫入結(jié)束后,SDRAM控制器又把數(shù)據(jù)從 SDRAM芯片上依次讀取并傳輸?shù)経ART模塊,并通過UART把數(shù)據(jù)發(fā)送回串口調(diào)試助手。最后對比串口調(diào)試助手的寫入數(shù)據(jù)與讀出數(shù)據(jù)可知SDRAM控制器能精準(zhǔn)地完成數(shù)據(jù)在SDRAM芯片上的寫入與讀出。
3 結(jié) 論
本文采用FPGA芯片EP2C35F484C8N實現(xiàn)了基于頁快速命中的SDRAM控制器,并利用串口通信驗證了該控制器的可靠性。雙端口輸入/輸出緩存器FIFO使其適應(yīng)于異步時鐘下的數(shù)據(jù)交換。相對于頁命中和頁錯失尋址,頁快速命中更加合理、有效、快速地實現(xiàn)了SDRAM的寫入和讀取操作。同時結(jié)合了FPGA的高速、并行等優(yōu)勢,使SDRAM控制器具有良好的實時性、高效率和模塊重用性。
參考文獻(xiàn)
[1] 張林,何春.高速SDRAM控制器設(shè)計的FPGA實現(xiàn)[J].電子科技大學(xué)學(xué)報,2008,37(z1):109?112.
[2] Altera Corporation. EP2C35F484C8 datasheet [EB/OL]. [2008?02?18]. http://www.altera.com.cn/literature/hb/cyc2/cyc2_cii5v1_01.pdf.
[3] Samsung Electronics. K4S641632K specification [R]. [S.l.]: Samsung Electronics, 2006.
[4] 楊映輝.基于FPGA的SDRAM控制器設(shè)計及應(yīng)用[D].蘭州:蘭州大學(xué),2007.
[5] 武文杰,劉浩.基于FPGA的SDRAM控制器設(shè)計[J].電子工程師,2005,30(10):23?27.
[6] 程方敏,黃啟俊.基于FPGA的高速SDRAM控制器的視頻應(yīng)用[J].電子技術(shù),2009,36(7):22?24.
[7] 趙效民.高手進(jìn)階:終極內(nèi)存技術(shù)指南[EB/OL].[2002?12?17].http://wenku.baidu.com/link?url=HukJk977h3XyB3gRcKe8JxTPFva2PjYQ3z2_Y0d15npo_3SaKiV_bB3TwQ49FaKN2Y3HdpE?
4mqBbg49CbuTs89nt7gCWqKVfv0F05VqHohe.
[8] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2008.
[9] MINNS P, ELLIOTT I. FSM?based digital design using verilog HDL [M]. New York: Wiley Blackwell, 2008.
[10] 于海,樊曉椏.基于FPGA異步FIFO的研究與實現(xiàn)[J].微電子學(xué)與計算機(jī),2007,24(3):210?216.