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