雷海軍,劉 鵬,陳戰夫,何業軍,李先義
(深圳大學 a.計算機與軟件學院;b.信息工程學院;c.數學與計算科學學院,廣東 深圳 518060)
隨著多媒體技術的發展以及數字電視的推廣,不同視頻格式之間的轉換問題也日益嚴重,為滿足各種多媒體終端的兼容需要,設計了視頻格式轉換芯片,實時視頻處理意味著需要大容量的高速存儲器,常用的有SDRAM,ROM[1]。
雙數據率同步動態隨機存儲器(Double Data Rate SDRAM,DDR SDRAM)可在信號的上升沿和下降沿都進行數據傳輸,所以DDR內存在每個時鐘周期都可完成2倍于SDR SDRAM的數據傳輸量,并且單位存儲成本與SDR SDRAM相當[2]。因而,對于高速數據采集系統,無論從成本還是性能方面考慮,采用DDR作為系統的存儲器件是合適的,傳統的視頻格式轉換芯片大多數是基于VGA標清時序,視頻數據需要經A/D轉換、YCbCr向RGB空間模型轉換以及D/A轉換,最后接入VGA接口[3-4]。芯片結構復雜,并且占用資源多,數據處理效率低。
DDR SDRAM容量大、價格低、速度快[5],為此,本文設計了DDR SDRAM控制器,以滿足將來復雜視頻處理算法和提高系統時鐘的要求。與傳統的視頻格式轉換芯片相比,設計的視頻格式轉換芯片面向高清視頻,能處理更大容量的數據,不需要相關的轉換,芯片設計的結構簡單,占用的資源相對較少。本文設計了一種基于狀態機,并且適用于數字視頻的DDR SDRAM控制器,采用2片DDR SDRAM作為片外存儲器,采取乒乓讀寫操作,有效解決了視頻數據流在傳輸過程中的瓶頸問題。
采用2個DDR SDRAM作為幀緩存,在DDR控制器前后分別有一個緩存器(輸入緩存和輸出緩存),如圖1所示。電視模式選擇模塊選擇不同的模式(1 080p或720p),PE1005S視頻時序數字模擬模塊用于前端功能仿真測試,模擬66 MHz頻率輸出的視頻數據;輸入緩存用于緩存來自PE1005S模塊的視頻數據;幀控制器用于對DDR SDRAM進行讀寫切換;DDR SDRAM用于控制DDR SDRAM的讀寫操作;輸出緩存用于緩存從DDR SDRAM中讀出的數據;時序發生器產生SMPTE高清電視時序,配合用于將YPbPr轉換成SMPTE標準時序的SAV/EAV模塊,最終完成整個系統視頻數據的格式轉換。

圖1 視頻格式轉換系統結構
本文設計的DDR控制器按照不同的實現功能可劃分為4個模塊,如圖2所示。控制器模塊接收并譯碼用戶命令,產生讀、寫、初始化命令以及其他模塊所需的部分信號;數據路徑模塊從存儲器中接收數據和發送數據到存儲器,主要功能是存儲從存儲器中讀出的數據以及寫數據并生成使能信號到輸入輸出管理模塊;基礎模塊生成整個系統的時鐘和復位信號;輸入輸出管理模塊提供與存儲器連接的各種輸入輸出端口。這樣有利于對DDR控制器的設計查錯,縮短產品開發周期。

圖2 DDR控制器的結構
因為Xilinx Spartan3E系列芯片要求64 ms內刷新4 096次,而在視頻展臺設計中,由于在64 ms內對DDR SDRAM至少進行4 096次讀、寫操作,所以可不必對其進行刷新[6]。控制功能包括DDR SDRAM的初始化、突發讀寫和預充電。控制功能不包含自刷新功能。圖3是DDR SDRAM的整個狀態轉移圖。系統上電后處于空閑狀態,在進行讀寫操作前必須對其進行初始化。初始化中將對突發長度、突發類型、CAS(Column Access Strobe)延時等參數進行配置。完成后系統進入空閑狀態,狀態機進入激活狀態,在該狀態下,激活讀寫地址所對應的行,這樣此行被打開直到發出預充電命令關閉此行,在打開的狀態下可對該行連續讀寫,而不用再發激活命令,從而提高了數據的吞吐率。行被激活后,經過一段延時,狀態機進入讀或寫狀態。讀命令發出后,數據經過CAS延時后進入數據總線。讀寫操作完成之后,系統發送預充電命令關閉當前打開的行,狀態機再次進入空閑狀態,然后進行下一行的讀寫,如此循環操作來實現對DDR SDRAM的讀寫。

