《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的全搜索運(yùn)動(dòng)估計(jì)硬件電路設(shè)計(jì)
基于FPGA的全搜索運(yùn)動(dòng)估計(jì)硬件電路設(shè)計(jì)
2014年電子技術(shù)應(yīng)用第7期
童 楨,王祖強(qiáng),楊 恒
山東大學(xué) 信息科學(xué)與工程學(xué)院,山東 濟(jì)南250100
摘要: 設(shè)計(jì)了一種分層的二維陣列全搜索運(yùn)動(dòng)估計(jì)硬件電路。與傳統(tǒng)的二維陣列全搜索運(yùn)動(dòng)估計(jì)電路相比,它在處理單元(PE)的并行結(jié)構(gòu)設(shè)計(jì)以及存儲(chǔ)器設(shè)計(jì)方面作出了改進(jìn),節(jié)約了硬件資源和編碼時(shí)間。根據(jù)各模塊的時(shí)序關(guān)系合理安排并行流水線(xiàn)結(jié)構(gòu),采用一列像素并行處理,實(shí)現(xiàn)了運(yùn)動(dòng)估計(jì)實(shí)時(shí)編碼。
中圖分類(lèi)號(hào): TN919.8
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)07-0044-04
Design of full search motion estimation hardware circuit based on FPGA
Tong Zhen,Wang Zuqiang,Yang Heng
School of Information Science and Engineering, Shandong University, Jinan 250100,China
Abstract: A hierarchical two-dimensional array full search motion estimation(ME) hardware circuit is designed in this paper. Compared with traditional two-dimensional array full search circuit, the improvement of PE parallel structure design and storage design saves hardware resources and coding time. According to the timing relationship of each module, the parallel pipeline structure is reasonable organized. The circuit can deal a column of pixels in one cycle and realizes ME real-time encoding.
Key words : hierarchy;two-dimensional array;full search ME hardware circuit;parallel processing

     運(yùn)動(dòng)估計(jì)是視頻編碼中的關(guān)鍵部分,同時(shí)也是較為復(fù)雜的部分。在運(yùn)動(dòng)估計(jì)中,運(yùn)動(dòng)搜索算法分為兩大類(lèi):全搜索算法和快速搜索算法[1]。全搜索算法(FSM)是一種搜索策略最簡(jiǎn)單的算法,是將搜索范圍中的每個(gè)塊都搜索一遍,從而找到最佳匹配塊。此算法簡(jiǎn)單可靠,易于硬件實(shí)現(xiàn),但是計(jì)算量大,耗費(fèi)的時(shí)間多??焖偎阉魉惴ㄊ且环N只對(duì)少數(shù)可能是匹配塊的候選塊進(jìn)行匹配,從而找到局部的最佳匹配塊。此算法計(jì)算量小,時(shí)間開(kāi)銷(xiāo)少,但是算法復(fù)雜度高,不易于硬件實(shí)現(xiàn)。

    由于視頻信號(hào)處理對(duì)實(shí)時(shí)性要求很高,而FSM需要計(jì)算所有的宏塊,費(fèi)時(shí)較長(zhǎng),因此,本文采取分層的方式[2],即在搜索區(qū)域中每隔一個(gè)像素選取一個(gè)像素點(diǎn)作為候選塊搜索的起點(diǎn)(1、3、5…),利用多個(gè)存儲(chǔ)器并聯(lián),將單個(gè)像素的讀入/讀出轉(zhuǎn)換為一列像素的讀入/讀出,并結(jié)合大量的處理單元(PE)構(gòu)成并行的處理器陣列進(jìn)行數(shù)據(jù)處理,設(shè)計(jì)一種分層的二維陣列全搜索運(yùn)動(dòng)估計(jì)硬件電路,大大減少了計(jì)算量以及編碼時(shí)間。

