基于面積的實(shí)現(xiàn)和基于速度的實(shí)現(xiàn)-兩種YUV分離的FPGA的實(shí)現(xiàn)方式
0 引言
隨著視頻采集、壓縮技術(shù)以及無線傳輸技術(shù)的飛速發(fā)展,基于FPGA的設(shè)計(jì)被廣泛應(yīng)用到各個(gè)領(lǐng)域,尤其在嵌入式系統(tǒng)。傳統(tǒng)的視頻技術(shù)解決方案(如采用CPLD+CPU的結(jié)構(gòu)進(jìn)行的設(shè)計(jì))已經(jīng)不能滿足人們對(duì)于集成度與實(shí)時(shí)性的要求,而FPGA恰逢其時(shí)的出現(xiàn),以其高度集成,并行處理和豐富的片上資源,同時(shí)隨著FPGA自身性能的不斷提高,各個(gè)FPGA廠商為視頻處理提供了越來越多的高性能解決方案,使得FPGA在視頻采集壓縮以及無線傳輸領(lǐng)域的應(yīng)用越來越廣泛。
本文的研究是基于FPGA的實(shí)時(shí)視頻無線傳輸系統(tǒng)的一部分。在進(jìn)入視頻壓縮編碼器之前,需要完成視頻的采集,模/數(shù)轉(zhuǎn)換,預(yù)處理,讀/寫SDRAM等操作,本文針對(duì)預(yù)處理過程中數(shù)字視頻的分離存儲(chǔ)進(jìn)行了研究.即YUV的分離存儲(chǔ),并采用了兩種方法實(shí)現(xiàn)了YUV的分離存儲(chǔ);一種是基于面積考慮的只用一片雙端口存儲(chǔ)器的實(shí)現(xiàn);另外一種是基于速度考慮的用兩片雙端口處理器的實(shí)現(xiàn)。
1 基于FPGA的實(shí)時(shí)視頻無線傳輸系統(tǒng)
本文的系統(tǒng)主要由視頻采集、視頻壓縮、無線傳輸3大部分組成。系統(tǒng)結(jié)構(gòu)如圖1所示。在視頻數(shù)據(jù)進(jìn)入視頻壓縮編碼器之前,視頻需要經(jīng)過CCD視頻采集、TVP5146視頻解碼、有效數(shù)據(jù)抽取、預(yù)處理、SDRAM存儲(chǔ)等操作。這些操作均屬于視頻采集前端系統(tǒng)。其中,CCD完成模擬視頻的采集,TVP5146完成對(duì)輸入模擬視頻到數(shù)字視頻的轉(zhuǎn)換,而這里需要對(duì)TVP5146進(jìn)行內(nèi)部寄存器設(shè)置,設(shè)置通過I2C總線來完成。有效數(shù)據(jù)抽取模塊完成對(duì)有效視頻數(shù)據(jù)的抽取,1幀視頻數(shù)據(jù)由625行分屬于奇偶場(chǎng)的視頻組成,而系統(tǒng)所需要的是1幀視頻的576行有效數(shù)據(jù)中的特定像素,而這個(gè)工作就是由有效視頻抽取模塊完成;預(yù)處理模塊則是完成數(shù)字視頻的串/并轉(zhuǎn)換,即8位到16位的轉(zhuǎn)換以及YUV的分離,這也是本文所做的工作,下面將做詳細(xì)介紹;然后將視頻存儲(chǔ)在SDRAM中,實(shí)現(xiàn)了為H.264編碼器提供穩(wěn)定的視頻流供壓縮;3G模塊將壓縮模塊送出的視頻流進(jìn)行RTP封裝,然后發(fā)送到遠(yuǎn)端接收系統(tǒng)。
本文所做的研究是基于YUV分離開展的,前面已經(jīng)提過面積與速度是FPGA設(shè)計(jì)不變的主題。二者也是一對(duì)矛盾體,不可能同時(shí)兼顧,在系統(tǒng)設(shè)計(jì)中只能通過速度和面積的互換來使二者有機(jī)的統(tǒng)一起來。其中,基于面積的設(shè)計(jì)是利用一片雙端口RAM,利用FPGA與SDRAM之間的頻率差異來實(shí)現(xiàn)的,選定的FPGA的工作頻率為48 MHz,SDRAM的工作頻率為100 MHz,這樣就實(shí)現(xiàn)了再一行視頻數(shù)據(jù)的有效期完成對(duì)雙端口RAM的寫,然后利用一行視頻數(shù)據(jù)的行消隱期,完成對(duì)雙口RAM的讀出操作,進(jìn)而實(shí)現(xiàn)了YUV分離輸出;而另一種實(shí)現(xiàn)是基于速度的實(shí)現(xiàn),利用兩片雙端口RAM進(jìn)行乒乓操作,完成了數(shù)據(jù)的無縫緩存和處理。本文通過Verilog實(shí)現(xiàn)了兩種方法設(shè)計(jì)。通過對(duì)比仿真結(jié)果,均達(dá)到了預(yù)期結(jié)果。
2 基于面積的實(shí)現(xiàn)
面積通??梢酝ㄟ^一個(gè)工程運(yùn)行所消耗的觸發(fā)器(FF)和查找表(LUT)數(shù)量已經(jīng)等效門數(shù)量來衡量,即所消耗的資源來衡量。本文基于面積的設(shè)計(jì),充分考慮到用戶對(duì)集成度和智能化的要求。對(duì)于集成度和智能化的提高,應(yīng)該著眼于每一部分的優(yōu)化,才能獲得整個(gè)系統(tǒng)集成度和智能化的提高,因此,本文對(duì)YUV分離這個(gè)模塊進(jìn)行了研究?jī)?yōu)化。
該模塊基于面積的設(shè)計(jì)采用一片雙口RAM進(jìn)行模塊結(jié)構(gòu)圖如圖2所示。有效數(shù)據(jù)抽取模塊與控制器和雙口RAM的輸入時(shí)鐘應(yīng)與FPGA工作時(shí)鐘保持一致。有效數(shù)據(jù)抽取為雙口RAM提供寫使能,每行提供的有效視頻數(shù)據(jù)為704個(gè)像素,等到該模塊檢測(cè)到有效視頻數(shù)據(jù)的時(shí)候,對(duì)雙口RAM發(fā)出讀使能,然后接下來利用704個(gè)CLK完成對(duì)雙口RAM的寫操作,等到寫完畢時(shí)向SDRAM發(fā)出滿信號(hào),在SDRAM收到該信號(hào)后,產(chǎn)生讀使能,以便對(duì)雙口RAM構(gòu)成的讀操作。該模塊的設(shè)計(jì)思想是基于FPGA與SDRAM頻率差異進(jìn)行設(shè)計(jì)的。一幀視頻數(shù)據(jù)由625行視頻組成,分奇、偶兩場(chǎng),每一幀都是由有效視頻數(shù)據(jù)和場(chǎng)消隱數(shù)據(jù)組成的。其中23~310和336~623為有效視頻數(shù)據(jù),共576行。其余49行為場(chǎng)消隱數(shù)據(jù),每一行同樣分為行有效數(shù)據(jù)和行消隱數(shù)據(jù)。如果FPGA的工作頻率與SDRAM的頻率滿足一定的差異(本文采用的FPGA頻率為48 MHz,而SDRAM采用100 MHz的時(shí)鐘頻率),那么在一行視頻數(shù)據(jù)的有效期完成對(duì)雙口RAM的寫入后,在該行視頻數(shù)據(jù)的行消隱期內(nèi),可以通過輸入100 MHz的時(shí)鐘來完成對(duì)雙口RAM的讀操作。該模塊完成對(duì)有效視頻數(shù)據(jù)的寫入需要1 408個(gè)CLK,而完成存儲(chǔ)數(shù)據(jù)的讀取需要704個(gè)CLK_R,所需時(shí)間為1 408×10-8+704×(1/48000000)。因?yàn)樽x/寫是串行執(zhí)行的,故以后每一行有效視頻的寫入/讀出均需要相同的時(shí)間,一行數(shù)據(jù)讀出完畢的仿真如圖3所示。
3 基于速度的實(shí)現(xiàn)
前面提到了FPGA設(shè)計(jì)中面積與速度不斷變換的原則,基于面積的實(shí)現(xiàn)方式只用到了一片雙口RAM,在一定程度上達(dá)到了面積優(yōu)化的目標(biāo),但是也看到讀/寫是串行執(zhí)行的,在系統(tǒng)運(yùn)行速度上確實(shí)有一定的缺陷,無法滿足系統(tǒng)對(duì)實(shí)時(shí)性的要求,同時(shí)系統(tǒng)需要兩個(gè)不同頻率的時(shí)鐘,容易引起亞穩(wěn)態(tài)。下面將介紹一種基于速度的實(shí)現(xiàn)方式。
3.1 乒乓操作
乒乓操作是一個(gè)用于數(shù)據(jù)流控制的處理技巧,本文利用了兩片雙口RAM來作為乒乓操作的數(shù)據(jù)緩沖區(qū),乒乓操作如圖4所示。外部視頻數(shù)據(jù)在輸入數(shù)據(jù)選擇控制模塊和輸出數(shù)據(jù)選擇控制模塊的控制下,完成緩沖區(qū)的選擇和視頻數(shù)據(jù)的輸入/輸出,并將經(jīng)過緩沖的數(shù)據(jù)流不停頓地送到下一模塊進(jìn)行運(yùn)算或處理。它適合于對(duì)數(shù)據(jù)流進(jìn)行流水線式處理,能高效地完成大量實(shí)時(shí)視頻數(shù)據(jù)的無縫緩沖和處理。在第一個(gè)緩存周期,也稱之為雙口RAM0的寫周期。視頻數(shù)據(jù)在雙口RAM控制器控制下選擇將視頻數(shù)據(jù)輸入到雙口RAM0;在下一個(gè)周期,輸入控制模塊將視頻數(shù)據(jù)輸入到雙口RAM1,同時(shí)輸出控制模塊輸出雙口RAM0的視頻數(shù)據(jù)到后續(xù)模塊進(jìn)行處理;在第三個(gè)周期時(shí),在輸入控制模塊的控制下,將輸入視頻數(shù)據(jù)輸入到雙口RAM0,同時(shí)在輸出控制模塊控制下,將雙口RAM1中存儲(chǔ)數(shù)據(jù)輸出到后續(xù)模塊,如此不斷循環(huán)。
3.2 模塊設(shè)計(jì)與仿真
該模塊利用了兩片雙口RAM在不同的緩沖周期內(nèi)分別進(jìn)行讀/寫。該模塊主要由有效數(shù)據(jù)抽取、雙口RAM控制器、兩片雙口RAM組成,模塊結(jié)構(gòu)如圖5所示。該模塊在控制器控制下視頻數(shù)據(jù)經(jīng)有效數(shù)據(jù)抽取模塊抽取后進(jìn)入雙口RAM,控制器為雙口RAM提供讀/寫使能,通過寫使能控制數(shù)據(jù)寫入是否有效,data_valid是有效數(shù)據(jù)抽取模塊,用來標(biāo)識(shí)有效視頻數(shù)據(jù)的信號(hào),由它為模塊提供寫使能,等到寫操作完成后向SDR AM控制器發(fā)送滿信號(hào),此時(shí)讀使能r_en由SDRAM控制器提供。通過控制器提供的讀/寫使能完成兩片雙口RAM的讀寫切換。該模塊利用了兩片雙口RAM之間的乒乓操作,流水地實(shí)現(xiàn)了YUV分離的并行處理。
工作流程如下:首先對(duì)雙口RAM0進(jìn)行寫操作,寫操作完成后經(jīng)過316個(gè)CLK,開始對(duì)雙口RAM1進(jìn)行寫操作。對(duì)雙口RAM0進(jìn)行讀操作時(shí),因?yàn)樽x操作只用到704個(gè)CLK,而寫操作需要1 408個(gè)CLK,當(dāng)對(duì)雙口RAM0讀完時(shí),還需繼續(xù)對(duì)雙口RAM1進(jìn)行寫操作,等到雙口RAM1輸出ramfull高電平時(shí)進(jìn)入下一個(gè)緩沖周期,此時(shí)對(duì)雙口RAM0進(jìn)行寫操作,對(duì)雙口RAM1進(jìn)行讀操作,如此循環(huán),則實(shí)現(xiàn)了視頻處理的流水操作。完成第一行數(shù)據(jù)的YUV分離輸出所需要的1 408+316+704個(gè)CLK后,各行數(shù)據(jù)的輸出則只需要1 408+316個(gè)CLK。于此同時(shí)基于速度的實(shí)現(xiàn)方式從提高系統(tǒng)工作時(shí)所能達(dá)到的最高時(shí)鐘頻率為出發(fā)點(diǎn),利用了流水線的設(shè)計(jì),提供了系統(tǒng)的頻率,如果系統(tǒng)的工作頻率是100 MHz,那么實(shí)際輸出YUV分離視頻數(shù)據(jù)所需要的時(shí)間僅為(1 408+316)×10-8。模塊仿真如圖6所示。
4 性能分析
4.1 操作時(shí)間
前面已經(jīng)敘述過基于面積實(shí)現(xiàn)方式,完成一行視頻數(shù)據(jù)的YUV分離輸出需要1 408+704個(gè)CLK,而由于需要充分利用行消隱期來完成數(shù)據(jù)的分離輸出,因此FPGA與SDRAM之間的頻率必須滿足一定的差異,這就使得該方式不能獲得較高的系統(tǒng)最高工作頻率。假設(shè)FPGA的工作頻率為48 MHz,SDRAM的工作頻率為100 MHz,那么實(shí)際完成一行視頻數(shù)據(jù)的分離傳輸需要的時(shí)間為1 408×10-8+704×(1/48 000 000),而基于速度的實(shí)現(xiàn)方式,由于采用了兩片雙口RAM,因此可以在同一緩沖周期分別進(jìn)行讀/寫操作,而下一緩沖周期兩片雙口RAM的操作方式切換,進(jìn)而完成了數(shù)據(jù)的無縫緩存與處理,利用流水線的方式使YUV分離數(shù)據(jù)的輸出速度得到了很大的提高,并且使得該模塊的系統(tǒng)最高工作頻率得到了很大的提高。完成一行視頻數(shù)據(jù)的分離輸出需要的CLK個(gè)數(shù)為1 408+316+704個(gè)。假設(shè)該模塊的工作頻率為100 MHz,那么實(shí)際完成一行分離數(shù)據(jù)輸出所需的時(shí)間為(1 408+316+704)×10-8,通過對(duì)比可以發(fā)現(xiàn),基于速度的實(shí)現(xiàn)使得系統(tǒng)可以在較高工作頻率下運(yùn)行,利用流水操作,進(jìn)而實(shí)現(xiàn)了速度上的提升。
4.2 硬件資源
由上述可知,基于面積的實(shí)現(xiàn)方式只用到了一片雙口RAM,而基于速度的實(shí)現(xiàn)方式用到了兩片雙口RAM,且用到了一個(gè)二選一多路選擇器,同時(shí)后者的控制信號(hào)明顯多于前者,不僅增加了寄存器開銷,同時(shí)也增加了輸入/輸出端口的數(shù)量。通過對(duì)比可以發(fā)現(xiàn),前者在面積上比后者確實(shí)有了較大優(yōu)勢(shì)。表1為2種實(shí)現(xiàn)方式的資源消耗列表。
5 結(jié)語
本文提出了YUV分離的兩種FPGA實(shí)現(xiàn)方法,基于面積的實(shí)現(xiàn)利用了一片雙口RAM,而基于速度的實(shí)現(xiàn)方式利用了兩片雙口RAM。通過對(duì)比發(fā)現(xiàn),前者在消耗資源上獲得了較大的改進(jìn),對(duì)整個(gè)系統(tǒng)的集成化有重大作用;而后者采用了兩片雙端口RAM的乒乓操作流水,實(shí)現(xiàn)了視頻數(shù)據(jù)的輸出,對(duì)提高整個(gè)系統(tǒng)的實(shí)時(shí)性意義重大。無論從面積還是速度為出發(fā)點(diǎn),二種方案對(duì)整個(gè)系統(tǒng)性能的提高都意義重大。
評(píng)論