新四季網

流輸入讀取的多媒體擴展指令的設計與實現方法

2023-05-24 17:03:21

專利名稱:流輸入讀取的多媒體擴展指令的設計與實現方法
技術領域:
本發明屬於處理器設計技術領域,應用於多媒體處理器的設計,具體涉及一種針對音視頻解碼中解碼數據碼流輸入(簡稱流輸入)讀取指令的設計與實現方法。
背景技術:
在幾乎所有的圖像與視頻壓縮標準中,如JPEG、JPEG2000、MPEG-1、MPEG-2、MPEG-4、H.264,解碼時,都要先對編碼信息進行解碼如MPEG-1和MPEG-2的音頻協議第三層(MP3)的頭信息和邊信息中包含Huffman表、量化因子等用來解碼編碼數據的信息,在解碼過程中要對這些包含編碼信息的碼流進行實時讀取。圖1為在32位RISC上實現流輸入功能的程序流程圖(以字節為讀取單位),首先判斷字節數據緩衝是否空,如空則從內存中讀取1位元組數據放入字節數據緩衝寄存器中,然後判斷要讀取的碼流長度(Len)是否小於字緩衝寄存器中剩餘的Bits數(Left),如小於則讀取Len位Bits並更新字節緩衝寄存器中剩餘的Bits數,如果大於則首先把字節緩衝寄存器中剩餘的Bits數讀出來,並且更新Len(Len-=Left)和Left(Left=8),然後再判斷Len是否大於8,如果大於則直接讀取一個字節,並且更新Len(Len-=8)和Left(Left=8),然後再判斷Len是否大於8,直到Len小於8為止,當Len小於8時,從字節緩衝寄存器中讀取Len Bits並更新Left,最後將讀取的所有Bits放入返回值中返回。
上述程序在兼容SPARC V8指令集的32位通用RISC(LEON2)上對應63條彙編指令,在MP3解碼過程中佔用全部解碼時間的5.5%。由於流輸入操作普遍存在於各種音視頻解碼過程中,因此如果能在通用RISC的指令集上添加專門針對流輸入讀取的指令會有效的提高處理器對多媒體解碼處理的性能。從申請人對現有的文獻進行檢索,還沒有發現公開的流輸入讀取指令設計及其硬體實現結構與方法。

發明內容
本發明的目的在於,提供流輸入讀取的多媒體擴展指令的設計與實現方法。該方法能在通用RISC的指令集上添加專門針對流輸入讀取的指令,能夠有效的提高處理器對多媒體解碼處理的性能。
為了實現上述任務,本發明採取以下的技術解決方案流輸入讀取的多媒體擴展指令的設計與實現方法,其特徵在於,該方法針對音視頻解碼中流數掘輸入讀取設計了4條媒體擴展指令,其硬體實現結構包括兩個32比特的緩衝寄存器、讀取碼流的地址寄存器(Addr)、Flag標誌寄存器、Left寄存器與兩個任意位移位器。
碼流讀初始化(Bini)指令用來設置讀取碼流的地址寄存器(Addr),裝載兩個32Bit的初始數掘到兩個碼流緩衝寄存器,兩個寄存器交替地從數據Cache中裝載數據,設置Flag標誌寄存器與Left寄存器;由標誌Flag決定當前存放前面碼流的緩衝寄存器;碼流讀取(Bread)指令從碼流緩衝寄存器中讀取32位以內的任意Bit流數掘,數據裝載(Bload)指令從數據Cache裝載32Bit的字到任一碼流緩衝寄存器中;當前碼流地址返回(bpos)指令返回碼流讀取操作中的Left與Addr寄存器值;每次使用任意位移位操作讀取需要的Len位碼流後Left=Left-Len,當Left小於等於0時,需要裝載32位碼流數據到空的碼流緩衝寄存器中,同時反轉Flag標誌寄存器,同時Left=32+Left;對於Len<=Left,可在一個節拍內實現碼流讀取,使用32位的任意位左移/右移移位器各1個;對於Len>Left,可在兩個節拍內實現碼流讀取以及使用2個32位的任意位左移/右移位器的共享方法;對於一些數據加減法操作不需要加法器,可用簡單的取反加1和取反邏輯實現。
本發明設計了該流數據讀取指令的硬體實現電路以及在處理器中的流水線劃分,給出了其在基於SPARC V8處理器中具體指令編碼方式,實驗證明該擴展指令的效率是手工優化的SPARC V8處理器指令實現的5-8倍。