圖3 狀態轉移圖
輸入緩存的讀使能控制信號就是DDR SDRAM的寫使能信號,DDR SDRAM的讀使能信號即是輸出緩存的寫使能位信號,輸入和輸出緩存都是深度為5 760,寬度為16位的FIFO。視頻數據首先寫入輸入緩存,當輸入緩存中的數據容量達到其存儲量的2∕3時,控制器以133 MHz的頻率讀數據,并寫入到DDR SDRAM0中,接著控制器從DDR SDRAM1中讀出數據,并寫入到輸出緩存中,當輸出緩存中的數據容量達到其存儲量的2∕3時,數據就以66 MHz的頻率寫入其他模塊。這樣,輸入圖像數據連續以66 MHz的頻率流入,輸出圖像又以66 MHz的頻率流出,從而達到了一種動態平衡。當然最初從DDR SDRAM1中讀出的數據為無效數據,當DDR SDRAM0中寫滿一幀圖像數據,幀控制器對2個DDR SDRAM進行讀寫切換,即輸入緩存中的數據寫入DDR SDRAM1中,從DDR SDRAM0中讀出數據,當DDR SDRAM1中寫滿一幀圖像數據后,對2個DDR SDRAM進行讀寫切換,一直按此規則進行乒乓讀寫,從而完成整個視頻流的傳輸。本文采取乒乓讀寫的原理,能有效解決視頻數據流在傳輸過程中的瓶頸問題,輸入和輸出緩存每次寫入視頻幀中的兩行數據進行讀寫。本文將突發長度設為2,DDR SDRAM控制器中連續給出遞增的地址和讀寫命令就可以實現一行中任意偶數長度的突發讀寫。
為驗證設計系統的正確性,對DDR控制器進行了仿真實驗。選用ISE10.1編程環境,采用Spartan3E系列的XC3S500E-PQG208-4C芯片,選用Modelsim6.2b仿真,MT46V16M8XX-5B作為仿真模型,DDR控制器仿真結果如圖4所示。

圖4 DDR控制器仿真圖(截圖)
在圖4中,vclk為66 MHz的時鐘,bus_clk為133 MHz的時鐘,buffer0/din即輸入給輸入緩存的數據,buffer0/wr_en,buffer0/rd_en分別為輸入緩存的寫、讀控制信號,buffer1/wr_en,buffer1/rd_en分別為輸出緩存的寫、讀控制信號,buffer0_dataout,bu1_out分別為輸入緩存、輸出緩存2個緩存器的數據,ddr_dq為DDR控制器與DDR SDRAM仿真模型之間的傳輸數據,所有的讀寫控制信號均是高電平有效。從圖4中可以看出,ddr_dq是以偶數長度突發讀寫,每2個buffer0/wr_en有效后,buffer0/rd_en有效,對于輸入緩存而言,數據輸出buffer0_dataout的頻率是數據輸入buffer0/din的2倍,對于輸出緩存而言,數據寫入的頻率buffer1/din是bu1_out數據輸出頻率的2倍,整個系統最高輸入時鐘頻率可達99 MHz,占用了833個Slices,1 822個4輸入LUTS,45個IOBS單元和2個DCM。
利用Xilinx公司的Spartan3E系列的可編程邏輯器件中的DCM和DDR I/O特性,運用ISE10.1軟件的強大的功能,完成了一個DDR控制器的設計實現,該控制器在微處理器和DDR SDRAM之間架起了一座“橋梁”,解決了它們之間的接口問題,系統在133 MHz頻率上工作穩定,DDR SDRAM乒乓讀寫,有效解決了視頻傳輸中的瓶頸問題。本文相對于傳統視頻格式轉換芯片而言,易于控制,處理速度快,能穩定處理的數據量大,占用的芯片資源少,并且直接面向HDMI接口標準。
[1] 蔡鐘,吳皓,劉鵬,等.一種DDR SDRAM控制器設計[J].電視技術,2004,28(8):34-36.
[2] 吳健軍,初建朋,賴宗聲.基于FPGA的DDR SDRAM控制器的實現[J].微計算機信息,2006(2):156-157.
[3] 向守坤,黃啟俊,汪冠群,等.基于FPGA的ITU-R BT.656數字視頻轉換接口系統[J].電子測量技術,2009(4):113-117.
[4] 羅小巧,樊偉良,李偉.基于FPGA的數字視頻轉換接口的設計與實現[J].電子測量技術,2008(10):177-179.
[5] 陳大平,王勇.DDR SDRAM控制器的FPGA實現[J].儀器儀表用戶,2009(1):108-110.
[6] 柯昌松,侯朝煥,劉明剛.利用FPGA實現DDR存儲器控制器[J].計算機工程與應用,2004(34):110-111.
雷海軍(1968-),博士,副教授,碩士生導師,主研圖像處理、視頻編解碼、嵌入式系統、并行計算、IC設計等;
劉 鵬(1987-),碩士生,主研嵌入式多媒體系統,圖像處理;
陳戰夫(1985-),碩士生,主研FPGA、視頻多媒體信息處理;
何業軍,副教授,碩士生導師,主研寬帶和超寬帶無線通信技術、新一代(B3G/4G,LTE)移動/無線通信技術、MIMO多載波傳輸技術;
李先義,教授,博士,博士生導師。