AAC音頻解碼中位數(shù)可選且自動加載移位寄存器設計
1、引言
本文引用地址:http://2s4d.com/article/167019.htm在對采樣率為44.1kHz的AAC音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。且音頻中每一幀可包含1~48個聲道的數(shù)據(jù),若遇時序要求最嚴格的場合,即一幀包含48個聲道數(shù)據(jù),實時性則很難滿足,因此速度便成為硬件設計的重要指標。所以在系統(tǒng)設計時,為完成解碼的實時性要求,各模塊應以速度為優(yōu)化目標。
在AAC音頻解碼電路的設計中,需要一塊電路連接AAC比特流的存儲電路和和取數(shù)解碼電路,考慮到它須完成數(shù)據(jù)緩沖和移位的功能,我們選擇用移位寄存器來實現(xiàn),示意圖如下。
典型的移位寄存器有兩個特點:1)每個時鐘周期移一位,2)加載的優(yōu)先級別高于移位的優(yōu)先級別,移位需等待加載的完成。而AAC音頻數(shù)據(jù)采用變長編碼技術,即壓縮比特流中的數(shù)據(jù)部分為可變長的哈夫曼編碼,所以每次解碼完畢從移位寄存器中移出的位數(shù)不是固定值,若使用典型移位寄存器一位一位地移數(shù)據(jù)降低了工作效率;且每次移位須等待加載完畢進行,耗費了等待時間。所以,典型的移位寄存器在時序要求緊張的場合對速度提高起到了負面作用,導致整個系統(tǒng)不能完成實時性要求。因此本設計針對AAC音頻解碼這一特殊應用,對典型移位寄存器在速度方面進行改進設計,使之每一周期可移出任意位,且移位無須等待加載完成,從而加速了移位過程,使之滿足實時性要求。
論文結構如下:首先介紹本設計的工作原理,對其中一些參數(shù)進行配置;其次分模塊進行電路設計;再次,將典型移位寄存器和本設計分別下載到FPGA開發(fā)板,從速度和面積兩方面進行實驗結果的比較;最后,對設計展望,提出可優(yōu)化的方向。
2、工作原理
考慮到本設計的特定使用場合,選擇移位寄存器為64位,移位位數(shù)是1~16可變的整數(shù),存儲空間是位寬為32位的fifo。在其他場合下,可基于同樣的設計方法通過改變參數(shù)來滿足要求。
移位寄存器功能示意如圖1所示,此移位寄存器連接了兩塊電路單元:單元一、需要取數(shù)的AAC音頻解碼電路單元;單元二、數(shù)據(jù)的存儲空間。當任意時刻單元一需取數(shù)時,可向移位寄存器發(fā)出取數(shù)信號,并給出要取的位數(shù),移位寄存器就在一個周期內將所需長度的數(shù)據(jù)移出。當移位寄存器中的數(shù)據(jù)少于一定量時(在此設為32位),會自動從單元二中加載數(shù)據(jù),且加載與移位同優(yōu)先級別,所以無須等待時間。
3、位數(shù)可選、自動加載移位寄存器電路設計
以主要寄存器的不同功能依據(jù),將電路劃分為如下圖所示的虛線框內的三個模塊。下面將分模塊介紹電路的設計。
圖2 位數(shù)可選、自動加載移位寄存器電路圖
3.1 有效數(shù)據(jù)計數(shù)器的設計
有效數(shù)據(jù)計數(shù)器是用來記錄移位寄存器中剩余有效數(shù)據(jù)的位數(shù)。初始化時,存儲器向移位寄存器加載64位有效數(shù)據(jù),計數(shù)器為64;當外界從移位寄存器取數(shù)時,計數(shù)器在原有計數(shù)的基礎上減掉所取的位數(shù);當移位寄存器從存儲器加載數(shù)據(jù)時,計數(shù)器在原有計數(shù)的基礎上加上加載數(shù)據(jù)的位寬(32);當移位和加載同時進行時,計數(shù)器進行上述的減法和加法的混合運算。
使用計數(shù)器的目的是為了產(chǎn)生加載數(shù)據(jù)的標志信號(在這里設為32)。當有效數(shù)據(jù)計數(shù)器中的數(shù)目小于等于32時,產(chǎn)生加載信號,而當計數(shù)器中的數(shù)目大于32時,撤除加載信號。在這里加載數(shù)據(jù)的標志位可以是范圍為16~32的整數(shù),范圍的制定決定于:加載標志的下限要滿足一次取數(shù)的最大長度,上限要保證除有效數(shù)據(jù)外的剩余空間足夠下一次的數(shù)據(jù)加載長度。
3.2 初始化控制狀態(tài)機的設計
移位寄存器在電路復位時須加載上有效數(shù)據(jù),以保證第一次的取數(shù)的正確進行。而此時加載標志不能由有效數(shù)據(jù)計數(shù)器產(chǎn)生,因為有效數(shù)據(jù)計數(shù)器在初始化的狀態(tài)下為64不可能產(chǎn)生加載標志,所以加載標志需由復位信號間接產(chǎn)生。且由于移位寄存器的長度(64位)是存儲器的寬度(32位)的2倍,所以需要加載兩次。
鑒于以上的功能要求,設計初始化狀態(tài)機,其中包括三個狀態(tài): IDLE, INIT_0和 INIT_1。當復位產(chǎn)生時,復位信號的兩級寄存信號(防止亞穩(wěn)態(tài))為觸發(fā)信號,使狀態(tài)由IDLE跳轉到INIT_0;下一個時鐘周期,狀態(tài)機自動由INIT_0跳轉到INIT_1,并產(chǎn)生輸出信號init_0;再下個時鐘周期,狀態(tài)機自動由INIT_1跳轉到IDLE,并產(chǎn)生輸出信號init_1。狀態(tài)機產(chǎn)生的上述兩個輸出信號控制產(chǎn)生移位寄存器在初始化時的兩次加載信號。狀態(tài)轉換圖如下:
評論