1、引言 在對采樣率為44.1kHz的AAC音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。且音頻中每一幀可包含1"48個聲道的數據,若遇時序要求最嚴格的場合,即一幀包含48個聲道數據,實時性則很難滿足,因此速度便成為硬件設計的重要指標。所以在系統設計時,為完成解碼的實時性要求,各模塊應以速度為優化目標。 在AAC音頻解碼電路的設計中,需要一塊電路連接AAC比特流的存儲電路和和取數解碼電路,考慮到它須完成數據緩沖和移位的功能,我們選擇用移位寄存器來實現,示意圖如下。 圖1 移位寄存器功能示意圖 典型的移位寄存器有兩個特點:1)每個時鐘周期移一位,2)加載的優先級別高于移位的優先級別,移位需等待加載的完成。而AAC音頻數據采用變長編碼技術,即壓縮比特流中的數據部分為可變長的哈夫曼編碼,所以每次解碼完畢從移位寄存器中移出的位數不是固定值,若使用典型移位寄存器一位一位地移數據降低了工作效率;且每次移位須等待加載完畢進行,耗費了等待時間。所以,典型的移位寄存器在時序要求緊張的場合對速度提高起到了負面作用,導致整個系統不能完成實時性要求。因此本設計針對AAC音頻解碼這一特殊應用,對典型移位寄存器在速度方面進行改進設計,使之每一周期可移出任意位,且移位無須等待加載完成,從而加速了移位過程,使之滿足實時性要求。 論文結構如下:首先介紹本設計的工作原理,對其中一些參數進行配置;其次分模塊進行電路設計;再次,將典型移位寄存器和本設計分別下載到FPGA開發板,從速度和面積兩方面進行實驗結果的比較;最后,對設計展望,提出可優化的方向。 2、工作原理 考慮到本設計的特定使用場合,選擇移位寄存器為64位,移位位數是1"16可變的整數,存儲空間是位寬為32位的fifo。在其他場合下,可基于同樣的設計方法通過改變參數來滿足要求。 移位寄存器功能示意如圖1所示,此移位寄存器連接了兩塊電路單元:單元一、需要取數的AAC音頻解碼電路單元;單元二、數據的存儲空間。當任意時刻單元一需取數時,可向移位寄存器發出取數信號,并給出要取的位數,移位寄存器就在一個周期內將所需長度的數據移出。當移位寄存器中的數據少于一定量時(在此設為32位),會自動從單元二中加載數據,且加載與移位同優先級別,所以無須等待時間。 3、位數可選、自動加載移位寄存器電路設計 以主要寄存器的不同功能依據,將電路劃分為如下圖所示的虛線框內的三個模塊。下面將分模塊介紹電路的設計。 圖2 位數可選、自動加載移位寄存器電路圖 3.1 有效數據計數器的設計 有效數據計數器是用來記錄移位寄存器中剩余有效數據的位數。初始化時,存儲器向移位寄存器加載64位有效數據,計數器為64;當外界從移位寄存器取數時,計數器在原有計數的基礎上減掉所取的位數;當移位寄存器從存儲器加載數據時,計數器在原有計數的基礎上加上加載數據的位寬(32);當移位和加載同時進行時,計數器進行上述的減法和加法的混合運算。 使用計數器的目的是為了產生加載數據的標志信號(在這里設為32)。當有效數據計數器中的數目小于等于32時,產生加載信號,而當計數器中的數目大于32時,撤除加載信號。在這里加載數據的標志位可以是范圍為16"32的整數,范圍的制定決定于:加載標志的下限要滿足一次取數的最大長度,上限要保證除有效數據外的剩余空間足夠下一次的數據加載長度。 3.2 初始化控制狀態機的設計 移位寄存器在電路復位時須加載上有效數據,以保證第一次的取數的正確進行。而此時加載標志不能由有效數據計數器產生,因為有效數據計數器在初始化的狀態下為64不可能產生加載標志,所以加載標志需由復位信號間接產生。且由于移位寄存器的長度(64位)是存儲器的寬度(32位)的2倍,所以需要加載兩次。 鑒于以上的功能要求,設計初始化狀態機,其中包括三個狀態: IDLE, INIT_0和 INIT_1。當復位產生時,復位信號的兩級寄存信號(防止亞穩態)為觸發信號,使狀態由IDLE跳轉到INIT_0;下一個時鐘周期,狀態機自動由INIT_0跳轉到INIT_1,并產生輸出信號init_0;再下個時鐘周期,狀態機自動由INIT_1跳轉到IDLE,并產生輸出信號init_1。狀態機產生的上述兩個輸出信號控制產生移位寄存器在初始化時的兩次加載信號。狀態轉換圖如下: 圖3 移位寄存器初始化狀態轉移圖 3.3 移位寄存器的設計 之所以選擇64位的移位寄存器,是因為若選擇一倍于存儲器寬度的移位寄存器長度(32位),移位后剩余的有效數據的位數可能不夠下一次的移位長度,為滿足移位長度的要求,需要在加載后再次移位,因此移位最多要花費三個時鐘周期的時間;若選擇三倍于存儲器寬度的移位寄存器的長度或更長(>=96位)時,當設定加載數據的標志為有效數據不大于32時,需要加載兩次數據,當設定加載數據的標志為有效數據不大于64時,此時移位寄存器中的有效數據相對于需要移位的最長數據偏長且沒有必要。所以,將移位寄存器的長度選擇為2倍于存儲器的寬度(64位)在時間和空間上都達到了最優。 初始化過程:初始化狀態機產生的輸出信號init_0和init_1為兩次加載的控制信號,這兩個信號控制移位寄存器在初始化的兩個時鐘周期內,從存儲器中取出數據并將其分別加載到高32位和低32位。 移位過程:當取數信號發出取數要求時,輸入的取數位數作為多路選擇器的數據選擇端,當前移位寄存器的值和0作為多路選擇器的數據端,通過數據選擇決定移位寄存器下個周期從高位到低位的值。 加載過程:當加載信號發出時,剩余有效數據作為多路選擇器的數據選擇端,當前移位寄存器的值、FIFO輸出的值和0作為多路選擇器的數據端,通過數據選擇決定移位寄存器下個周期從高位到低位的值。 移位和加載同時發生的過程:當移位和加載信號同時產生時,移位寄存器中剩余的有效數據的位數和輸入的取數位數共同作為多路選擇器的數據選擇端,當前移位寄存器的值、FIFO輸出的值和0作為多路選擇器的數據端,通過數據選擇決定移位寄存器下個周期從高位到低位的值。 4、實驗結果 為完成解碼實時性的要求,本設計對典型的移位寄存器在速度上進行改進,但控制邏輯變得復雜,從而消耗了更多資源。因此,我們選擇速度、面積作為性能指標對兩種設計進行比較。在基于FPGA的硬件設計中,面積指標通常用查找表數和寄存器數來表示,速度指標我們選擇最大時鐘頻率及解碼時平均每幀消耗的周期數來表示。 我們采用altera公司FPGA開發工具QuartusII分別對兩塊電路進行綜合和時序分析,從綜合報告中獲得查找表和寄存器的數目,從時序報告中獲得最大時鐘頻率。并將兩個設計分別同AAC音頻解碼電路一起整體下載到stratix II EP2S180 的FPGA開發板,以AAC音頻壓縮文件中隨機抽取的10幀數據為測試矢量,使用一計數器記錄下移位寄存器消耗的周期數,將其寫入片內ram,并將觀測到的數據通過計算得平均每幀消耗的周期數。實驗結果如下表所示: 表1 實驗數據對比 由對比數據可得以下結論: 1、典型移位寄存器的工作頻率大于位數可選、自動加載移位寄存器的頻率。但由于此移位寄存器只是更大電路中的一個小模塊,由實際結果可知電路整體的工作頻率并不取決于此模塊的工作頻率,所以在整體電路中對單獨模塊的頻率進行比較并不能得出速度的優劣。 2、由查找表數和寄存器數的比較可得:典型移位寄存器消耗的資源遠小于位數可選、自動加載移位寄存器,即典型移位寄存器在面積上占有較大優勢。 3、由平均每幀消耗周期數的比較可得:兩者工作在相同的時鐘頻率下時,位數可選、自動加載移位寄存器消耗的時間約為典型移位寄存器的28%,單位時間內傳輸的數據量提高到典型移位寄存器的356%,所以位數可選、自動加載移位寄存器在速度上占有較大優勢。 綜上,為完成AAC音頻解碼的實時性要求,本設計進行了速度和面積上的折中處理,相對于典型移位寄存器本設計以犧牲面積為代價換取了速度上的優勢,使之在規定時間內完成解碼。 |