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