胡遼林, 劉光飛
(西安理工大學 機械與精密儀器工程學院,陜西 西安 710048)
?
視頻圖像處理系統(tǒng)中SDRAM控制器的FPGA實現(xiàn)
胡遼林, 劉光飛
(西安理工大學 機械與精密儀器工程學院,陜西 西安 710048)
為實現(xiàn)視頻圖像處理系統(tǒng)中圖像數(shù)據(jù)的實時處理,使用大容量的存儲器完成數(shù)據(jù)緩存是必不可少的一個環(huán)節(jié)。針對SDRAM的工作原理及時序特性,現(xiàn)提出一種在FPGA芯片上實現(xiàn)SDRAM控制器的方案。根據(jù)實時圖像數(shù)據(jù)傳輸速率的要求,SDRAM的操作模式配置為全頁突發(fā)讀寫及自動刷新操作模式,將各個操作進行模塊化設計并由一個總狀態(tài)機控制。整個設計采用Verilog實現(xiàn)。實驗結果表明,該控制器在視頻圖像處理系統(tǒng)中實現(xiàn)了本文所提出的數(shù)據(jù)高速緩存的功能,并具有讀寫效率高、控制簡單、價格低廉等特點。
SDRAM控制器; 數(shù)據(jù)緩存; FPGA; 模塊化; 狀態(tài)機
在視頻圖像處理系統(tǒng)中,圖像數(shù)據(jù)量大且實時性要求高,故需要高速大容量的存儲器對圖像數(shù)據(jù)實時緩存[1]。SDRAM相比其他存儲器,具有容量大、體積小、讀寫效率高、價格低等優(yōu)點,因此在數(shù)據(jù)處理量大的系統(tǒng)中常被用做數(shù)據(jù)緩存器[2]。但SDRAM的控制邏輯復雜,時序要求嚴格,需針對圖像處理系統(tǒng)設計一個簡單、高效的SDRAM控制器。當前許多處理器及DSP提供了通用的SDRAM控制器,但因為其通用性,運行速度及讀寫效率都很低。針對該視頻圖像處理系統(tǒng),本文提出一種基于FPGA的SDRAM控制器。該控制器配置全頁突發(fā)讀寫及自動刷新操作模式[3],并將控制器中各個操作進行模塊化設計,再由一個總狀態(tài)機對所有模塊進行控制調用[4]。文中還運用兩個異步FIFO進行FPGA及SDRAM之間數(shù)據(jù)緩沖,實現(xiàn)兩者間數(shù)據(jù)的無縫連接[5]。實驗結果表明,采用Verilog硬件描述語言在FPGA芯片上實現(xiàn)的SDRAM控制器能夠對視頻圖像數(shù)據(jù)進行高效地讀寫操作,成功實現(xiàn)視頻圖像數(shù)據(jù)的緩存。
本文采用Micron公司的MT48LC32M16A2型號的SDRAM芯片進行測試、調試和仿真,其存儲容量為512Mbit(8M×4Banks×16Bit)[6]。
1.1 SDRAM的主要操作命令
SDRAM芯片管腳信號分為三種:控制信號、地址信號、數(shù)據(jù)信號[7-10]。其中控制信號包括:WE_N(寫使能)、CAS_N(列地址有效)、RAS_N(行地址有效)、CS_N(片選);地址信號包括:行列地址(A0~A12)、Bank地址(BA0~BA1);數(shù)據(jù)信號(DQ0~DQ15)為雙向數(shù)據(jù)信號,其是否有效由輸入輸出使能信號(DQM0~DQM1)所控制??刂泼畹母鞣N邏輯組合可產生各種控制命令,如表1所示,其中H為高電平,L為低電平,X為任意電平[11]。
表1 命令真值表
LMR即模式寄存器設置命令是對芯片的讀寫突發(fā)長度(BL)、突發(fā)類型(BT)、讀取潛伏期(CL)等參數(shù)進行設置。
ACT即激活命令是激活一個后續(xù)將訪問的bank中的一行,BA0~BA1的值為bank地址,地址總線A0~A12提供行地址。這一行的訪問直到一個預充電命令在此bank上執(zhí)行。
PRE即預充電命令是關閉一個bank或所有bank打開的行,A10決定是一個bank還是所有bank被預充電,bank在執(zhí)行預充電命令經過規(guī)定時間之后可供后續(xù)訪問。
REF即刷新命令是為保持數(shù)據(jù)有效,刷新分為自動刷新和自刷新,本文中采用自動刷新,這個命令是非持久化的,每次刷新必須在規(guī)定時間內執(zhí)行一次。
WR/RD即讀寫命令是對一個激活的行進行突發(fā)讀寫操作,讀寫的數(shù)據(jù)為DQ總線上的數(shù)據(jù),DQM信號決定輸入或輸出的數(shù)據(jù)有效,讀取時DQM在發(fā)出兩個時鐘周期后有效,寫入時則立即生效。
1.2 SDRAM工作流程
SDRAM的主要工作流程可以分為以下三大部分。
1) SDRAM正常工作之前,首先需要上電初始化操作。在SDRAM芯片內部有一個邏輯控制單元,模式寄存器為其提供控制參數(shù),故每次開機時需對其進行初始化,其中最關鍵步驟就是模式寄存器的配置。
2) SDRAM內部是通過電容存儲數(shù)據(jù),所以需要定時刷新過程數(shù)據(jù)以免數(shù)據(jù)丟失。刷新分為自刷新和自動刷新,而自刷新主要用于休眠狀態(tài)下數(shù)據(jù)的保存,本文采用自動刷新。在刷新過程中涉及所有L-bank需要停止工作,在刷新9個時鐘周期之后可進入正常工作狀態(tài)。
3) 讀寫過程是影響SDRAM工作效率的關鍵操作,針對視頻圖像數(shù)據(jù)量大的特點,本文選擇了全頁突發(fā)讀寫模式,以最大可能提高讀寫速度[12]。讀寫過程之前需對讀寫存儲單元的行地址進行激活,讀寫命令與列地址同時發(fā)出,且讀數(shù)據(jù)時存在潛伏期。
本文中SDRAM控制器主要由初始化模塊、刷新模塊、讀/寫模塊、總狀態(tài)機模塊、數(shù)據(jù)多路選擇模塊,數(shù)據(jù)通路模塊。在視頻圖像處理系統(tǒng)中,該控制器配合兩個異步FIFO進行數(shù)據(jù)之間的銜接。系統(tǒng)框圖如圖1所示,數(shù)據(jù)通路模塊可獲取攝像頭所采集的有效數(shù)據(jù),也可輸出SDRAM中所緩存的有效數(shù)據(jù),主狀態(tài)機控制每個操作模塊在特定時間做出正確的動作,保證有效數(shù)據(jù)與SDRAM芯片進行高速有效交換。
圖1 SDRAM控制器系統(tǒng)框圖Fig.1 Block diagram of SDRAM controller system
2.1 初始化模塊
SDRAM初始化時序圖如圖2所示,上電后等待100 μs;執(zhí)行一次所有bank的預充電操作,需等待tRP(行預充電最小周期);接著執(zhí)行兩次自動刷新命令,每次命令均需等待tRFC(自動預充電周期);最后執(zhí)行模式寄存器設置命令,需等待至少tMRD(LMR命令與激活或刷新命令的最小間隔)。模式寄存器設置方式如圖3所示,本文中BL設置為全頁,BT設置為順序類型,CL設置為3。
本文采用有限狀態(tài)機實現(xiàn)該初始化過程,設計中時鐘周期為10 ns,將所有等待時間轉換為周期數(shù),整個初始化過程計算出為10 019個時鐘周期。實現(xiàn)流程如下:
1)前10 000個時鐘周期,命令為NOP,CKE置為1;
2)第10 001個時鐘周期,命令為PRE;
3)第10 003個時鐘周期,命令為REF;
4)第10 010個時鐘周期,命令為REF;
5)第10 017個時鐘周期,命令為LMR;
6)第10 019個時鐘周期,初始化結束。
圖2 SDRAM初始化時序圖Fig.2 Sequence diagram of SDRAM initialization
圖3 模式寄存器定義圖Fig.3 Mode register definition
2.2 刷新模塊
SDRAM芯片因內部存儲體為電容,需進行不斷刷新保持有效數(shù)據(jù)[13]。刷新具有固定的刷新周期,存儲電容的數(shù)據(jù)有效期最長為64 ms,即每行的刷新周期為64 ms。刷新命令每次只對一行有效,發(fā)送間隔跟總行數(shù)有關,設計中所選的SDRAM芯片具有8 192行,所以每次的刷新間隔為64 ms/8 192=7.812 5 μs。本文中將單獨設計一個刷新模塊,考慮到兩次刷新間會加入讀寫操作,因此該模塊每隔7.6 μs進行一次刷新,刷新操作的時序圖如圖4所示。
圖4 SDRAM刷新時序圖Fig.4 Sequence diagram of SDRAM refreshing
文中采用有限狀態(tài)機以實現(xiàn)刷新過程,以時鐘周期的個數(shù)為狀態(tài)跳轉條件。實現(xiàn)流程:第1個時鐘周期,命令為PRE;第3個時鐘周期,命令為REF;第10個時鐘周期,命令為ACT;第11個時鐘周期,結束。其關鍵代碼如下。
if(rst)
begin
nop;
refresh_finish <= 0;
end
else
case(time_count)
`ctREF_START: precharge_all;
`ctREF_REF: refresh;
`ctREF_FINISH: ref_finish <= 1;
default : nop;
endcase
2.3 讀/寫模塊
本文分別設計讀模塊和寫模塊對SDRAM進行全頁突發(fā)讀寫操作,初始化過程結束后,可進行讀寫操作。首先激活后續(xù)將要訪問的行,同時給出行地址和bank地址,行列地址訪問通過分時復用12位地址總線;發(fā)送寫命令的同時給出操作列的首地址,并寫第一個數(shù)據(jù)到DQ總線,依次向DQ寫完剩余的數(shù)據(jù);執(zhí)行一次預充電命令,等待規(guī)定時間后進行行激活,同時給出行地址和bank地址,與寫操作不同,讀操作具有兩個周期的潛伏期,依次從DQ總線讀取數(shù)據(jù);執(zhí)行預充電命令,最終完成一次讀寫操作。全頁突發(fā)讀寫操作時序圖如圖5所示。
圖5 SDRAM讀寫時序圖Fig.5 Sequence diagram of SDRAM read/write
文中采用有限狀態(tài)機實現(xiàn)該讀寫過程,在全頁突發(fā)讀寫完成時此狀態(tài)機必須立即停止。其讀、寫過程相似,讀操作過程:第1個時鐘周期,命令為ACT,送行地址和bank地址;第3個時鐘周期,命令為WR,送列地址和第一個有效數(shù)據(jù);第1027個時鐘周期,命令為NOP,送入最后一個有效數(shù)據(jù);第1028個時鐘周期,命令為PRE;第1030個時鐘周期,讀操作結束。其關鍵代碼如下。
case(time_count)
`ctRD_START: active;
`ctRD_READ: read_ap;
`ctRD_GETDATA1: cap_l <= 1;
`ctRD_GETDATA2:
begin
cap_1 <= 0;
cap_h <= 1;
end
`ctRD_FINISH:
begin
read_finish <= 1;
cap_h <= 0;
end
endcase
2.4 總狀態(tài)機模塊
本文將初始化操作、讀寫操作、刷新操作、多路信號選擇器都進行了模塊化設計,對每個功能進行單獨實現(xiàn),最終由一個總的狀態(tài)機進行控制??偁顟B(tài)機通過判斷,在特定時間執(zhí)行特定動作來控制各個模塊的輸出,再通過多路數(shù)據(jù)選擇模塊將數(shù)據(jù)發(fā)送到SDRAM芯片。
圖6 狀態(tài)轉移圖Fig.6 Diagram of state transition
如圖6所示,總狀態(tài)機由五個狀態(tài)組成,分別為上電初始化狀態(tài)、讀狀態(tài)、寫狀態(tài)、等待狀態(tài)、刷新狀態(tài)。初始化完成之后跳轉到等待狀態(tài),判斷讀寫、刷新操作是否完成,若未完成,狀態(tài)停留在等待狀態(tài)直至各操作完成。
本文中在調試SDRAM控制器時,將所設計的控制器與Micron公司所提供的SDRAM模型共同仿真。首先測試上電初始化過程,該過程的時序圖如圖7所示。初始化完成之后返回模式寄存器配置信息(如圖8所示),返回信息潛伏期為3,突發(fā)長度為全頁,突發(fā)類型為順序,與文中設計的信息完全相同。圖9是在無讀寫操作時的刷新時序仿真結果,圖10是一次全頁突發(fā)的讀寫過程。實驗結果表明,通過總狀態(tài)機控制的SDRAM控制器可以完成有效像素數(shù)據(jù)的緩存。
圖7 初始化仿真結果Fig.7 Simulation result of initialization
圖8 模式寄存器配置打印信息Fig.8 Information of MR
圖9 刷新仿真結果Fig.9 Simulation result of refreshing
圖10 讀寫仿真結果Fig.10 Simulation result of read and write
本文介紹了一種由狀態(tài)機控制實現(xiàn)SDRAM控制器的方法,把上電初始化、讀寫操作、刷新操作均采用有限狀態(tài)機實現(xiàn),各個模塊相互獨立,最終由一個總的狀態(tài)機控制,相比其他實現(xiàn)方法,該方法更為簡單。該控制器應用在視頻圖像處理系統(tǒng)中,可以高速有效地緩存數(shù)據(jù),可以通過修改突發(fā)長度,配置讀寫地址應用在更多的場合。
[1]龐雙德,劉艷瀅. 圖像處理系統(tǒng)中SDRAM控制器的FPGA實現(xiàn)[J]. 微計算機信息,2009,25(14):164-165.
PANG Shuangde,LIU Yanying. The implementation of SDRAM controller based on FPGA in image processing system[J]. Control & Automation, 2009, 25(14): 164-165.
[2]楊欽,周云飛,胡永兵. 基于FPGA的視頻圖像采集與顯示系統(tǒng)設計[J]. 計算機工程與設計,2013,34(6):1988-1992.
YANG Qin, ZHOU Yunfei, Hu Yongbing. Design of video image acquisition and display system based on FPGA[J]. Computer Engineering and Design, 2013, 34(6): 1988-1992.
[3]陳文明,劉波,章小兵,等. 高分辨率視頻圖像處理中SDRAM控制器的設計[J]. 現(xiàn)代電子技術,2013,36(12):97-99.
CHEN Wenming, LIU Bo, ZHANG Xiaobing, et al. Design of SDRAM controller in high-resolution video image processing system[J]. Modern Electronics Technique, 2013, 36(12): 97-99.
[4]劉云川,龔向東. BT.656數(shù)字視頻流的處理及其硬件實現(xiàn)[J]. 液晶與顯示,2013,28(2):238-243.
LIU Yunchuan, GONG Xiangdong. Processing and hardware implementation of BT.656 digital video stream[J]. Chinese Journal of Liquid Crystals and Displays, 2013, 28(2): 238-243.
[5]張杰,胡世安,龍子夜,等. 多速率數(shù)據(jù)采集與處理系統(tǒng)的設計與實現(xiàn)[J]. 電子測量與儀器學報,2009,23(S1):138-141.
ZHANG Jie, HU Shian, LONG Ziye, et al. Design and realization of multi-rate data acquisition and processing system[J]. Journal of Electronic Measurement and Instrument, 2009, 23(S1): 138-141.
[6]馬靈,楊俊峰,宋克柱,等. 地震數(shù)據(jù)采集中基于FPGA的多DDR SDRAM控制器設計[J]. 中國科學技術大學學報,2010,40(9):939-945.
MA Ling, YANG Junfeng, SONG Kezhu, et al. A design of multiple DDR SDRAM controllers based on FPGA in a seismic data acquisition system[J]. Journal of University of Science and Technology of China, 2010, 40(9): 939-945.
[7]趙強,羅嶸,汪蕙,等. 用于HDTV視頻解碼器的高性能SDRAM控制器[J]. 電子與信息學報,2007,29(6):1332-1337.
ZHAO Qiang, LUO Rong, WANG Hui, et al. High performance SDRAM controller design for HDTV video decoder[J]. Journal of Electronics & Information Technology, 2007, 29(6): 1332-1337.
[8]王利穎,蔣亞東,羅鳳武. 嵌入式實時圖像處理系統(tǒng)中SDRAM控制器的實現(xiàn)[J]. 現(xiàn)代電子技術,2009,25(9):137-139.
WANG Liying, JIANG Yadong, Luo Fengwu. Implementation of SDRAM controller for embedded real-time image processing system[J]. Modern Electronics Technique, 2009, 25(9): 137-139.
[9]鄧凱,王永明. 一種簡單的SDRAM控制器實現(xiàn)方法[J]. 國外電子測量技術,2011,30(9):48-50.
DENG Kai, WANG Yongming. A simple method for SDRAM controller[J]. Foreign Electronic Measurement Technology, 2011, 30(9): 48-50.
[10]陳根亮,肖磊,張鑒. 一種基于FPGA的DDR SDRAM控制器的設計[J]. 電子科技,2013,26(1):52-55.
CHEN Genliang, XIAO Lei, ZHANG Jian. Design of a DDR SDRAM controller based on FPGA[J]. Electronic Science and Technology, 2007, 29(6): 52-55.
[11]王騫,丁軼夫. 高速圖像存儲系統(tǒng)中SDRAM的實現(xiàn)[J]. 液晶與顯示,2006,21(1):48-52.
WANG Qian, DING Yifu. The implementation of SDRAM controller in the high-speed image storage system[J]. Chinese Journal of Liquid Crystals and Displays, 2006, 21(1): 48-52.
[12]劉攀,王紅亮,孟令軍. 基于FPGA的數(shù)字圖像采集存儲系統(tǒng)的設計[J]. 電視技術,2010,34(6):32-34.
LIU Pan, WANG Hongliang, MENG Lingjun. Design of digital image acquisition and storage system based on FPGA[J]. Video Engineering, 2010, 34(6): 32-34.
[13]郭柳柳, 甄國涌, 劉東海. 基于FPGA高速圖像數(shù)據(jù)的存儲及顯示設計[J]. 電子技術應用,2014,40(11):75-77.
GUO Liuliu, ZHEN Guoyong, LIU Donghai. High speed image data storage and display based on FPGA[J]. Application of Electronic Technique, 2014, 40(11): 75-77.
(責任編輯 王緒迪,王衛(wèi)勛)
Implementation of SDRAM controller based on FPGA in video image processing system
HU Liaolin, LIU Guangfei
(School of Mechanical and Precision Instrument Engineering, Xi’an University of Technology, Xi’an 710048, China)
In order to achieve real-time processing of image data in video image processing, using the large capacity memory to complete the data cache is one essential step. It presents a SDRAM controller solution to FPGA chip in the realization of image data cache during video image processing in view of the working principles and time sequence characteristics of SDRAM. According to the requirement for real-time image data transmission rate, the operation mode is configured as full-page burst read and write and auto-refresh, with each operation modularization made and controlled by a total state machine. The design is implemented with Verilog. The result show that the controller is used to complete image data cache in the video image processing successfully, and that it has advantages of high READ/WRITE rate, simple control and low price and so on.
SDRAM controller; data cache; FPGA; modularization; FSM
10.19322/j.cnki.issn.1006-4710.2016.04.014
2015-07-06
陜西省自然科學基金資助項目(2014JM7273)
胡遼林,男,副教授,研究方向為光纖傳感及光纖通信。E-mail:huliaolin@163.com
TN79;TP274
A
1006-4710(2016)04-0455-07