雷海軍,劉 鵬,陳戰(zhàn)夫,何業(yè)軍,李先義
(深圳大學(xué) a.計(jì)算機(jī)與軟件學(xué)院;b.信息工程學(xué)院;c.數(shù)學(xué)與計(jì)算科學(xué)學(xué)院,廣東 深圳 518060)
隨著多媒體技術(shù)的發(fā)展以及數(shù)字電視的推廣,不同視頻格式之間的轉(zhuǎn)換問(wèn)題也日益嚴(yán)重,為滿足各種多媒體終端的兼容需要,設(shè)計(jì)了視頻格式轉(zhuǎn)換芯片,實(shí)時(shí)視頻處理意味著需要大容量的高速存儲(chǔ)器,常用的有SDRAM,ROM[1]。
雙數(shù)據(jù)率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Double Data Rate SDRAM,DDR SDRAM)可在信號(hào)的上升沿和下降沿都進(jìn)行數(shù)據(jù)傳輸,所以DDR內(nèi)存在每個(gè)時(shí)鐘周期都可完成2倍于SDR SDRAM的數(shù)據(jù)傳輸量,并且單位存儲(chǔ)成本與SDR SDRAM相當(dāng)[2]。因而,對(duì)于高速數(shù)據(jù)采集系統(tǒng),無(wú)論從成本還是性能方面考慮,采用DDR作為系統(tǒng)的存儲(chǔ)器件是合適的,傳統(tǒng)的視頻格式轉(zhuǎn)換芯片大多數(shù)是基于VGA標(biāo)清時(shí)序,視頻數(shù)據(jù)需要經(jīng)A/D轉(zhuǎn)換、YCbCr向RGB空間模型轉(zhuǎn)換以及D/A轉(zhuǎn)換,最后接入VGA接口[3-4]。芯片結(jié)構(gòu)復(fù)雜,并且占用資源多,數(shù)據(jù)處理效率低。
DDR SDRAM容量大、價(jià)格低、速度快[5],為此,本文設(shè)計(jì)了DDR SDRAM控制器,以滿足將來(lái)復(fù)雜視頻處理算法和提高系統(tǒng)時(shí)鐘的要求。與傳統(tǒng)的視頻格式轉(zhuǎn)換芯片相比,設(shè)計(jì)的視頻格式轉(zhuǎn)換芯片面向高清視頻,能處理更大容量的數(shù)據(jù),不需要相關(guān)的轉(zhuǎn)換,芯片設(shè)計(jì)的結(jié)構(gòu)簡(jiǎn)單,占用的資源相對(duì)較少。本文設(shè)計(jì)了一種基于狀態(tài)機(jī),并且適用于數(shù)字視頻的DDR SDRAM控制器,采用2片DDR SDRAM作為片外存儲(chǔ)器,采取乒乓讀寫操作,有效解決了視頻數(shù)據(jù)流在傳輸過(guò)程中的瓶頸問(wèn)題。
采用2個(gè)DDR SDRAM作為幀緩存,在DDR控制器前后分別有一個(gè)緩存器(輸入緩存和輸出緩存),如圖1所示。電視模式選擇模塊選擇不同的模式(1 080p或720p),PE1005S視頻時(shí)序數(shù)字模擬模塊用于前端功能仿真測(cè)試,模擬66 MHz頻率輸出的視頻數(shù)據(jù);輸入緩存用于緩存來(lái)自PE1005S模塊的視頻數(shù)據(jù);幀控制器用于對(duì)DDR SDRAM進(jìn)行讀寫切換;DDR SDRAM用于控制DDR SDRAM的讀寫操作;輸出緩存用于緩存從DDR SDRAM中讀出的數(shù)據(jù);時(shí)序發(fā)生器產(chǎn)生SMPTE高清電視時(shí)序,配合用于將YPbPr轉(zhuǎn)換成SMPTE標(biāo)準(zhǔn)時(shí)序的SAV/EAV模塊,最終完成整個(gè)系統(tǒng)視頻數(shù)據(jù)的格式轉(zhuǎn)換。
圖1 視頻格式轉(zhuǎn)換系統(tǒng)結(jié)構(gòu)
本文設(shè)計(jì)的DDR控制器按照不同的實(shí)現(xiàn)功能可劃分為4個(gè)模塊,如圖2所示??刂破髂K接收并譯碼用戶命令,產(chǎn)生讀、寫、初始化命令以及其他模塊所需的部分信號(hào);數(shù)據(jù)路徑模塊從存儲(chǔ)器中接收數(shù)據(jù)和發(fā)送數(shù)據(jù)到存儲(chǔ)器,主要功能是存儲(chǔ)從存儲(chǔ)器中讀出的數(shù)據(jù)以及寫數(shù)據(jù)并生成使能信號(hào)到輸入輸出管理模塊;基礎(chǔ)模塊生成整個(gè)系統(tǒng)的時(shí)鐘和復(fù)位信號(hào);輸入輸出管理模塊提供與存儲(chǔ)器連接的各種輸入輸出端口。這樣有利于對(duì)DDR控制器的設(shè)計(jì)查錯(cuò),縮短產(chǎn)品開(kāi)發(fā)周期。
圖2 DDR控制器的結(jié)構(gòu)
因?yàn)閄ilinx Spartan3E系列芯片要求64 ms內(nèi)刷新4 096次,而在視頻展臺(tái)設(shè)計(jì)中,由于在64 ms內(nèi)對(duì)DDR SDRAM至少進(jìn)行4 096次讀、寫操作,所以可不必對(duì)其進(jìn)行刷新[6]。控制功能包括DDR SDRAM的初始化、突發(fā)讀寫和預(yù)充電??刂乒δ懿话运⑿鹿δ?。圖3是DDR SDRAM的整個(gè)狀態(tài)轉(zhuǎn)移圖。系統(tǒng)上電后處于空閑狀態(tài),在進(jìn)行讀寫操作前必須對(duì)其進(jìn)行初始化。初始化中將對(duì)突發(fā)長(zhǎng)度、突發(fā)類型、CAS(Column Access Strobe)延時(shí)等參數(shù)進(jìn)行配置。完成后系統(tǒng)進(jìn)入空閑狀態(tài),狀態(tài)機(jī)進(jìn)入激活狀態(tài),在該狀態(tài)下,激活讀寫地址所對(duì)應(yīng)的行,這樣此行被打開(kāi)直到發(fā)出預(yù)充電命令關(guān)閉此行,在打開(kāi)的狀態(tài)下可對(duì)該行連續(xù)讀寫,而不用再發(fā)激活命令,從而提高了數(shù)據(jù)的吞吐率。行被激活后,經(jīng)過(guò)一段延時(shí),狀態(tài)機(jī)進(jìn)入讀或?qū)憼顟B(tài)。讀命令發(fā)出后,數(shù)據(jù)經(jīng)過(guò)CAS延時(shí)后進(jìn)入數(shù)據(jù)總線。讀寫操作完成之后,系統(tǒng)發(fā)送預(yù)充電命令關(guān)閉當(dāng)前打開(kāi)的行,狀態(tài)機(jī)再次進(jìn)入空閑狀態(tài),然后進(jìn)行下一行的讀寫,如此循環(huán)操作來(lái)實(shí)現(xiàn)對(duì)DDR SDRAM的讀寫。
圖3 狀態(tài)轉(zhuǎn)移圖
輸入緩存的讀使能控制信號(hào)就是DDR SDRAM的寫使能信號(hào),DDR SDRAM的讀使能信號(hào)即是輸出緩存的寫使能位信號(hào),輸入和輸出緩存都是深度為5 760,寬度為16位的FIFO。視頻數(shù)據(jù)首先寫入輸入緩存,當(dāng)輸入緩存中的數(shù)據(jù)容量達(dá)到其存儲(chǔ)量的2∕3時(shí),控制器以133 MHz的頻率讀數(shù)據(jù),并寫入到DDR SDRAM0中,接著控制器從DDR SDRAM1中讀出數(shù)據(jù),并寫入到輸出緩存中,當(dāng)輸出緩存中的數(shù)據(jù)容量達(dá)到其存儲(chǔ)量的2∕3時(shí),數(shù)據(jù)就以66 MHz的頻率寫入其他模塊。這樣,輸入圖像數(shù)據(jù)連續(xù)以66 MHz的頻率流入,輸出圖像又以66 MHz的頻率流出,從而達(dá)到了一種動(dòng)態(tài)平衡。當(dāng)然最初從DDR SDRAM1中讀出的數(shù)據(jù)為無(wú)效數(shù)據(jù),當(dāng)DDR SDRAM0中寫滿一幀圖像數(shù)據(jù),幀控制器對(duì)2個(gè)DDR SDRAM進(jìn)行讀寫切換,即輸入緩存中的數(shù)據(jù)寫入DDR SDRAM1中,從DDR SDRAM0中讀出數(shù)據(jù),當(dāng)DDR SDRAM1中寫滿一幀圖像數(shù)據(jù)后,對(duì)2個(gè)DDR SDRAM進(jìn)行讀寫切換,一直按此規(guī)則進(jìn)行乒乓讀寫,從而完成整個(gè)視頻流的傳輸。本文采取乒乓讀寫的原理,能有效解決視頻數(shù)據(jù)流在傳輸過(guò)程中的瓶頸問(wèn)題,輸入和輸出緩存每次寫入視頻幀中的兩行數(shù)據(jù)進(jìn)行讀寫。本文將突發(fā)長(zhǎng)度設(shè)為2,DDR SDRAM控制器中連續(xù)給出遞增的地址和讀寫命令就可以實(shí)現(xiàn)一行中任意偶數(shù)長(zhǎng)度的突發(fā)讀寫。
為驗(yàn)證設(shè)計(jì)系統(tǒng)的正確性,對(duì)DDR控制器進(jìn)行了仿真實(shí)驗(yàn)。選用ISE10.1編程環(huán)境,采用Spartan3E系列的XC3S500E-PQG208-4C芯片,選用Modelsim6.2b仿真,MT46V16M8XX-5B作為仿真模型,DDR控制器仿真結(jié)果如圖4所示。
圖4 DDR控制器仿真圖(截圖)
在圖4中,vclk為66 MHz的時(shí)鐘,bus_clk為133 MHz的時(shí)鐘,buffer0/din即輸入給輸入緩存的數(shù)據(jù),buffer0/wr_en,buffer0/rd_en分別為輸入緩存的寫、讀控制信號(hào),buffer1/wr_en,buffer1/rd_en分別為輸出緩存的寫、讀控制信號(hào),buffer0_dataout,bu1_out分別為輸入緩存、輸出緩存2個(gè)緩存器的數(shù)據(jù),ddr_dq為DDR控制器與DDR SDRAM仿真模型之間的傳輸數(shù)據(jù),所有的讀寫控制信號(hào)均是高電平有效。從圖4中可以看出,ddr_dq是以偶數(shù)長(zhǎng)度突發(fā)讀寫,每2個(gè)buffer0/wr_en有效后,buffer0/rd_en有效,對(duì)于輸入緩存而言,數(shù)據(jù)輸出buffer0_dataout的頻率是數(shù)據(jù)輸入buffer0/din的2倍,對(duì)于輸出緩存而言,數(shù)據(jù)寫入的頻率buffer1/din是bu1_out數(shù)據(jù)輸出頻率的2倍,整個(gè)系統(tǒng)最高輸入時(shí)鐘頻率可達(dá)99 MHz,占用了833個(gè)Slices,1 822個(gè)4輸入LUTS,45個(gè)IOBS單元和2個(gè)DCM。
利用Xilinx公司的Spartan3E系列的可編程邏輯器件中的DCM和DDR I/O特性,運(yùn)用ISE10.1軟件的強(qiáng)大的功能,完成了一個(gè)DDR控制器的設(shè)計(jì)實(shí)現(xiàn),該控制器在微處理器和DDR SDRAM之間架起了一座“橋梁”,解決了它們之間的接口問(wèn)題,系統(tǒng)在133 MHz頻率上工作穩(wěn)定,DDR SDRAM乒乓讀寫,有效解決了視頻傳輸中的瓶頸問(wèn)題。本文相對(duì)于傳統(tǒng)視頻格式轉(zhuǎn)換芯片而言,易于控制,處理速度快,能穩(wěn)定處理的數(shù)據(jù)量大,占用的芯片資源少,并且直接面向HDMI接口標(biāo)準(zhǔn)。
[1] 蔡鐘,吳皓,劉鵬,等.一種DDR SDRAM控制器設(shè)計(jì)[J].電視技術(shù),2004,28(8):34-36.
[2] 吳健軍,初建朋,賴宗聲.基于FPGA的DDR SDRAM控制器的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006(2):156-157.
[3] 向守坤,黃啟俊,汪冠群,等.基于FPGA的ITU-R BT.656數(shù)字視頻轉(zhuǎn)換接口系統(tǒng)[J].電子測(cè)量技術(shù),2009(4):113-117.
[4] 羅小巧,樊偉良,李偉.基于FPGA的數(shù)字視頻轉(zhuǎn)換接口的設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2008(10):177-179.
[5] 陳大平,王勇.DDR SDRAM控制器的FPGA實(shí)現(xiàn)[J].儀器儀表用戶,2009(1):108-110.
[6] 柯昌松,侯朝煥,劉明剛.利用FPGA實(shí)現(xiàn)DDR存儲(chǔ)器控制器[J].計(jì)算機(jī)工程與應(yīng)用,2004(34):110-111.
雷海軍(1968-),博士,副教授,碩士生導(dǎo)師,主研圖像處理、視頻編解碼、嵌入式系統(tǒng)、并行計(jì)算、IC設(shè)計(jì)等;
劉 鵬(1987-),碩士生,主研嵌入式多媒體系統(tǒng),圖像處理;
陳戰(zhàn)夫(1985-),碩士生,主研FPGA、視頻多媒體信息處理;
何業(yè)軍,副教授,碩士生導(dǎo)師,主研寬帶和超寬帶無(wú)線通信技術(shù)、新一代(B3G/4G,LTE)移動(dòng)/無(wú)線通信技術(shù)、MIMO多載波傳輸技術(shù);
李先義,教授,博士,博士生導(dǎo)師。