圖1Libmad(MP3解碼程序)中流輸入讀取程序流程圖;圖2雙緩衝寄存器的更新機制;圖3Len<=Left時,流輸入讀取電路的數據流;圖4Len>Left時,流輸入讀取電路的數據流;圖5數據裝載時電路中的數據流;圖6用已有的SPARC V8指令實現碼流讀取。
以下結合附圖和發明人給出的實施例對本發明作進一步的詳細說明。
具體實施例方式
按照上述技術方案,本發明實際是一種針對音視頻解碼程序中解碼數據流讀取的處理器擴展指令設計及硬體實現結構與方法。其硬體實現結構包括兩個32比特的緩衝寄存器、讀取碼流的地址寄存器(Addr)、Flag標誌寄存器、Left寄存器與兩個任意位移位器。
假設每次讀取的比特數不大於32,因此需要兩個32比特的緩衝寄存器Buffer0、Buffer1,兩個寄存器交替地從數據Cache中裝載數據,由標誌Flag決定當前存放前面碼流的緩衝寄存器。具體來說,當Flag為1,Buffer1存放前面碼流,讀取碼流時,先從Buffer1中讀取,如果Buffer1不夠,再從Buffer0讀取;當Flag為0,Buffer0存放前面碼流,讀取碼流時,先從Buffer0中讀取,如果Buffer0不夠,再從Buffer1讀取;另外,用Left寄存器表示包含前面碼流的緩衝寄存器還有多少個比特位沒有被讀取。每次讀取碼流後,Left=Left-Len,當Left小於等於0時,需要裝載數據到為空的碼流緩衝寄存器中,同時反轉Flag標誌寄存器,Left=32+Left。雙緩衝寄存器的具體更新機制可用圖2表示。根據圖2所示的更新方法,可分兩種情況(Len<=Left和Len>Left)具體描述電路中的數據流,分別如圖3和圖4所示。
當Len<=Left時,讀取碼流只需要一個時鐘周期,在這個時鐘周期裡,實現從Buffer寄存器到out寄存器的計算與傳送,同時Buffer得到更新;當Len>Left時,需要兩個時鐘周期。out寄存器返回要讀取的碼流,且存放於低位,其餘位為零。這樣得到的out寄存器的值可直接參與解碼應用。具體實現時,可以將out寄存器連接到處理器中的一個通用寄存器。另外,所需的移位器可以復用通用處理器中的移位器(不復用時,碼流讀取操作需要的移位器個數為兩個),當在圖4所示的Len>Left情況,在T2節拍,可以復用T1節拍中使用過的移位器。
整個解決方案涉及到一些加減法操作,但可以用簡單的取反加1和取反邏輯實現,並不需要加法器。在讀取碼流時,需計算移位次數32-len,由於len範圍為[1,32],可將len低5位取反加1即可算出32-len。在裝載數據時,需計算Left=32+Left,注意到Left的範圍為[-31,32],將Left用8位補碼表示,如果Left等於0,直接賦Left為00100000;如果Left小於0(此時Left高三位必然為1),將高三位取反即可。
1.流輸入讀取的指令設計設計的實現流輸入讀取功能的指令Bini、Bread、Bload與Bpos的數據流描述如下,其中T1、T2分別表示兩個節拍,Bread指令後面應跟有Bload指令。
Bini reg解碼階段根據指令碼中reg的編號讀取reg的值。
執行階段
T1將寄存器reg的值寫入Addr中;T2根據Addr從數據Cache中裝入64Bits到Buffer[1,0]中,寄存器更新如下Addr=Addr+8,Left=32,Flag=1。
Bread reg or imm_Len解碼階段當指令中表示碼流長度(Len)的操作數為立即數尋址時,從指令中得到該值;當為寄存器尋址時,根據寄存器編號,讀取該寄存器的值;然後將Len與Left相減。
執行階段根據Len與Left的相減結果,有兩種情況①當Len<=Left時T1根據Flag選擇Buffer1或Buffer0,對該Buffer邏輯右移32-Len位輸出到out寄存器中;同時將該Buffer值輸出到另一移位器,邏輯左移Len位,用來更新該Buffer值;寄存器更新Left=Left-Len。
②當Len>Left時T1根據Flag選擇包含後面碼流的Buffer(設為Buffer0,如圖4所示),對該Buffer邏輯右移Left位,輸出結果記為tmp1,同時將Buffer值送入到另一移位器,邏輯左移Len-Left位,輸出結果記為tmp2,寄存器更新Bufffer0=tmp2,Buffer1=tmp1 ORBuffer1。
T2將Buffer1送入到移位器,邏輯右移32-Len,輸出到out寄存器中。同時Left=Left-Len。
Bload解碼階段分析Left,如果Left小於等於0,在執行階段做數據裝載操作;否則在執行階段不做任何操作。
執行階段(Left小於等於0)T1Flag為1,選擇buffer1;Flag為0,選擇buffer0。根據Addr,從數據Cache裝入32Bits到被選中的buffer中。Addr=Addr+4;Flag=~Flag;Left=32+Left。
bpos reg1,reg2解碼階段從指令中得到reg1、reg2的編號。
執行階段T1將Left寫入reg1;將Addr寫入reg2中。
2.碼流讀取指令的一種實現上面一般化地描述了碼流讀取指令的功能和數據流,在這裡我們給出在SPARC體系結構上實現這些特殊指令的具體例子。將碼流讀取指令融入SPARC結構主要涉及到指令的編碼以及這些指令如何與已有的寄存器的值交互。指令編碼採用SPARC V8中第三種編碼格式,並且op=2,該格式如下所示Op=2