1 基本原理

    對(duì)于運(yùn)動(dòng)估計(jì)分層二維陣列全搜索方式,大致有兩種最基本的實(shí)現(xiàn)方法:(1)所有的PE陣列同時(shí)進(jìn)行匹配,計(jì)算搜索區(qū)域內(nèi)所有的候選塊,這是一種高度并行的方式,處理速度快,對(duì)于16×16的當(dāng)前塊,只需256個(gè)時(shí)鐘周期就可完成搜索,但是輸入數(shù)據(jù)帶寬大,控制較為復(fù)雜,不易于硬件的實(shí)現(xiàn);(2)相鄰的PE進(jìn)行匹配時(shí),無(wú)論是行還是列,各自都存在延時(shí),如圖1所示,本設(shè)計(jì)以當(dāng)前塊為16×16的宏塊、搜索區(qū)域?yàn)?2×32為例,同一行的PE1是在PE0工作2個(gè)時(shí)鐘周期后開(kāi)始工作,同一列PE8是在PE0工作32個(gè)周期后開(kāi)始工作,然后以此類(lèi)推。這是一種并行的流水線(xiàn)結(jié)構(gòu),數(shù)據(jù)流規(guī)整,易于操作,共需要494個(gè)時(shí)鐘周期就可完成搜索,但是延時(shí)器過(guò)多,硬件資源消耗大[2-4]。

    本設(shè)計(jì)提出的分層二維陣列搜索方式對(duì)以上兩種方法作出了改進(jìn),如圖2所示,列與列之間的PE是存在延時(shí)的,而行與行之間的PE是不存在延時(shí)的,比如第一列的PE最先同時(shí)工作,緊接著延時(shí)2個(gè)時(shí)鐘周期,第二列PE也開(kāi)始同時(shí)工作,然后以此類(lèi)推,最先工作的PE,也最先結(jié)束工作。同時(shí)從圖中還可看出,輸入的數(shù)據(jù)為一個(gè)時(shí)鐘周期輸入一列的像素,而非單個(gè)像素,這樣設(shè)計(jì)不僅使得延時(shí)器的個(gè)數(shù)減少了一半,節(jié)約了硬件資源,而且使得一個(gè)塊的匹配只需16個(gè)時(shí)鐘周期,再加上延時(shí)的14個(gè)時(shí)鐘周期,那么完成搜索總共只需30個(gè)時(shí)鐘周期,大大節(jié)約了編碼的時(shí)間。

2 硬件電路設(shè)計(jì)

    分層二維陣列全搜索運(yùn)動(dòng)估計(jì)硬件電路是以16×16的宏塊為對(duì)象,32×32為搜索區(qū)域,采用了64個(gè)處理單元(PE),形成并行的流水線(xiàn)結(jié)構(gòu)[5],它包括地址發(fā)生器、16×16的Ram0、32×32的Ram1、延時(shí)器、二維PE陣列、比較器和控制器7個(gè)模塊。原理框圖如圖3所示。

    圖3中地址發(fā)生器用于產(chǎn)生讀與寫(xiě)的地址以及一些控制信號(hào)。7個(gè)延時(shí)器采用級(jí)聯(lián)的方式連接,其作用是將當(dāng)前塊數(shù)據(jù)延時(shí)輸出,第一個(gè)延時(shí)器(delay1)的輸入連接Ram0的輸出,延時(shí)兩個(gè)周期;第二個(gè)延時(shí)器(delay2)的輸入連接delay1的輸出,又延時(shí)兩個(gè)周期,然后以此類(lèi)推。Ram0、delay1、delay2…delay7的輸出分別作用于PE0~PE56(第1列PE)、PE1~PE57、PE2~PE58…PE7~PE63,這樣形成了每延時(shí)2個(gè)周期,一些PE才開(kāi)始工作,其余部分以下作詳細(xì)的介紹。

