基于SoPC的嵌入式語音處理系統(tǒng)的設(shè)計與實現(xiàn)
AIC23芯片與EP2C35系列FPGA的連接電路如圖4所示。通過I2C控制接口配置AIC23的11個寄存器;通過I2S總線讀寫音頻數(shù)據(jù),讀寫音頻數(shù)據(jù)使用DMA方式。
系統(tǒng)的音頻信號采集原理:麥克風(fēng)輸入的模擬音頻信號通過AIC23內(nèi)部的A/D轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字音頻信號,通過I2S總線傳輸給輸入FIFO緩存區(qū)。當(dāng)輸入FIFO緩存區(qū)存儲的數(shù)據(jù)達(dá)到設(shè)定值時,向DMA控制器請求DMA傳送,DMA控制器接受請求后就完成FIFO到SDRAM之間的數(shù)據(jù)傳送。當(dāng)回放錄音數(shù)據(jù)時:通過SDRAM控制器將SDRAM中保存的音頻數(shù)據(jù)經(jīng)輸出FIFO緩存區(qū)送到I2S總線,再由AIC23進(jìn)行D/A轉(zhuǎn)換,將數(shù)字音頻信號還原成為模擬音頻信號通過耳機播放。
3 系統(tǒng)軟件設(shè)計
該語音處理系統(tǒng)軟件設(shè)計是在Linux操作系統(tǒng)中完成的。
3.1 μClinux操作系統(tǒng)移植
μClinux是針對控制領(lǐng)域的嵌入式Linux操作系統(tǒng),適合如NiosⅡ處理器等不具備內(nèi)存管理單元(MMU)的微處理器/微控制器?;诓僮飨到y(tǒng)進(jìn)行的軟件開發(fā),需將操作系統(tǒng)移植到硬件平臺,μClinux可以以部件的形式集成到SoPC系統(tǒng)中,也可以在用虛擬機運行的Linux下進(jìn)行μClinux的交叉編譯,此設(shè)計中使用后一種方法。
(1)建立編譯環(huán)境。安裝虛擬機、redhat9、NiosⅡ的交叉編譯工具鏈(ToolChain)nios2gcc.tar.bz2及nios2libs.tar.bz2,μClinux的代碼包μClinux―dist一20070130.tar.gz及一個針對NiosⅡ處理器的補丁包μC1inux―dist一20070130―nios2―02.diff.gz。
(2)內(nèi)核的配置與編譯,按如下順序進(jìn)行:
(3)啟動μClinux系統(tǒng)。將zlmage傳回Win―dows,下載.sof配置文件后再下載zImage,通過nios2一terminal啟動μClinux系統(tǒng)。連接串口,通過串口調(diào)試器即可看到系統(tǒng)的啟動信息。
3.2 語音處理的軟件設(shè)計
移植完Linux操作系統(tǒng)后,需要添加設(shè)計中使用到的編解碼芯片的驅(qū)動程序,系統(tǒng)會根據(jù)SoPC Builder生成的.ptf文件將外圍器件的引腳及中斷信息生成Nios_system.h文件,提供給各外圍器件的驅(qū)動程序。本設(shè)計中需要添加AIC23和I2C控制器的驅(qū)動程序。
系統(tǒng)的語音處理程序流程圖如圖5所示,軟件設(shè)計實現(xiàn)語音的采集和回放,系統(tǒng)的軟件設(shè)計采用C語言和NiosⅡ匯編語言混合編寫。為使AIC23正常工作并產(chǎn)生預(yù)期效果,必須對其相應(yīng)的寄存器進(jìn)行配置。這里只列出對AIC23芯片初始化設(shè)置時的部分代碼,AIC23是通過I2C總線進(jìn)行初始化配置的。
AIC23初始化的部分源代碼:
4 結(jié) 語
該設(shè)計在CycloneⅡFPGA開發(fā)平臺上配置硬件系統(tǒng),在Linux操作系統(tǒng)在進(jìn)行軟件設(shè)計,從而實現(xiàn)了對語音的采集與回放等基本音頻處理功能。SoPC系統(tǒng)的可裁減性以及嵌入式系統(tǒng)的可移植性等優(yōu)點,使設(shè)計可以作為一個子系統(tǒng)應(yīng)用在更大型的系統(tǒng)設(shè)計中,例如把G723.1的編解碼算法移植到該系統(tǒng)中,則完全可以把該模塊嵌入到網(wǎng)絡(luò)會議的可視電話中作為語音處理模塊,因而有很好的應(yīng)用前景和科研價值。
評論