基于SoC的AC97技術硬件設計(圖)
關鍵詞:ac97音頻控制器;soc內核仿真;現(xiàn)場可編程門陣列
引言
---符合audio codec97協(xié)議(簡稱ac97,是由intel公司提出的數(shù)字音頻處理協(xié)議)的音頻控制器不但廣泛應用于個人電腦聲卡,并且為個人信息終端設備的soc(如intel的pxa250)提供音頻解決方案。本文設計的音頻控制器可為dsp內核提供數(shù)字音頻接口。全文在介紹音頻控制器結構的同時,著重強調其與內核之間數(shù)據(jù)的協(xié)調傳輸,并給出基于fpga實現(xiàn)soc內核仿真環(huán)境對音頻控制器進行功能測試的方法。
音頻控制器的結構和原理
ac97系統(tǒng)由音頻編解碼器(codec)和音頻控制器(controller)兩個部分組成。其中音頻編解碼器實現(xiàn)a/d、d/a轉換、音效處理等功能,而音頻控制器則是soc內核與音頻編解碼器之間的數(shù)字接口,負責控制數(shù)據(jù)和音頻數(shù)據(jù)的串/并、并/串轉換以及傳輸。
● 性能指標
本設計的音頻控制器符合ac97規(guī)范v2.3,其主要指標如下:支持雙聲道錄放音;支持定采樣率(48khz)和變采樣率錄放音;20位寬16層深pcm音頻數(shù)據(jù)fifo;支持省電模式;支持中斷、dma和輪詢3種方式實現(xiàn)與內核或內存的數(shù)據(jù)交換。
● 組成結構
音頻控制器的主結構如圖1所示。
內核/內存和音頻控制器接口(core/memory,ctrl interface)連接音頻控制器與內核或內存。cs是片選信號,wr和rd分別是讀寫使能,addr(16位寬)是音頻控制器的端口地址,din和dout(都是32位寬)分別是總線上的輸入輸出數(shù)據(jù),irq和dma req分別是中斷和dma請求。
主模塊(ac97 ctrl master)負責音頻控制器(ac97 controller)與內核或內存(dma模式下)之間pcm音頻數(shù)據(jù)、控制和狀態(tài)寄存器組(control&status regs)數(shù)據(jù)以及音頻編解碼器(ac97 codec)內部寄存器數(shù)據(jù)各并行數(shù)據(jù)的傳輸,由主時鐘clk同步。電源控制模塊(power ctrl)可以啟動省電模式,也由主時鐘clk同步。
4組fifo用于存放pcm音頻數(shù)據(jù),都是20位寬16層深,因此可以支持最高20位寬分辨率。當fifo滿或者空時,可以發(fā)出中斷或dma請求。
音頻編解碼器內部寄存器讀寫緩存器(codec reg write/read buf,簡稱crbuf)是2個32位寄存器。寫緩沖器可以緩存準備寫入音頻編解碼器內部寄存器的控制字,其空時可以發(fā)出中斷請求;讀緩沖器可以緩存已經從音頻編解碼器內部寄存器中讀出的狀態(tài)字,其滿時可以發(fā)出中斷請求。
控制和狀態(tài)寄存器組包含8個32位寄存器,其中,通用控制寄存器的主要功能是系統(tǒng)冷啟動、熱啟動;通用狀態(tài)寄存器反映音頻編解碼器狀態(tài);其他寄存器的功能包括配置pcm輸入輸出聲道、配置和產生中斷或dma請求。
輔模塊(ac97 ctrl slave)實現(xiàn)音頻控制器與音頻編解碼器之間(ac-link)數(shù)據(jù)幀的串行發(fā)送和接收。輸出數(shù)據(jù)(sdata_out)由輔時鐘bit_clk上跳沿同步,輸入數(shù)據(jù)(sdata_in)由bit_clk下跳沿同步。
● 工作原理
dsp內核通過讀寫音頻控制器csrs分別來獲得音頻編解碼器狀態(tài)和設置音頻編解碼器工作模式;通過讀寫fifo來緩沖音頻錄制和播放過程中的pcm音頻數(shù)據(jù);通過讀寫crbuf來獲得音頻編解碼器內部寄存器狀態(tài)和設置音頻編解碼器內部寄存器參數(shù)。下面以音頻播放中的主要步驟為例,介紹音頻控制器的工作原理。
(1)寫滿pcm左聲道輸出fifo;
(2)寫滿pcm右聲道輸出fifo;
(3)輪詢音頻編解碼器準備好(codec ready)信號是否有效;
(4)讀音頻編解碼器的26h寄存器,判斷d/a轉換器是否準備好;
(5)允許crbuf產生中斷請求;
(6)寫0到音頻編解碼器的02h寄存器,使主音量衰減最小;
(7)等待crbuf產生中斷,響應中斷并寫0到音頻編解碼器的18h寄存器,使pcm輸出音量衰減最?。?BR>(8)等待crbuf產生中斷,響應中斷并寫1到音頻編解碼器的2ah寄存器,即以變采樣率播放音頻;
(9)等待crbuf產生中斷,響應中斷并寫5622(十六進制)到音頻編解碼器的2ch寄存器,即以22.05khz采樣率播放音頻;
(10)允許pcm左右聲道fifo產生滿中斷;
(11)設置pcm左右聲道定速率或者變速率傳輸,并開始播放音頻;
(12)等待fifo中的pcm碼傳送掉16層并發(fā)出中斷請求;
(13)判斷是否是pcm左聲道fifo發(fā)出中斷請求,如果是,則寫16層pcm左聲道數(shù)據(jù);
(14)判斷是否是pcm右聲道fifo發(fā)出中斷請求,如果是,則寫16層pcm右聲道fifo數(shù)據(jù);
(15)如果內存中pcm數(shù)據(jù)被讀完,則放音結束,否則返回第12步繼續(xù)放音。
soc仿真環(huán)境的構成和原理
由音頻控制器的工作原理可見,其每一個步驟都是在dsp內核控制下進行的。因此在對音頻控制器進行功能驗證時,不但要保證其本身的邏輯正確,更要保證其與內核的數(shù)據(jù)傳輸正確,這樣才有利于音頻控制器和內核的整合。由此提出通過構件soc內核仿真環(huán)境來逼近真實內核,并在這個仿真環(huán)境中測試所設計的音頻控制器。
● 仿真環(huán)境的構成
soc內核仿真環(huán)境的硬件以xilinx公司的microblaze多媒體開發(fā)電路板為基礎,其核心是vertex ii fpga。電路板上還集成了national semiconductor公司的ac97 codec lm4549芯片,并且提供了line in/out、耳機以及麥克風插口??梢酝ㄟ^這些插口來測試音頻錄放效果,也可通過電路板上的測試點調試部分關鍵信號。soc內核仿真環(huán)境的構成如圖3所示。
內核模擬模塊(core sim)是soc內核仿真環(huán)境的核心,以rtl代碼形式下載到vertex ii fpga中模擬dsp內核的單周期指令,可以實現(xiàn)讀寫內存、訪問音頻控制器(包括讀寫fifo、crbuf以及csrs)、響應并處理中斷請求或dma請求。
其中,din_ram是32位內存數(shù)據(jù)輸入總線;din_ctrl是32位音頻控制器數(shù)據(jù)輸入總線;dout是32位數(shù)據(jù)輸出總線;irq是音頻控制器中斷請求;dma req是音頻控制器dma請求;rst是音頻控制器異步復位。
塊內存模塊是由vertex ii fpga中的塊內存實現(xiàn)的單端口內存,這種內存的時序與常規(guī)sram相同,可以模擬最大126kb的片上sram。在xilinx集成開發(fā)環(huán)境(ise)中調用core generator,就可以生成這種靜態(tài)內存。如果運用memory eidtor工具生成cgf和coe文件(塊內存的配置文件),就可以在為fpga下載bit文件的同時給塊內存賦初始值?;趂pga這項強大的功能,就可以將從個人電腦上提取出來的pcm音頻碼下載到塊內存中,然后在內核模擬模塊的控制下,通過音頻控制器傳送到音頻編解碼器中,由此實現(xiàn)音頻播放。
時鐘發(fā)生模塊(clock generator)可發(fā)出27mhz、54mhz以及108mhz三種時鐘,并且產生音頻控制器異步復位信號rst。microblaze開發(fā)電路板上的晶振發(fā)出27mhz和50mhz的占空比1:1的方波信號作為時鐘發(fā)生模塊的輸入,調用數(shù)字鎖相環(huán)硬核模塊(clockgen.v和clockgen.ucf)可輸出各倍頻時鐘(本設計用108mhz)以及異步復位信號rst。
ac97 ctrl是以rtl形式下載到vertex ii fpga中的音頻控制器邏輯。ac97 codec是national semiconductor公司的lm4549 ac97 codec芯片。
內核模擬模塊的實現(xiàn)原理
rtl代碼模擬的都是流水線中的指令執(zhí)行級,是音頻控制器和內核直接交互數(shù)據(jù)的級別。根據(jù)dsp內核在指令執(zhí)行級的行為和接口特性,可以靈活地改變內核模擬模塊的接口和內部信號(通過改變rtl代碼),形成不同的仿真環(huán)境。測試在新的仿真環(huán)境中音頻控制器與內核的工作是否協(xié)調穩(wěn)定,如果結果不理想,就應更改音頻控制器的設計。這樣就能使音頻控制器的特性也能和內核達到最好的協(xié)調。
基于soc內核仿真環(huán)境的放音實例
下面給出基于soc內核仿真環(huán)境播放音頻的實例,流程如圖2所示。
音頻來源于windows2000操作系統(tǒng)初始安裝后winnt/media目錄下的utopia windows start.wav(153kb,16位單聲道的wave文件),提取出文件中的pcm音頻碼后下載到vertex ii的塊內存中。
音頻控制器在soc內核仿真環(huán)境中控制音頻編解碼器工作,連接耳機到microblaze開發(fā)電路板的耳機插口,可以聽到維持將近3秒鐘的音頻信號,和原音頻文件的聲音基本一致。
使用音頻分析軟件audicity來分析音頻播放效果,原始音源與開發(fā)板播放的音頻略有不同,其原因有以下3點。
(1)電腦聲卡錄音起點和原音頻的放音起點不同;
(2)由于塊內存的最大容量為126kb,所以所錄波形文件只截取了原文件(153kb)的前2/3部分。
(3)經過soc內核仿真環(huán)境放音,并由電腦聲卡錄音得到的音頻與原音頻的幅度必然不同。
第1、2兩個因素引起兩個波形在時間軸方向上的偏差,因素3引起幅度軸方向上的偏差。盡管存在這些差異,但完全可以說明在soc內核仿真環(huán)境中,所設計的音頻控制器邏輯功能正確,與內核能夠協(xié)調工作。
總結
本文根據(jù)所設計的音頻控制器的結構詳細介紹了構建soc內核仿真環(huán)境來測試音頻控制器的思想和實現(xiàn)方法。基于這個仿真環(huán)境,不但可以測試音頻控制器實際錄放音的效果和性能,更重要的是可以及時反映其與內核的協(xié)調程度。這樣就可避免孤立設計音頻控制器而不考慮其與soc系統(tǒng)協(xié)調的弊端,明顯提高后期整合soc系統(tǒng)的效率。
參考文獻
1 audio codec 97, revision 2.3 revision 1.0, intel,april 2002
2 microblaze and multimedia development board
user guide ug020 (v1.0),xilinx, august 2002
3 core gennerator guide - ise 5, xilinx
4 lm4549a ac 97 rev 2.1 codec with
sample rate conversion and national 3d sound, national semiconductor, november 2002
評論