2.1 存儲(chǔ)器陣列設(shè)計(jì)

    以Ram0為例,它是一個(gè)16×16×8 bit的存儲(chǔ)器,用來(lái)存儲(chǔ)當(dāng)前塊的數(shù)據(jù)。Ram0的設(shè)計(jì)是使用了Quartus II 的宏功能模塊RAM[6],它是一個(gè)16×8 bit的存儲(chǔ)器。因此,為了設(shè)計(jì)成一個(gè)16×16×8 bit的存儲(chǔ)器,本設(shè)計(jì)采用16個(gè)16×8 bit的RAM并聯(lián)。結(jié)構(gòu)圖如圖4所示,16個(gè)RAM共用同一個(gè)讀/寫(xiě)地址線(xiàn),當(dāng)讀/寫(xiě)地址線(xiàn)從0000~1111變化,分別讀出/寫(xiě)入Ram0的第0列~第15列。

    從圖4中可以看出,Ram0的輸入/輸出端口都為16×8 bit寬,一個(gè)周期可以輸入/輸出一列16個(gè)像素的數(shù)據(jù),這樣一個(gè)16×16的宏塊只需要17個(gè)周期就能完全讀出。與單個(gè)像素的輸入/輸出相比,節(jié)約了大量的周期,加快了讀入/讀出的速度,能更好地滿(mǎn)足實(shí)時(shí)性要求。

2.2 二維PE陣列設(shè)計(jì)

    處理單元陣列是運(yùn)動(dòng)估計(jì)中的核心模塊,它的運(yùn)算量最大,占用硬件資源也最多。本設(shè)計(jì)采用了64個(gè)PE進(jìn)行數(shù)據(jù)的處理,PE的內(nèi)部結(jié)構(gòu)如圖5所示[7]。首先對(duì)當(dāng)前塊數(shù)據(jù)(C)和參考?jí)K數(shù)據(jù)(R)進(jìn)行絕對(duì)值差值運(yùn)算,然后將得到的差值與上一次計(jì)算所得的值SAD進(jìn)行累加(ALU),并將累加的結(jié)果放在寄存器(REG)中,計(jì)數(shù)器作用于累加器,控制累加的次數(shù),當(dāng)累加次數(shù)達(dá)到16次時(shí),輸出匹配塊的最終殘差值SAD。

2.3 數(shù)據(jù)比較器設(shè)計(jì) 

    數(shù)據(jù)比較器作用于PE之后,對(duì)PE最終輸出的各個(gè)數(shù)據(jù)比較大小,從而得到當(dāng)前塊與搜索區(qū)域參考?jí)K的最小殘差(SAD)。它的硬件結(jié)構(gòu)圖如圖6所示。

    從圖6中可以看出,此模塊是采用8個(gè)數(shù)據(jù)比較器級(jí)聯(lián)的方式,PE0~PE56(第一列PE陣列)的最終輸出最先比較大小,得到這一列陣列的最小值;緊接著過(guò)2個(gè)時(shí)鐘周期,PE1~PE57的最終輸出與之前得到的最小值進(jìn)行比較,又得到一個(gè)最小值。同理可得,延時(shí)14個(gè)時(shí)鐘周期后,PE7~PE63的最終輸出與上個(gè)比較器的輸出進(jìn)行比較,得到最終的最小值SAD。

2.4 控制器設(shè)計(jì)

    控制器的工作過(guò)程可以分為兩個(gè)部分:控制Ram的讀寫(xiě)、控制PE是否工作。具體工作過(guò)程:在復(fù)位結(jié)束后,在時(shí)鐘的觸發(fā)下產(chǎn)生寫(xiě)信號(hào),開(kāi)始對(duì)Ram0、Ram1寫(xiě)數(shù)據(jù);延遲一個(gè)周期產(chǎn)生讀信號(hào),開(kāi)始對(duì)Ram0、Ram1讀數(shù)據(jù);又延遲一個(gè)周期產(chǎn)生enable0使能信號(hào),它作用于第1列的PE,表示第1列PE有效,開(kāi)始工作;接著,延遲2個(gè)周期產(chǎn)生enable1使能信號(hào),它作用于第2列的PE,表示第2列PE有效,開(kāi)始工作;以此類(lèi)推,enable2……enable7都是在之前的一步延遲2個(gè)周期后產(chǎn)生的。工作狀態(tài)轉(zhuǎn)移圖如圖7所示。

