在PAL→VGA的實時視頻采集系統中,由于視頻數據流的數據量大、實時性要求高。需要高速大容量的存儲器作為圖像數據的緩存。SDRAM作數據緩存不僅具有大容量和高速度的特點,而且在價格和功耗方面也占有很大的優勢。但是SDRAM控制較復雜,需要處理預充、刷新、換行等操作,因此有必要設計SDRAM控制器來完成和SDRAM的接口。并且為了保證數據流的連續性,實時視頻采集系統通常采用通過對兩片SDRAM的乒乓操作來完成圖像數據的緩存。針對SDRAM是高速設備,工作頻率上限最高可以達到166 MHz,而該系統中前端圖像采集模塊的像素時鐘為27 MHz,后端VGA顯示的像素時鐘為31.5 MHz。在此介紹了一種使用1片SDRAM的不同BANK進行乒乓操作,且相對容易實現的SDRAM控制器設計方法。 1 SDRAM基本操作原理 SDRAM的主要操作包括初始化、讀寫訪問、刷新、激活、預充電等。以MICRON公司的MT48LC4M3282(1M×32 b×4 BANKS)為例,簡要介紹一下SDRAM的操作。 如圖1所示,SDRAM的初始化操作過程如下: (1)在電源管腳上電(電壓不得超過標稱值的0.3 V)并且時鐘穩定后經過200μs延遲,執行一次空操作命令(該命令在延遲周期的后期發出)且保持時鐘使能信號為高; (2)對所有的BANK進行預充電,所有的BANK都進入空閑狀態; (3)預充電后執行兩個自動刷新命令,等待八個刷新周期完畢; (4)發出模式設置命令來設置模式寄存器。由于上電后模式寄存器的狀態是不確定的,所以在進行SDRAM操作之前一定要先設置模式寄存器。模式寄存器設置值如圖2所示。 對SDRAM的讀寫訪問先要以激活命令選擇具體的BANK和行,地址線BA1/BA0用來選擇BANK,A0~A11用來選擇所要訪問的行;然后發出讀或寫命令,地址線A0~A7用來選擇所要訪問的起始列。在讀命令發出后,要等待一個CAS延遲時間,有效數據才會出現在數據總線上,CAS延遲時間可以設置為2或3個時鐘。在寫命令發出后,不需要等待CAS延遲時間有效數據會立即出現在數據總線上。對SDRAM的讀寫操作一般以突發模式進行,突發長度可以設置成1,2,4,8以及全頁,常用的長度為8個。該系統的CAS延遲時間設置為2,突發長度為1。 SDRAM的存儲單元可以理解為一個電容,總是傾向于放電,必須有定時的刷新周期以避免數據丟失。只要保證在64 ms時間內所有有效數據行都完成刷新就可以保證數據不丟。SDRAM提供兩種類型的刷新模式:自動刷新和自刷新。在該系統中,前端PAL制式信號一幀的時間為40 ms,因此SDRAM的同一地址讀寫操作的時間相隔為40 ms。又由于系統為實時視頻采集系統,前端采集的視頻數據是連續不斷的,所以該系統不需要進行刷新操作即可保證數據不丟。 2 SDRAM控制器的設計實現 在實時視頻采集系統中,為了保證數據的穩定和連續性,通常采用的方法是對存儲器進行乒乓操作。一般所指的乒乓操作針對兩片存儲器芯片,如圖3所示,其原理是通過控制模塊對兩片存儲器分別做讀寫操作,寫存儲器滿時控制模塊發出交換命令,切換兩片存儲器的操作狀態。 該系統采用的是一片SDRAM實現乒乓操作。設計時是利用SDRAM的不同BANK間的存取操作來實現乒乓操作。由于SDRAM總共有4個BANK,所以讀取第一幀圖像時使用SDRAM的1,2 BANK為讀緩存,3,4 BANK為寫緩存。第二幀圖像時SDRAM的3,4 BANK切換為讀緩存,1,2 BANK切換為寫緩存。采用一幀圖像讀寫完畢作為切換標志反復切換讀寫緩存,就充分利用SDRAM的不同BANK來實現乒乓操作。另一方面由于SDRAM的數據線和地址線只有1組,所以實際控制的時候讀寫操作是不能同時進行的。設計中考慮到SDRAM的工作頻率與前端圖像采集的像素頻率以及后端VGA顯示的像素頻率相比要高得多,因此將讀寫操作利用時分的方式分開控制。所以在控制器中設計了一個指令計數器(Countcmd),通過計數的方式來切換讀寫操作。只要選取適當的SDRAM工作頻率以及指令計數器的規定值就可以完成SDRAM讀寫操作的連續切換。實際設計中采用的SDRAM工作頻率為100 MHz,指令計數器的規定值為240。SDRAM控制器狀態轉換概圖如圖4所示。 SDRAM控制器的具體狀態轉換流程如下:首先初始化SDRAM,然后向SDRAM的1,2 BANK寫入第一幀圖像,當第一幀圖像寫入完畢后進入乒乓操作階段。此時SDRAM的1,2 BANK為讀緩存,3,4 BANK為寫緩存。 首先進入讀緩存激活行,開始讀操作,讀操作開始的同時啟動指令計數器。此時每執行一條指令(包括讀指令,空操作指令,不包括預充電指令和行激活指令),指令計數器自加1,當指令計數器到達規定值時將指令計數器清0并切換到寫狀態。進入寫狀態前先判斷寫緩存的行激活標志,如果沒有激活,先執行行激活,然后開始寫操作,如果已經激活則直接開始寫操作。寫操作開始的同時啟動指令計數器。此時和讀狀態時一樣,每執行一條指令,指令計數器自加1,當指令計數器到達規定值時同樣將指令計數器清0后切換到讀狀態。如此反復切換操作,直至讀完一幀或者寫滿一幀。如果是讀完一幀,則判斷寫緩存中一幀寫滿沒有。如果已經寫滿,則進入讀寫BANK切換狀態。如果沒有,則進入寫狀態并不再切換讀寫狀態,一直保持寫狀態直至寫滿一幀為止,然后進入讀寫BANK切換狀態。如果是寫滿一幀,則同理于讀完一幀的情況,首先判斷讀緩存中讀完一幀沒有,然后根據判斷結果進行操作,最后進入讀寫BANK切換狀態。在讀寫BANK切換狀態中,讀緩存切換為3,4 BANK,寫緩存切換為1,2 BANK。反復上述操作步驟,就可以完成使用一片SDRAM不同BANK的乒乓操作。整個SDRAM控制器在Altera的QuartusⅡ7.2環境下采用Verilog設計完成,然后在ModelSim SE 6.0環境下仿真通過。隨后通過Altera的QuartusⅡ7.2進行綜合和布局布線,并最終在Al-teraCyclone系列FPGA芯片EP1C6Q240C8上完成。所設計的SDRAM控制器在PAL→VGA的實時視頻采集系統中調試通過,能夠實現圖像數據的存儲和讀取,完全滿足系統的要求。 3 結 語 介紹在PAL→VGA的實時視頻采集系統中使用SDRAM作為圖像緩存的基本操作,設計一種使用1片SDRAM的不同BANK進行乒乓操作的相對容易實現的SDRAM控制器設計方法。在PAL→VGA的實時視頻采集系統中,使用了所設計的SDRAM控制器,并通過硬件驗證,采集得到的圖像質量較好。另外,這里設計的SDRAM控制器稍加改動就可以應用到其他實時視頻采集系統中去,具有很強的通用性。 |