基于FPGA的音頻信號(hào)采集處理系統(tǒng)設(shè)計(jì)
李佳希 王才敏 北京航天控制儀器研究所通信系統(tǒng)事業(yè)部
本文介紹一種基于FPGA的音頻采集處理系統(tǒng)。系統(tǒng)以FPGA器件為控制核心,通過(guò)AD/DA控制模塊實(shí)現(xiàn)數(shù)據(jù)采集功能;通過(guò)SDRAM控制模塊實(shí)現(xiàn)對(duì)SDRAM的數(shù)據(jù)讀寫(xiě)功能;通過(guò)FIR濾波器模塊,實(shí)現(xiàn)信號(hào)低通濾波處理功能。本設(shè)計(jì)具有速度快、成本低、體積小等優(yōu)勢(shì)。
FPGA;SDRAM讀寫(xiě);FIR濾波
隨著微電子和信號(hào)處理技術(shù)的發(fā)展,數(shù)字音頻采集處理技術(shù)在眾多領(lǐng)域得到廣泛應(yīng)用,以FPGA為核心的音頻采集處理系統(tǒng),在現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)中具有廣闊的應(yīng)用空間。
系統(tǒng)總體設(shè)計(jì)方案如圖1所示,F(xiàn)PGA為系統(tǒng)的控制核心,負(fù)責(zé)控制AK4550和SDRAM芯片,使它們能夠按特定的時(shí)序工作,并且在需要的時(shí)候進(jìn)行調(diào)用,也負(fù)責(zé)對(duì)采樣回來(lái)的信號(hào)進(jìn)行濾波處理。AK4550負(fù)責(zé)對(duì)采集的音頻信號(hào)進(jìn)行模數(shù)轉(zhuǎn)換。SDRAM負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)。
2.1 AD/DA控制模塊
AK4550分別采用兩路模擬信號(hào)輸入和輸出,使用簡(jiǎn)單靈活。AK4550與FPGA之間通過(guò)I2S總線(xiàn)連接,其中MCLK是主時(shí)鐘,SCLK是移位時(shí)鐘,LRCK是幀時(shí)鐘,用于切換左右聲道數(shù)據(jù)。
AD/DA控制模塊主要由分頻模塊、I2S模塊、系統(tǒng)控制模塊和移位寄存器模塊4部分組成。
分頻模塊:由FPGA的時(shí)鐘分頻得到所需要的主時(shí)鐘信號(hào)MCLK,再由主時(shí)鐘分頻得到SCLK和LRCK信號(hào)。
I2S模塊:通過(guò)分頻得到的MCLK、SCLK和LRCK信號(hào)配置AK4550。當(dāng)LRCK為高電平時(shí),采集16位左聲道數(shù)據(jù);反之則采集16位右聲道數(shù)據(jù)。
圖1 系統(tǒng)結(jié)構(gòu)框圖
圖2 AK4550控制模塊原理圖
系統(tǒng)控制模塊:通過(guò)控制PWAD與PWDA來(lái)控制AK4550當(dāng)前的工作狀態(tài),其中高電平代表工作,低電平代表空閑;通過(guò)控制DEM0和DEM1來(lái)選擇采樣頻率,本設(shè)計(jì)選擇將DEM0和DEM1同時(shí)置高,即采樣頻率選擇為32kHz。
移位寄存器模塊:由于采集的數(shù)據(jù)為16位,而芯片輸入輸出接口SDTI和SDTO均為1位,故需通過(guò)以SCLK為控制時(shí)鐘的計(jì)數(shù)器控制數(shù)據(jù)的傳輸,每檢測(cè)到16個(gè)SCLK上升沿信號(hào)進(jìn)行一次數(shù)據(jù)傳輸。
2.2 SDRAM控制模塊
SDRAM控制模塊除了時(shí)鐘分頻、數(shù)據(jù)接口等部分外,主要由一個(gè)狀態(tài)機(jī)來(lái)實(shí)現(xiàn),整個(gè)狀態(tài)機(jī)根據(jù)需要設(shè)計(jì)了8個(gè)主要狀態(tài),分別為初始化狀態(tài)、空閑狀態(tài)、刷新?tīng)顟B(tài)、激活狀態(tài)、讀、寫(xiě)等待狀態(tài)、讀狀態(tài)和寫(xiě)狀態(tài),通過(guò)時(shí)鐘上升沿時(shí)刻CS、CAS、RAS、WE的不同組合確定當(dāng)前狀態(tài)。狀態(tài)機(jī)的工作流程為系統(tǒng)上電,對(duì)SDRAM進(jìn)行初始化之后進(jìn)入空閑狀態(tài),當(dāng)收到寫(xiě)命令時(shí),觸發(fā)行激活,進(jìn)入寫(xiě)等待狀態(tài),執(zhí)行寫(xiě)操作。同理當(dāng)收到讀命令時(shí),觸發(fā)行激活,進(jìn)入讀等待狀態(tài),執(zhí)行讀操作。當(dāng)準(zhǔn)備打開(kāi)新的行時(shí)進(jìn)行預(yù)充電,與此同時(shí),每當(dāng)刷新時(shí)間到時(shí),控制模塊進(jìn)入自刷新?tīng)顟B(tài)。
圖3 SDRAM控制模塊原理圖
如圖3所示,SDRAM控制模塊通過(guò)外部RD和WR信號(hào)控制SDRAM的讀寫(xiě),并通過(guò)地址輸入確定數(shù)據(jù)的內(nèi)容和存放位置。時(shí)鐘分頻模塊將外部晶振提供的時(shí)鐘信號(hào)CLKIN分頻得到MCLK時(shí)鐘信號(hào);接口模塊負(fù)責(zé)數(shù)據(jù)接口DATA和SDRAM數(shù)據(jù)接口DQ之間的通信;狀態(tài)機(jī)模塊負(fù)責(zé)在各工作狀態(tài)提供相應(yīng)的CKE、CS、CAS、RAS、WE信號(hào),使SDRAM按照正確的狀態(tài)運(yùn)行。
在FPGA中實(shí)現(xiàn)FIR濾波器,首先要確定濾波器的階數(shù)及各階的系數(shù),本設(shè)計(jì)選擇了16位32階、截止頻率為1kHZ的低通濾波器。濾波器的主體部分由總控制器、加法樹(shù)、移位累加器、移位寄存器和位選1×16乘法器5個(gè)部分組成。
總控制器:總控制器有接受復(fù)位信號(hào)、產(chǎn)生位移時(shí)鐘、產(chǎn)生運(yùn)算控制時(shí)鐘等功能。濾波器是16位的,再加一個(gè)移數(shù)時(shí)鐘脈沖,總共17個(gè)時(shí)鐘脈沖周期,所以運(yùn)算控制時(shí)鐘是由一個(gè)17進(jìn)制的計(jì)數(shù)器產(chǎn)生的。
移位寄存器:在一次序列運(yùn)算結(jié)束后,原先存放x(n+1)的寄存器存入x(n+2),而原先存放x(n+2)的寄存器存入x(n+3),以此類(lèi)推。原先存放x(n)的寄存器存入由AD控制器移位寄存器端口新進(jìn)來(lái)的數(shù)據(jù)。
位選1×16乘法器:當(dāng)運(yùn)算控制時(shí)鐘信號(hào)到來(lái)時(shí),數(shù)據(jù)h(n)的相應(yīng)位與x(n)相乘,并把結(jié)果送給加法樹(shù)。
加法樹(shù):加法樹(shù)把所有加數(shù)兩個(gè)一組分別進(jìn)行相加,然后將所得到的和值兩個(gè)一組繼續(xù)相加直到只剩下一個(gè)數(shù),即為所有數(shù)相加的和。
移位累加器:移位累加器將加法樹(shù)得出的結(jié)果進(jìn)行逐個(gè)累加。
按以上描述設(shè)計(jì)的基于FPGA的音頻信號(hào)采集處理系統(tǒng)經(jīng)過(guò)了FPGA下載驗(yàn)證,正確配置了AK4550和SDRAM芯片,濾波器運(yùn)行正常,存儲(chǔ)和播放聲音效果良好,播放無(wú)失真。本設(shè)計(jì)實(shí)現(xiàn)了AK4450和SDRAM在FPGA上的應(yīng)用及FIR濾波器的算法,提出了一種非DSP或單片機(jī)應(yīng)用的做法,提高了系統(tǒng)運(yùn)行速度,節(jié)約了空間和成本。
[1]潘松、王國(guó)棟.VHDL實(shí)用教程.電子科技大學(xué)出版社,2001.7
[2]ALTERA SDR SDRAM Controller White Paper. http://www.altera.com,2002