摘 要: 設計并實現(xiàn)了一個基于FPGA的音頻解碼器驗證系統(tǒng)。同傳統(tǒng)的驗證系統(tǒng)相比,系統(tǒng)不僅具有很強的通用性,還具有良好的可擴展性和強大的圖形化顯示功能,可以很方便地對各種音頻解碼器進行片上驗證。該系統(tǒng)的實現(xiàn)縮短了音頻解碼器的片上驗證周期,有助于研究人員提高工作效率,具有很大的實用價值。
關鍵詞: FPGA; 音頻解碼器; 驗證系統(tǒng)
近年來,數(shù)字多媒體技術得到了前所未有的發(fā)展。數(shù)字音頻技術已經(jīng)同CD、DVD和MP3等娛樂產(chǎn)品一起進入到人們的日常生活中,對人們的生活產(chǎn)生了巨大影響[1]。而隨著個人數(shù)字娛樂產(chǎn)品的普及,音頻專用解碼芯片以其低成本和高性能而得到了廣泛的應用[2-3]。
在音頻解碼芯片設計過程中,研究人員往往需要對解碼器的功能進行反復驗證[4]。傳統(tǒng)的驗證方法一般是利用FPGA搭建專用的測試平臺并使用ChipScope等在線邏輯分析儀進行輔助分析。這種方法可以有針對性地獲取用戶所需數(shù)據(jù),從而在一定程度上達到驗證的目的,但存在一些缺陷。首先,測試平臺通用性差,無法兼容多個音頻解碼器。即使對于同一個解碼器,一旦接口或內部測試模塊改變,測試平臺就需要做相應的修改。其次,受限于在線邏輯分析儀的功能,測試結果的顯示不直觀,如無法根據(jù)用戶的需求實現(xiàn)可配置的圖形化顯示功能。為此,本文設計并實現(xiàn)了一個通用的音頻解碼器測試系統(tǒng),其功能強大,并具有良好的可擴展性,可以幫助研究人員提高工作效率,具有很大的實用價值。
1 系統(tǒng)結構與工作原理
系統(tǒng)總體結構如圖1所示。在FPGA內部,該驗證系統(tǒng)主要由系統(tǒng)控制、碼流輸入、輸入緩沖、音頻解碼器、輸出緩沖、音頻輸出、信息提取和信息顯示共八個模塊組成。
系統(tǒng)復位完成后,如果用戶在一定時間內沒有改變系統(tǒng)參數(shù),則系統(tǒng)會根據(jù)默認設置運行。首先,碼流輸入模塊接收系統(tǒng)控制模塊的指令,指定接口芯片在存儲介質的特定位置讀取數(shù)據(jù)并將其寫入輸入緩沖區(qū)中。當輸入緩沖區(qū)中的有效數(shù)據(jù)量到達預先設定的解碼最小值時,音頻解碼器便開始從輸入緩沖區(qū)中讀取編碼數(shù)據(jù)并進行解碼,之后將解碼得到的PCM樣本寫入到輸出緩沖區(qū)中。同樣,在輸出緩沖區(qū)中的有效數(shù)據(jù)量達到預先設定的播放最小值時,音頻輸出模塊開始根據(jù)獲得的音頻信息以給定的速率從輸出緩沖區(qū)中讀取PCM樣本,并按照特定的格式輸出到AC’97編解碼芯片中,從而驅動揚聲器發(fā)出聲音。在系統(tǒng)運行過程中,系統(tǒng)控制模塊實時響應用戶輸入、改變系統(tǒng)工作狀態(tài)。而信息顯示模塊則將信息提取模塊獲得的數(shù)據(jù)通過VGA顯示器或LED實時顯示出來。
1.1 系統(tǒng)控制和信息提取
系統(tǒng)控制模塊一方面響應用戶輸入從而對系統(tǒng)進行控制,另一方面協(xié)調各模塊工作,防止緩沖區(qū)溢出。對于用戶輸入,系統(tǒng)控制模塊采用了延時查詢與循環(huán)驗證的處理方式,這樣提高了系統(tǒng)判斷的準確性,減少了誤觸發(fā)率[5]。而對于各模塊工作的協(xié)調則由系統(tǒng)控制模塊與信息提取模塊共同完成的。例如在音樂第一幀解碼過程中,系統(tǒng)控制模塊會通過信息提取模塊獲取音樂的基本信息(聲道信息、采樣率等),之后將該信息傳遞給音頻輸出模塊,從而決定輸出緩沖區(qū)中PCM樣本與聲道的對應關系以及音樂的播放速率等。同樣,輸入輸出緩沖區(qū)中的有效數(shù)據(jù)量和剩余空間等信息也通過信息提取模塊反饋到系統(tǒng)控制模塊中,作為控制音頻解碼器是否繼續(xù)解碼的依據(jù)。此外,信息提取模塊還對獲取的數(shù)據(jù)進行整合和篩選,并將處理結果送入到信息顯示模塊中。
1.2 碼流輸入模塊
碼流輸入模塊通過接口芯片從存儲介質中讀取數(shù)據(jù)并將其存入到輸入緩沖區(qū)中,其結構如圖2所示。系統(tǒng)控制模塊在命令碼流輸入模塊讀取數(shù)據(jù)的同時,將起始地址(邏輯地址)和要讀取的數(shù)據(jù)量傳遞給該模塊。其中邏輯地址首先通過地址映射子模塊轉換為硬件物理地址,再送到數(shù)據(jù)讀取控制子模塊中。數(shù)據(jù)讀取控制子模塊確認來自系統(tǒng)控制模塊的指令和數(shù)據(jù)合法后,啟動進度控制狀態(tài)機,進而通過讀寫時序產(chǎn)生子模塊將指令寫入接口芯片內的命令寄存器中,之后等待接口芯片的反饋信息并讀取數(shù)據(jù)。在數(shù)據(jù)讀取過程中,接口芯片的工作狀態(tài)會寫入到狀態(tài)寄存器中,供數(shù)據(jù)讀取控制子模塊使用。