王水魚,,李艷婷
(西安理工大學(xué) 自動化與信息工程學(xué)院,,陜西 西安 710048)
摘要:本文主要從視頻圖像采集系統(tǒng)出發(fā),針對基于FPGA視頻采集系統(tǒng)中需要實(shí)時顯示和高效存儲視頻數(shù)據(jù)的問題,,設(shè)計(jì)了視頻解碼和SDRAM存儲模塊,。在整個系統(tǒng)中使用CCD攝像頭將采集到的模擬信號經(jīng)解碼芯片ADV7181B解碼后,轉(zhuǎn)換為數(shù)字信號,,并使用乒乓存儲方法存儲在SDRAM中,,以方便提供給后期其他操作。在分析了視頻解碼及SDRAM的基本原理和主要參數(shù)的基礎(chǔ)上,,利用Verilog語言實(shí)現(xiàn)了將有效視頻數(shù)據(jù)分離出來并串行輸出,,同時也將圖像分辨率調(diào)整為符合VGA顯示的像素大小。另一方面通過乒乓緩存也保證了實(shí)時性,、高速度的數(shù)據(jù)存儲,。最后,經(jīng)過Modelsim仿真驗(yàn)證,,證明了本設(shè)計(jì)的有效性,。
關(guān)鍵詞:視頻解碼;ITU-656,;SDRAM,;乒乓緩存
0引言
圖1視頻采集系統(tǒng)框圖視頻圖像采集系統(tǒng)應(yīng)用非常廣泛,隨著計(jì)算機(jī)通信技術(shù)的不斷發(fā)展,,F(xiàn)PGA以其高性能,、低開發(fā)成本等優(yōu)點(diǎn)廣泛應(yīng)用于視頻和圖像處理領(lǐng)域[1],因此,更加深入地研究基于FPGA的實(shí)時圖像采集系統(tǒng), 對于視頻監(jiān)控系統(tǒng),、高性能的圖像處理等都具有極其重要的作用,。本文主要研究的內(nèi)容是基于FPGA的視頻采集及顯示系統(tǒng)中的視頻解碼和視頻數(shù)據(jù)存儲的問題,對于提取有效視頻數(shù)據(jù)流和高效實(shí)時存儲大量數(shù)據(jù)具有顯著性的意義,。
1視頻圖像數(shù)據(jù)采集系統(tǒng)的總體架構(gòu)
圖1為視頻圖像采集的系統(tǒng)框圖,,主要由I2C配置模塊、ITU656視頻解碼模塊,、SDRAM控制器模塊,、視頻格式轉(zhuǎn)化模塊和VGA控制器模塊組成[2]。為了使視頻數(shù)據(jù)能實(shí)時,、高速的顯示,,視頻解碼模塊和SDRAM控制模塊就顯得尤為重要,。
2ITU-656解碼
ITU-656是國際電信聯(lián)盟制成的視頻標(biāo)準(zhǔn),是國際電信聯(lián)盟建議為實(shí)現(xiàn)在專業(yè)視頻設(shè)備之間傳輸BT.601標(biāo)準(zhǔn),、4∶2∶2的YCrCb數(shù)字視頻信號而定義的一個并行接口和一個串行接口,。其中,并行接口在傳輸4∶2∶2的YCrCb視頻數(shù)據(jù)流的同時,,也會輸出水平同步信號HS及垂直同步信號VS控制,。
本文中ITU656標(biāo)準(zhǔn)的視頻數(shù)據(jù)以27 MB/s的速率按Cb,Y, Cr,,Y, Cb,,Y, Cr,…的順序分時傳送[3],。其中,,Cb,Y,,Cr是同一個地址的亮度和色差信號,,Y對應(yīng)于下一個亮度采樣信號。 Y采樣頻率為13.5 MHz,,Cb采樣頻率是6.75 MHz,,使用8位PCM編碼表示每個采樣點(diǎn)。ITU656 標(biāo)準(zhǔn)的數(shù)據(jù)傳輸格式如圖2所示,,每行采樣1 728個樣本點(diǎn),,其中Y為720個,Cb,,Cr各360個,。消隱期間的數(shù)據(jù)為288個(包括EAV和SAV)。
行控制信號有兩個定時基準(zhǔn)信號:SAV和EAV,。 EAV和SAV之間有280個固定填充數(shù)據(jù),。 SAV和EAV具有相同的前同步碼:FF,,00,00,,而后面的XY決定著該行在整個數(shù)據(jù)幀的位置,并且SAV和EAV信號可以通過XY的值來區(qū)別,,同時XY也包含有奇偶場識別,、狀態(tài)和信息、場消隱行消隱狀態(tài),。
F:F=0奇場,,F(xiàn)=1偶場;V:V=1消隱數(shù)據(jù),,V=0有效行數(shù)據(jù),;H:H=0表示SAV,,H=1表示EAV;P3,,P2,,P1,P0:保護(hù)比特位,,其值由F,、V、H 決定,。
ITU656數(shù)字解碼模塊[4]的功能是根據(jù)ITU656視頻數(shù)據(jù)流的特點(diǎn)將有效視頻數(shù)據(jù)YCbCr和F,、V、H 控制信號分離開來,,并通過計(jì)算像素行列的坐標(biāo),,確定圖像中像素的具體位置,根據(jù)ITU656數(shù)據(jù)傳輸時序,,通過行內(nèi)計(jì)數(shù)方式去除行消隱數(shù)據(jù),,并分離出SAV、EAV 信號,,留下只包括YCbCr信號的數(shù)據(jù)流,,并將其串行輸出。ITU656數(shù)字解碼模塊另一個功能是通過計(jì)算水平數(shù)據(jù)的像素坐標(biāo),,將圖像分辨率由720×576調(diào)整為640×480,,以便在VGA中顯示。
根據(jù)SAV 和EAV 都是以FF,、00,、00 的順序開始的特點(diǎn),設(shè)置一個序列移位器,,采用4級寄存器級聯(lián)的形式,,每個寄存器緩存8 bit數(shù)據(jù),并監(jiān)測后面3個寄存器的值,,當(dāng)這三個寄存器緩存的數(shù)據(jù)不是FF,、00、00時,,序列移位器向右移,,當(dāng)檢測到這3個寄存器的值為FF、00,、00,、時,即認(rèn)為是SAV或EAV的到來,,就將第一個寄存器的 bit6,、bit5,、bit4分別存放到3個一位寄存器中,從而提取出 F,、V,、H 信號。H(bit4)如果為0,,即表示有效數(shù)據(jù)開始,。再通過 V、F是否為0可判斷出是有效行數(shù)據(jù)還是消隱數(shù)據(jù),,是奇場還是偶場的數(shù)據(jù),。解碼過程如圖3所示。
調(diào)整圖像分辨率,,定義一個Active_Vedio信號,,如果Active_Vedio在0~1 440之間,則為有效視頻數(shù)據(jù),。首先720行數(shù)據(jù)調(diào)整為640行數(shù)據(jù),,把SAV和EAV信號提取出來后,此處設(shè)計(jì)一個FVAL信號,,如果FVAL為1,,則得到一行720個有效像素值,因此要在這720個有效像素中裁剪掉80個像素,。本設(shè)計(jì)使用Verilog語言,,水平方向的像素提取用一個除法器iskip來實(shí)現(xiàn),定義一個水平計(jì)數(shù)器OTY_X,,即除法器iskip=OTV_X%9,若iskip為0,,則該像素點(diǎn)被丟棄,否則保留,。在丟棄像素點(diǎn)時遵循兩個原則[5]:(1)像素數(shù)據(jù)為只包含亮度信息的像素點(diǎn),,則將此像素點(diǎn)的亮度值Y丟棄,并且將上一個像素點(diǎn)的色度分量Cr同時丟棄,;(2)像素數(shù)據(jù)為一個完整的像素點(diǎn),,包含了Y、Cb,、Cr分量值:將分量Y和Cb丟棄,,保留Cr,;其次576行數(shù)據(jù)調(diào)整為480行數(shù)據(jù),,根據(jù)PAL制式視頻信號的特點(diǎn),分別取偶數(shù)場24~264行240個數(shù)據(jù),奇數(shù)場312~552行240個數(shù)據(jù),,組成480行VGA數(shù)據(jù),,其他數(shù)據(jù)丟棄,,由于丟棄的僅是一副圖像的最邊緣部分,所以對整幅圖像影響不大,。
提取有效視頻數(shù)據(jù),,PAL制式的視頻信號的場消隱一共是49行,其中偶數(shù)場和奇數(shù)場的消隱期分別為24行和25行,。通過設(shè)計(jì)一個4位行計(jì)數(shù)器TY_Y實(shí)現(xiàn),,當(dāng)Hs=1時對Vs進(jìn)行計(jì)數(shù),如果YV_Y大于或等于24,,就可以輸出穩(wěn)定的有效視頻數(shù)據(jù),。
解碼模塊如圖4所示。
圖5是ITU656 數(shù)字解碼模塊在Modelism6.6中的仿真圖,,圖中TD_DATA是輸入的視頻流,,當(dāng)它出現(xiàn)FF0000同時XY中的H、V 都為0時,,開始輸出有效的視頻數(shù)據(jù),,輸出信號oYCbCr的高8 位為Y,低8位為Cb和Cr交替出現(xiàn),。
3SDRAM控制器設(shè)計(jì)
視頻采集模塊中,,采用ITU656同步時鐘27 MHz,而SDRAM的工作時鐘通常在100 MHz以上,。為解決讀寫時鐘不同步的問題,,本設(shè)計(jì)中,采用了四個異步FIFO[6]用于跨時鐘域的同步化,,其作用是將CCD攝像頭采集進(jìn)來的圖像數(shù)據(jù)進(jìn)行緩存,,通過寫FIFO讀入SDRAM,讀FIFO輸出給VGA控制器,。讀寫FIFO是利用FPGA的片上資源從IP核中調(diào)用過來的,,將SDRAM的數(shù)據(jù)端口仿真成四個虛擬端口(兩個寫端口兩個讀端口),控制器根據(jù)緩存FIFO的狀態(tài)對SDRAM發(fā)出讀寫請求,,采用頁模式突發(fā)傳輸和Bank切換的方式來匹配時序要求,。
異步FIFO的宏模塊設(shè)計(jì)如圖6所示。
圖6FIFO宏模塊 SDRAM 本身要進(jìn)行刷新,、預(yù)充電等操作,,不能時刻處于傳輸數(shù)據(jù)的狀態(tài),而且控制邏輯比較復(fù)雜,,不能和其他器件進(jìn)行透明連接,為此,,設(shè)計(jì)一個 SDRAM控制器,其他模塊就可通過 SDRAM控制器模塊接口和 SDRAM 相連接,從而對 SDRAM 進(jìn)行操作,實(shí)現(xiàn)乒乓緩存,。
本文設(shè)計(jì)的SDRAM控制器[7]主要由系統(tǒng)讀寫控制模塊,、SDRAM控制接口模塊、命令解析響應(yīng)模塊,、數(shù)據(jù)通道模塊組成,,其內(nèi)部結(jié)構(gòu)如圖7所示。
?。?)系統(tǒng)讀寫控制模塊
該模塊的功能是與外設(shè)接口相連,,接受外部發(fā)來的控制信號,并對控制信號進(jìn)行編碼,。根據(jù)FIFO的空滿狀態(tài)發(fā)出對SDRAM的讀寫請求信號,。當(dāng)寫FIFO里面所存儲的數(shù)據(jù)大小為SDRAM一頁數(shù)據(jù)時,則寫FIFO通過讀請求信號往SDRAM里面?zhèn)鬏敂?shù)據(jù),。因?yàn)槊總€端口FIFO里面可以緩存兩頁大小的SDRAM數(shù)據(jù),,所以當(dāng)寫FIFO向SDRAM里面?zhèn)鬏敂?shù)據(jù)時也可以繼續(xù)緩存輸入進(jìn)來的圖像數(shù)據(jù)。同理,,當(dāng)VGA控制器向讀FIFO讀取數(shù)據(jù)時,,讀FIFO里面緩存的數(shù)據(jù)大小小于SDRAM每頁的大小時就可以進(jìn)行讀出了,此時SDRAM也可以繼續(xù)向讀 FIFO里面緩存數(shù)據(jù),。以此輪流進(jìn)行緩存操作,。
(2)SDRAM 控制接口模塊
該模塊主要完成初始化功能以及分析系統(tǒng)指令,。初始化結(jié)束后,,系統(tǒng)開始接收并分析指令信號和地址信息,同時還要分析來自命令模塊的CMD_ACK反饋信號,,并產(chǎn)生相應(yīng)的SADDR信息給命令響應(yīng)模塊,。
(3)命令解析響應(yīng)模塊
該模塊接受來自SDRAM控制接口模塊的指令并進(jìn)行判斷,,根據(jù)發(fā)來的指令產(chǎn)生對SDRAM進(jìn)行控制的信號:地址信號(ADDR),、控制信號(CS、CKE)和指令信號(RAS,、CAS,、WE)。此外,,可以通過LOAD-MODE命令,,對預(yù)設(shè)的模式寄存器進(jìn)行配置,從而實(shí)現(xiàn)對SDRAM工作模式的操控,。最后,,該模塊通過使能信號OE來判斷讀、寫請求信號,以此來控制數(shù)據(jù)通路模塊數(shù)據(jù)的發(fā)送方向,。
(4)數(shù)據(jù)通路模塊
數(shù)據(jù)通路模塊的功能是:在寫數(shù)據(jù)時將輸入的數(shù)據(jù)送入到SDRAM中或者在讀數(shù)據(jù)時將SDRAM中的數(shù)據(jù)送到數(shù)據(jù)輸出口,。
SDRAM控制器的頂層模塊如圖8所示,。
設(shè)計(jì)好 SDRAM控制器后,采用2個SDRAM,,利用乒乓緩存[8]結(jié)構(gòu)的方式來實(shí)現(xiàn)對視頻信號的緩存,。在第1個緩存周期,輸入的數(shù)據(jù)流在SDRAM控制器控制下被寫入到SDRAM1中,。在第2個緩存周期,,通過選擇信號的切換,將輸入的數(shù)據(jù)流寫入到SDRAM2中,;同時,,將SDRAM1中寫入的第1個緩存周期的數(shù)據(jù)讀出,輸出到運(yùn)算處理單元進(jìn)行處理,。在第3個緩存周期,,再次通過選擇信號切換數(shù)據(jù)的輸入與輸出緩存單元。如此循環(huán),,從而將緩沖的數(shù)據(jù)流不停頓地送到下一模塊進(jìn)行處理,。
圖9為SDRAM控制接口模塊的時序仿真圖。圖中,,完成初始化后,,該模塊根據(jù)CMD指令,解析出對應(yīng)的SDRAM操作命令,。
圖10是指令解析響應(yīng)模塊仿真時序圖,,該模塊根據(jù)發(fā)來的讀、寫,、刷等命令,,對SDRAM的控制信號RAS_N、CAS_N,、WE_N,、CKE進(jìn)行編碼。
4結(jié)論
本文首先介紹了基于FPGA視頻采集系統(tǒng)的整體設(shè)計(jì),,對于采集和存儲過程中實(shí)時性和高效性的要求,,分別討論了ITU656視頻解碼中需要從采集到的視頻數(shù)據(jù)中提取出有效視頻數(shù)據(jù)流,以及將其調(diào)整為符合VGA顯示的像素大小,。在存儲模塊中,,SDRAM的工作時鐘和視頻采集系統(tǒng)的時鐘不同,為解決讀寫時鐘不同步的問題,采用異步FIFO實(shí)現(xiàn)跨時鐘域的同步化,,同時采用了兩片SDRAM實(shí)現(xiàn)乒乓緩存設(shè)計(jì),,對SDRAM控制器各個模塊分別進(jìn)行Modelsim仿真驗(yàn)證,得出正確結(jié)果,,可以滿足系統(tǒng)的整體要求,。
參考文獻(xiàn)
[1] 馬峰,徐和根,趙曼,,等.基于FPGA的智能卡控制器的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2013,32(1):2022.
?。?] 沙晶晶.基于CPLD的VGA時序彩色信號的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2013,32(1):5758,61.
[3]范興山,,彭軍,,黃樂天,等.基于OpenCL的FPGA設(shè)計(jì)優(yōu)化方法研究[J].電子技術(shù)應(yīng)用,,2014,40(1):1619.
?。?] 趙清華.基于FPGA的目標(biāo)跟蹤算法的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:中國科學(xué)院西安光學(xué)精密機(jī)械研究所,2014.
?。?] 祝長鋒,,肖鐵軍.基于FPGA的實(shí)時圖像檢測技術(shù)的研究[D].鎮(zhèn)江:江蘇大學(xué),2008.
?。?] 占文慶.基于FPGA的視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[D].武漢:武漢理工大學(xué),,2014.
[7] 何云斌,,張玉芬.多端口SDRAM控制器的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱理工大學(xué),,2009.
[8] 黃彪.基于FPGA的高清視頻信號實(shí)時處理系統(tǒng)的研究[D].西安:國科學(xué)院西安光學(xué)精密機(jī)械研究所,,2013.