基于九宮格的精細(xì)運動估計數(shù)據(jù)讀取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于集成電路設(shè)計技術(shù),涉及于九宮格的精細(xì)運動估計數(shù)據(jù)讀取方法。
【背景技術(shù)】
[0002]H.264高清視頻編碼核進(jìn)行精細(xì)運動估計的操作時,搜索框內(nèi)的數(shù)據(jù)量大無規(guī)律且跨行操作較多,因此讀寫效率很低,數(shù)據(jù)寫入片外DDR2 SDRAM存儲器會耗費大量時間。為了滿足實時編碼對大數(shù)據(jù)量高速訪問的需求,本專利提出按固定順序訪問的宏塊讀取方法,采用九宮格的形式進(jìn)行數(shù)據(jù)的片上緩存的方法以及采用地址預(yù)先判斷和提前終止冗余數(shù)據(jù)等方法來提高精細(xì)運動的訪問速度。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是提供一種基于九宮格的精細(xì)運動估計存儲實現(xiàn)方法,能夠有效地完成大量無規(guī)律的精細(xì)運動估計數(shù)據(jù)的高速讀取操作需求。
[0004]本發(fā)明的技術(shù)解決方案是:
[0005]—種基于九宮格的精細(xì)運動估計數(shù)據(jù)讀取方法,包括以下步驟:
[0006]I)按固定順序訪問宏塊:
[0007]1.1)對幀內(nèi)圖像進(jìn)行一次讀宏塊請求時,連續(xù)讀出4個宏塊的數(shù)據(jù),并且每4次請求只鎖存一次地址;
[0008]1.2)使用兩組片上DPRAM用于緩存亮度和色度數(shù)據(jù),其中:亮度數(shù)據(jù)在片外DDR2SDRAM中按照一幀圖像的起始地址連續(xù)存儲,頂場數(shù)據(jù)放在一幀空間中從起始地址開始的上半部分,底場數(shù)據(jù)放在一幀空間中從二分之一高度對應(yīng)的地址開始的下半部分;
[0009]1.3)根據(jù)下一個需要讀出的像素地址是否在預(yù)取4個宏塊地址范圍內(nèi)來判斷是否命中;如果在命中內(nèi),則本次請求所需的數(shù)據(jù)在DPRAM緩存中,直接從DPRAM中取出相應(yīng)的數(shù)據(jù);如果不命中,則計算該像素所在的宏塊地址并直接從DDR2 SDRAM中預(yù)讀取后4個宏塊的數(shù)據(jù);
[0010]2)采用九宮格形式的存儲訪問:
[0011]2.1)將第一次讀請求的所在宏塊地址進(jìn)行緩存,并以該宏塊為中心,向八個方向各擴展一個宏塊形成九宮格;
[0012]2.2)通過起始地址一次計算出該九宮格內(nèi)9個宏塊的所有數(shù)據(jù)在DDR2 SDRAM中的映射地址;
[0013]2.3)根據(jù)精細(xì)運動估計各請求的訪問地址是否在九宮格的地址范圍內(nèi),判斷本次請求所需的數(shù)據(jù)是否地址命中;如果命中,則直接從DPRAM中取出相應(yīng)的數(shù)據(jù);如果不命中,則需要以當(dāng)前請求對應(yīng)的地址計算出新的預(yù)取地址,并預(yù)取出對應(yīng)九宮格中的亮度和色度數(shù)據(jù)存放于DPRAM緩存中。
[0014]上述方法還包括步驟3采用地址預(yù)先判斷的方法提前終止冗余數(shù)據(jù),具體步驟為:實時判斷相鄰兩次精細(xì)運動估計之間的所有運動矢量所需的數(shù)據(jù)是否都已取出;若是,則立即終止多余的讀DDR2 SDRAM操作。
[0015]上述步驟2.2)中的9個宏塊的數(shù)據(jù)包括一個運動矢量的所有整像素、半像素和四分之一像素讀操作的像素數(shù)據(jù)。
[0016]本發(fā)明的主要優(yōu)點:
[0017]本發(fā)明根據(jù)采用三種優(yōu)化方法對精細(xì)運動估計的讀取操作進(jìn)行了優(yōu)化,預(yù)讀取數(shù)據(jù)避免了片外DDR2 SDRAM的頻繁訪問,九宮格的方法規(guī)整了數(shù)據(jù)的地址減少了跨行操作,終結(jié)冗余數(shù)據(jù)的方法進(jìn)一步縮短了數(shù)據(jù)的讀取時間。
【附圖說明】
[0018]圖1是傳統(tǒng)精細(xì)運動估計的讀請求次數(shù);
[0019]圖2是{0,0}搜索的預(yù)取范圍;
[0020]圖3是三步搜索的預(yù)取范圍;
[0021 ]圖4是基于九宮格的運動矢量預(yù)讀取范圍;
[0022]圖5是基于九宮格的精細(xì)運動估計讀請求次數(shù);
[0023]圖6是FME模塊的架構(gòu)示意圖;
[0024]圖7是本發(fā)明的流程框圖。
【具體實施方式】
[0025]本發(fā)明基于九宮格的精細(xì)運動估計數(shù)據(jù)讀取方法,包括以下步驟:
[0026]步驟I,按固定順序訪問的宏塊讀取方法:
[0027]由于幀內(nèi)圖像的連續(xù)性,編碼時按固定順序訪問的圖像宏塊(每個宏塊有16行2列像素數(shù)據(jù))是可以進(jìn)行地址預(yù)測和命中判斷的。為了提高片外DDR2 SDRAM的讀寫效率,一次讀宏塊請求可以從片外連續(xù)讀出4個宏塊的數(shù)據(jù),并且每4次請求只需要鎖存一次地址。由于地址連續(xù),每個宏塊的基地址范圍可以預(yù)先計算得到;
[0028]使用兩組片上DPRAM用于緩存亮度和色度數(shù)據(jù),亮度數(shù)據(jù)在片外DDR2SDRAM中按照一幀圖像的起始地址連續(xù)存儲,頂場數(shù)據(jù)放在一幀空間的上半部分(起始地址),底場數(shù)據(jù)放在下半部分(一幀的二分之一高度對應(yīng)的地址);
[0029]設(shè)計命中判斷機制,根據(jù)下一個需要讀出的像素地址是否在預(yù)取4個宏塊地址范圍內(nèi)來判斷命中;如果在范圍內(nèi),則本次請求所需的數(shù)據(jù)是否在DPRAM緩存中,直接從DPRAM中取出相應(yīng)的數(shù)據(jù);如果不命中則計算該像素所在的宏塊地址并直接從DDR2 SDRAM中預(yù)讀取后4個宏塊的數(shù)據(jù)。
[0030]步驟2,采用九宮格的形式進(jìn)行數(shù)據(jù)的片上緩存:
[0031]在精細(xì)運動估計中,對于運動矢量不為O的讀像素操作,數(shù)據(jù)會進(jìn)行多次跨行讀取(如圖1所示);將第一次讀請求的所在宏塊地址進(jìn)行緩存,并擴展為九宮格的范圍將數(shù)據(jù)預(yù)讀取到片上DPRAM緩存,可以有效減少跨行讀取的次數(shù)(如圖5所示);
[0032]根據(jù)九宮格在幀內(nèi)的存儲地址計算出其所在宏塊的地址,并從該宏塊向右向下(向像素行列增加的方向)個擴展3個宏塊,總計9個宏塊(包括器是宏塊)這9個宏塊的范圍包括了一個運動矢量的所有整像素、半像素和四分之一像素讀操作的像素數(shù)據(jù)。通過起始地址一次計算出九宮格(9個宏塊)的所有數(shù)據(jù)在DDR2 SDRAM中的映射地址;
[0033]根據(jù)精細(xì)運動估計各請求的訪問地址是否在九宮格的地址范圍內(nèi),判斷本次請求所需的數(shù)據(jù)是否在緩存中,是否地址命中;如果命中則直接從DPRAM中取出相應(yīng)的數(shù)據(jù);如果亮度不命中則需要以當(dāng)前請求對應(yīng)的地址計算出新的預(yù)取地址,并預(yù)取出對應(yīng)九宮格中的亮度和色度數(shù)據(jù)存放于DPRAM緩存中。如果亮度命中而色度不命中,則只重新預(yù)取色度的九宮格數(shù)據(jù);
[0034]步驟3、采用地址預(yù)先判斷的方法提前終止冗余數(shù)據(jù):實時判斷所需要的數(shù)據(jù)是否已經(jīng)完從DDR2 SDRAM中取出(對于相鄰兩次精細(xì)運動估計之間的所有運動矢量讀操作,讀請求所需的數(shù)據(jù)都寫已回編碼核,但九宮格數(shù)據(jù)還未預(yù)取結(jié)束時,立即終止多余的讀DDR2SDRAM操作)以減少讀取時間,減少外存帶寬的占用。
[0035]本發(fā)明設(shè)計思路及工作原理:
[0036]1、精細(xì)運動估計讀取效率低的原因:
[0037]精細(xì)運動估計是在粗運動估計搜索框內(nèi)進(jìn)行的,而隨著運動矢量的不同,精細(xì)運動估計會讀取不同位置的數(shù)據(jù),而搜索框的大小為13*10個宏塊的范圍,因此讀操作很難找到固定的范圍讀取;而跨行操作也會極大的增加讀取時間,因此精細(xì)運動估計的讀取效率是影響編碼芯片性能的主要因素之一。
[0038]如圖1所示,在傳統(tǒng)精細(xì)運動估計的讀取操作中,從精細(xì)運動估計中取出某個當(dāng)前宏塊對應(yīng)的讀取操作共發(fā)生