《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于FPGA的全搜索運動估計硬件電路設(shè)計
基于FPGA的全搜索運動估計硬件電路設(shè)計
2014年電子技術(shù)應(yīng)用第7期
童 楨,王祖強,楊 恒
山東大學 信息科學與工程學院,山東 濟南250100
摘要: 設(shè)計了一種分層的二維陣列全搜索運動估計硬件電路。與傳統(tǒng)的二維陣列全搜索運動估計電路相比,它在處理單元(PE)的并行結(jié)構(gòu)設(shè)計以及存儲器設(shè)計方面作出了改進,節(jié)約了硬件資源和編碼時間。根據(jù)各模塊的時序關(guān)系合理安排并行流水線結(jié)構(gòu),采用一列像素并行處理,實現(xiàn)了運動估計實時編碼。
中圖分類號: TN919.8
文獻標識碼: A
文章編號: 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

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

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

1 基本原理

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

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

2 硬件電路設(shè)計

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

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

2.1 存儲器陣列設(shè)計

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

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

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

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

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

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

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

2.4 控制器設(shè)計

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

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

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

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

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

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

參考文獻

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

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

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

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

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

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

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

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