3129 24 18 13 12 40具體編碼格式如下所示,碼流讀取指令的硬體電路中的寄存器(比如Left、Addr)沒有編碼,因為這些指令總是默認地使用這些寄存器。由於SPARC是RISC結構,所以指令的操作數多為寄存器,其中Bread指令的操作數(表示長度)既可以由立即數表示,也可以由寄存器來表示。Bread指令的輸出結果總是默認地存放到%o0寄存器,這是因為在SPARC結構中,%o0寄存器是用來存放函數返回值的寄存器。
bini Rs2

31 2924 18 13 12 4 0bread Rs2 or length


31 29*24 18 13 12 7*0bpos Rs1,Rd

31 29 2418 13 03.流輸入讀取指令效率分析流輸入讀取指令的運行效率分析需要比較添加擴展指令前後實現同樣的碼流讀取所需要的指令條數。由於碼流讀取大多應用於解碼程序,而這種解碼程序一般用高級語言實現,因此在這裡引入碼流讀取的一種高級語言模型(C語言),使用兩個函數實現流輸入讀取Bitinit(struct Bitptr*ptr,unsigned word*pword);
unsigned long Bitread(struct Bitptr*ptr,int Len);
其中結構體Bitptr定義如下struct Bitptr{ unsigned int*ptr_word;
unsigned int Cur_word;
unsigned short Left;
}參數ptr指向當前要讀取的比特,結構體中成員ptr_word代表下一個要裝載的字在數據緩衝的內存地址;Cur_word是當前字數據緩衝,當前要讀取的比特首先從該緩衝中讀取,如果不夠,再根據ptr_word裝載下一個字到數據緩衝;Left表示在當前的字數據緩衝中還有多少比特沒有被讀取。函數Bit_init( )依靠pword參數對ptr指向的結構體初始化;函數Bitread( )根據ptr和要讀取的比特數(Len)返回一個32位的無符號整數,該整數的低Len位(按從左到右的順序)就是要讀取的碼流,其餘位為零。
當沒有添加碼流讀取指令時,用SPARC V8彙編指令實現上述兩個函數,%o寄存器用來傳遞參數,%o0傳遞第一個參數,%o1傳遞第二個參數,……,依此類推,%o0用來傳遞返回值;最後面兩條指令retl,nop用於函數返回。如下所示的函數實現所用的SPARC V8指令不是用編譯器生成的,而是手工編寫的優化指令,基本是用現有的SPARC V8指令實現流輸入讀取的最快速度。
Bitinit:
st %o1,[%o0]ld [%o1],%o1st %o1,[%o0+4]set32,%o1sth %o1,[%o0+8]retlnop
Bitread該函數的手動彙編的優化指令與流程圖如圖6所示。
當使用流輸入讀取指令時,上述函數的彙編指令實現如下Bitinit:
Bini %o1retlnopBitread:
Bread %o1Bloadretlnop因為流輸入讀取一般是一次初始化,多次讀取,因此讀取效率的提高主要取決於Bitread( ),使用擴展的流輸入讀取指令後,函數Bitread( )所需要的指令數為4,而在圖6的兩個分支分別用了15、23條指令,因此使用流輸入讀取指令是非常高效的。在程序中需要讀取碼流的地方都可以手工插入Bread指令而代替Bitread函數的調用,省略了與之相關的參數傳遞和函數返回的開銷,效率更高,但將使程式設計師的工作量增大,因此用Bread指令精簡地實現已有的流輸入讀取函數不失為一種好的方法。
權利要求
1.流輸入讀取的多媒體擴展指令的設計與實現方法,其特徵在於,該方法針對音視頻解碼中流數據輸入讀取設計了4條媒體擴展指令,其硬體實現結構包括兩個32比特的緩衝寄存器、讀取碼流的地址寄存器(Addr)、Flag標誌寄存器、Left寄存器與兩個任意位移位器;碼流讀初始化(Bini)指令用來設置讀取碼流的地址寄存器(Addr),裝載兩個32Bit的初始數據到兩個碼流緩衝寄存器,兩個寄存器交替地從數據Cache中裝載數據,設置Flag標誌寄存器與Left寄存器;由標誌Flag決定當前存放前面碼流的緩衝寄存器;碼流讀取(Bread)指令從碼流緩衝寄存器中讀取32位以內的任意Bit流數據,數據裝載(Bload)指令從數據Cache裝載32Bit的字到任一碼流緩衝寄存器中;當前碼流地址返回(bpos)指令返回碼流讀取操作中的Left與Addr寄存器值;每次使用任意位移位操作讀取需要的Len位碼流後Left=Left-Len,當Left小於等於0時,需要裝載32位碼流數據到空的碼流緩衝寄存器中,同時反轉Flag標誌寄存器,同時Left=32+Left;對於Len<=Left,可在一個節拍內實現碼流讀取,使用32位的任意位左移/右移移位器各1個;對於Len>Left,可在兩個節拍內實現碼流讀取以及使用2個32位的任意位左移/右移位器的共享方法;對於一些數據加減法操作不需要加法器,可用簡單的取反加1和取反邏輯實現。
全文摘要
本發明公開了一種流輸入讀取的多媒體擴展指令的設計與實現方法,該方法針對音視頻解碼中流數據輸入讀取設計了4條媒體擴展指令,其硬體實現結構包括兩個32比特的緩衝寄存器、讀取碼流的地址寄存器(Addr)、Flag標誌寄存器、Left寄存器與兩個任意位移位器;該擴展指令包括指令讀初始化(Bini),碼流讀取(Bread),數據裝載(Bload),當前碼流地址返回(Bpos)構成,並設計了該流數據讀取指令的硬體實現電路以及在處理器中的流水線劃分,給出了其在基於SPARC V8處理器中具體指令編碼方式,實驗證明該擴展指令的效率是手工優化的SPARC V8處理器指令實現的5-8倍。能夠有效的提高處理器對多媒體解碼處理的性能。
文檔編號H04N7/26GK1912925SQ20061010506
公開日2007年2月14日 申請日期2006年8月29日 優先權日2006年8月29日
發明者梅魁志, 鄭南寧, 吳奇, 李國輝, 張元林, 黃暢 申請人:西安交通大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