基于SoC的AC 97技術(shù)硬件設(shè)計
引言
符合audio codec'97協(xié)議(簡稱ac'97,是由intel公司提出的數(shù)字音頻處理協(xié)議)的音頻控制器不但廣泛應(yīng)用于個人電腦聲卡,并且為個人信息終端設(shè)備的soc(如intel的pxa250)提供音頻解決方案。本文設(shè)計的音頻控制器可為dsp內(nèi)核提供數(shù)字音頻接口。全文在介紹音頻控制器結(jié)構(gòu)的同時,著重強調(diào)其與內(nèi)核之間數(shù)據(jù)的協(xié)調(diào)傳輸,并給出基于fpga實現(xiàn)soc內(nèi)核仿真環(huán)境對音頻控制器進行功能測試的方法。
音頻控制器的結(jié)構(gòu)和原理
ac'97系統(tǒng)由音頻編解碼器(codec)和音頻控制器(controller)兩個部分組成。其中音頻編解碼器實現(xiàn)a/d、d/a轉(zhuǎn)換、音效處理等功能,而音頻控制器則是soc內(nèi)核與音頻編解碼器之間的數(shù)字接口,負責(zé)控制數(shù)據(jù)和音頻數(shù)據(jù)的串/并、并/串轉(zhuǎn)換以及傳輸。
性能指標(biāo)
本設(shè)計的音頻控制器符合ac'97規(guī)范v2.3,其主要指標(biāo)如下:支持雙聲道錄放音;支持定采樣率(48khz)和變采樣率錄放音;20位寬16層深pcm音頻數(shù)據(jù)fifo;支持省電模式;支持中斷、dma和輪詢3種方式實現(xiàn)與內(nèi)核或內(nèi)存的數(shù)據(jù)交換。
組成結(jié)構(gòu)音頻控制器的主結(jié)構(gòu)如圖1所示。內(nèi)核/內(nèi)存和音頻控制器接口(core/memory,ctrl interface)連接音頻控制器與內(nèi)核或內(nèi)存。cs是片選信號,wr和rd分別是讀寫使能,addr(16位寬)是音頻控制器的端口地址,din和dout(都是32位寬)分別是總線上的輸入輸出數(shù)據(jù),irq和dma req分別是中斷和dma請求。主模塊(ac'97 ctrl master)負責(zé)音頻控制器(ac'97 controller)與內(nèi)核或內(nèi)存(dma模式下)之間pcm音頻數(shù)據(jù)、控制和狀態(tài)寄存器組(control&status regs)數(shù)據(jù)以及音頻編解碼器(ac'97 codec)內(nèi)部寄存器數(shù)據(jù)各并行數(shù)據(jù)的傳輸,由主時鐘clk同步。電源控制模塊(power ctrl)可以啟動省電模式,也由主時鐘clk同步。
圖1 音頻控制器的主結(jié)構(gòu)
4組fifo用于存放pcm音頻數(shù)據(jù),都是20位寬16層深,因此可以支持最高20位寬分辨率。當(dāng)fifo滿或者空時,可以發(fā)出中斷或dma請求。音頻編解碼器內(nèi)部寄存器讀寫緩存器(codec reg write/read buf,簡稱crbuf)是2個32位寄存器。寫緩沖器可以緩存準(zhǔn)備寫入音頻編解碼器內(nèi)部寄存器的控制字,其空時可以發(fā)出中斷請求;讀緩沖器可以緩存已經(jīng)從音頻編解碼器內(nèi)部寄存器中讀出的狀態(tài)字,其滿時可以發(fā)出中斷請求。控制和狀態(tài)寄存器組包含8個32位寄存器,其中,通用控制寄存器的主要功能是系統(tǒng)冷啟動、熱啟動;通用狀態(tài)寄存器反映音頻編解碼器狀態(tài);其他寄存器的功能包括配置pcm輸入輸出聲道、配置和產(chǎn)生中斷或dma請求。輔模塊(ac'97 ctrl slave)實現(xiàn)音頻控制器與音頻編解碼器之間(ac-link)數(shù)據(jù)幀的串行發(fā)送和接收。輸出數(shù)據(jù)(sdata_out)由輔時鐘bit_clk上跳沿同步,輸入數(shù)據(jù)(sdata_in)由bit_clk下跳沿同步。
工作原理
dsp內(nèi)核通過讀寫音頻控制器csrs分別來獲得音頻編解碼器狀態(tài)和設(shè)置音頻編解碼器工作模式;通過讀寫fifo來緩沖音頻錄制和播放過程中的pcm音頻數(shù)據(jù);通過讀寫crbuf來獲得音頻編解碼器內(nèi)部寄存器狀態(tài)和設(shè)置音頻編解碼器內(nèi)部寄存器參數(shù)。下面以音頻播放中的主要步驟為例,介紹音頻控制器的工作原理。
(1)寫滿pcm左聲道輸出fifo;
(2)寫滿pcm右聲道輸出fifo;
(3)輪詢音頻編解碼器準(zhǔn)備好(codec ready)信號是否有效;
(4)讀音頻編解碼器的26h寄存器,判斷d/a轉(zhuǎn)換器是否準(zhǔn)備好;
(5)允許crbuf產(chǎn)生中斷請求;
(6)寫0到音頻編解碼器的02h寄存器,使主音 量衰減最小;
(7)等待crbuf產(chǎn)生中斷,響應(yīng)中斷并寫0到音頻編解碼器的18h寄存器,使pcm輸出音量衰減最?。?br>
(8)等待crbuf產(chǎn)生中斷,響應(yīng)中斷并寫1到音頻編解碼器的2ah寄存器,即以變采樣率播放音頻;
(9)等待crbuf產(chǎn)生中斷,響應(yīng)中斷并寫5622(十六進制)到音頻編解碼器的2ch寄存器,即以22.05khz采樣率播放音頻;
(10)允許pcm左右聲道fifo產(chǎn)生滿中斷;
(11)設(shè)置pcm左右聲道定速率或者變速率傳輸,并開始播放音頻;
(12)等待fifo中的pcm碼傳送掉16層并發(fā)出中斷請求;
(13)判斷是否是pcm左聲道fifo發(fā)出中斷請求,如果是,則寫16層pcm左聲道數(shù)據(jù);
(14)判斷是否是pcm右聲道fifo發(fā)出中斷請求,如果是,則寫16層pcm右聲道fifo數(shù)據(jù);
(15)如果內(nèi)存中pcm數(shù)據(jù)被讀完,則放音結(jié)束,否則返回第12步繼續(xù)放音。
soc仿真環(huán)境的構(gòu)成和原理
由音頻控制器的工作原