3 整體驗(yàn)證結(jié)果及分析

    本文設(shè)定時(shí)鐘頻率為100 MHz,即時(shí)鐘周期為10 ns,輸入數(shù)據(jù)寬度為8 bit,16×16當(dāng)前塊所有數(shù)據(jù)為2,32×32搜索區(qū)域數(shù)據(jù)除7~22列的1~16行(PE3計(jì)算區(qū)域)外,其他區(qū)域全為3,而PE3計(jì)算區(qū)域只有一個(gè)數(shù)為3,其余為2,部分仿真結(jié)果如圖8所示。從仿真圖可以看出,最小殘差值(SAD)的輸出用了35個(gè)時(shí)鐘周期,其中PE陣列的輸出用了30個(gè)時(shí)鐘周期,其余的用于控制和比較。sum0(PE0的SAD輸出)、sum8…sum56第1列的PE陣列首先輸出結(jié)果,每個(gè)時(shí)鐘周期輸出1列,經(jīng)過(guò)16個(gè)時(shí)鐘周期,最后累加輸出最終結(jié)果;sum1、sum9…sum57第2列的陣列延時(shí)2個(gè)周期輸出結(jié)果,然后以此類(lèi)推。

    觀(guān)察仿真結(jié)果可知,最匹配塊為PE3計(jì)算的區(qū)域(sum3=1),殘差最小值SAD為1,與設(shè)定數(shù)據(jù)的理論計(jì)算相符,從而驗(yàn)證了設(shè)計(jì)的正確性。

    此硬件模塊采用Verilog HDL硬件描述語(yǔ)言,使用Quartus II 8.1進(jìn)行綜合與仿真,實(shí)現(xiàn)了分層二維陣列全搜索的硬件設(shè)計(jì)。結(jié)果表明,在工作頻率為100 MHz時(shí),相比于傳統(tǒng)的方法,節(jié)約了不少時(shí)鐘周期,對(duì)于30 f/s的情況,完全可以得到滿(mǎn)足。

    本文采用分層的二維陣列全搜索方法,設(shè)計(jì)了基于FPGA分層的二維陣列全搜索硬件電路,并對(duì)此硬件電路進(jìn)行了分析,完成了各個(gè)子模塊的設(shè)計(jì),最后對(duì)整個(gè)模塊進(jìn)行了仿真,實(shí)現(xiàn)了復(fù)雜度和編碼速度的良好折中。由于本設(shè)計(jì)采用的是分層搜索方法,精度相比傳統(tǒng)全搜索有所降低,如果想進(jìn)一步提高精度,可以以分層搜索得到的最佳塊為中心,對(duì)其相近未搜索的幾個(gè)像素點(diǎn)進(jìn)行細(xì)搜索。實(shí)際上,得到最終高精度的匹配塊,也減少了近一半的工作量,提高了搜索效率。

參考文獻(xiàn)

[1] 賈克斌,劉鵬宇.基于H.264的視頻編碼處理技術(shù)與應(yīng)用[M].北京:科學(xué)出版社,2013.

[2] 何春芬.基于FPGA的H.264幀內(nèi)預(yù)測(cè)與幀間預(yù)測(cè)設(shè)計(jì)[D].重慶:重慶大學(xué),2009.

[3] 和王峰.AVS運(yùn)動(dòng)估計(jì)模塊硬件架構(gòu)設(shè)計(jì)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2008.

[4] 吳燕秀,王法翔.適用于AVS的高性能整像素運(yùn)動(dòng)估計(jì)硬件設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(1):40-42.

[5] 胡文安.AVS視頻編碼并行算法的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010.

[6] Michael D.Ciletti.Verilog HDL 高級(jí)數(shù)字設(shè)計(jì)[M].北京:電子工業(yè)出版社,2005.

[7] 李本齋,吳從中,陳家銀.H.264運(yùn)動(dòng)估計(jì)硬件加速器的設(shè)計(jì)[J].電視技術(shù),2010,34(S1):79-81.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。