王杰玉 杜 煒 潘紅兵
摘 要:24位立體聲音頻編解碼芯片WM8731因其高性能、低功耗等優(yōu)點在很多音頻產(chǎn)品中得到了廣泛應(yīng)用。介紹了其基于FPGA的接口電路的設(shè)計,包括芯片配置模塊與音頻數(shù)據(jù)接口模塊等,使得控制器只通過寄存器就可以方便地對其進(jìn)行操作,而不需要考慮其接口電路復(fù)雜的時鐘時序問題,從而有效地降低了利用此芯片的難度。整個設(shè)計以VHDL和Verilog HDL語言在Max+Plus Ⅱ里實現(xiàn),并進(jìn)行了驗證,結(jié)果表明能滿足使用者的要求且操作簡單。對其他編解碼芯片的接口設(shè)計也有一定的參考作用。
關(guān)鍵詞:WM8731;FPGA;接口設(shè)計;音頻編解碼芯片
中圖分類號:TN919文獻(xiàn)標(biāo)識碼:B
文章編號:1004-373X(2009)05-179-03
Interfaces Design of Audio Codec Based on FPGA
WANG Jieyu,DU Wei,PAN Hongbing
(Electronic Engineering College,Naval University of Engineering,Wuhan,430033,China)
Abstract:24 bit stereo audio Codec WM8731 has been widely applied in audio products because of its high quality and low power consumption.This paper introduces its interface design based on FPGA,including program registers and audio digital interface.Thus it can be controlled though registers only,ignoring its complicated clock timing requirements.The design is realized and verified in Max+Plus Ⅱ with VHDL and Verilog HDL,and results prove its practicality and convenience for designers.So designers can take use of it much easily,and gain some revelation as well when designing other interfaces.
Keywords:WM8731 FPGA;interface design;audio codec
1 概 述
WM8731是一款功能強大的低功耗立體聲24位音頻編解碼芯片,其高性能耳機驅(qū)動器、低功耗設(shè)計、可控采樣頻率、可選擇的濾波器使得WM8731芯片廣泛使用于便攜式MP3,CD,PDA的場合。其結(jié)構(gòu)框圖如圖1所示。
圖1 WM8731結(jié)構(gòu)框圖
WM8731包含2個線路輸入和1路麥克風(fēng)輸入并可以進(jìn)行音量調(diào)節(jié);內(nèi)置片上ADC(模擬數(shù)字轉(zhuǎn)換器)及可選擇的高通數(shù)字濾波器;采用高品質(zhì)過采樣率結(jié)構(gòu)的DAC(數(shù)字模擬轉(zhuǎn)換器);線路輸出和耳機輸出;內(nèi)置晶體振蕩器以及可配置的數(shù)字音頻接口和2或3線可選的微處理器控制接口等。 控制器可通過控制接口(Control Interface)對WM8731進(jìn)行配置,然后通過數(shù)字音頻接口(Digtal Audio Interface)讀寫數(shù)據(jù)音頻信號。本文設(shè)計了一種基于FPGA的驅(qū)動模塊,將WM8731的控制接口與數(shù)字音頻接口轉(zhuǎn)換為控制器通用的總線接口,使控制器可以像讀寫外部寄存器一樣對WM8731芯片進(jìn)行控制使用[1]。
2 WM8731芯片接口時序介紹
2.1 控制接口時序
WM8731的控制接口有4根引腳,分別為:MODE(控制接口選擇線)、CSB(片選或地址選擇線)、SDIN(數(shù)據(jù)輸入線)和SCLK(時鐘輸入線)。它具有2線和3線兩種模式。2線為MPU接口,3線為兼容SPI接口。對控制接口的配置選擇可通過設(shè)置MODE腳的狀態(tài)完成。選擇MODE為0時為2線模式,1時為3線模式。本文采用2線模式對WM8731進(jìn)行控制。其時序圖如圖2所示。
圖2 WM8731的2線控制模式
2.2 數(shù)字音頻接口時序
WM8731的數(shù)字音頻接口有5根引腳,分別為:BCLK(數(shù)字音頻位時鐘)、DACDAT(DAC數(shù)字音頻數(shù)據(jù)輸入)、DACLRC(DAC采樣左/右聲道信號)、ADCDAT(ADC數(shù)字音頻信號輸出)、ADCLRC(ADC采樣左/右聲道信號)。
數(shù)字音頻接口可以工作在主模式和從模式下。地址為0000111的寄存器的第6位設(shè)置數(shù)據(jù)的主/從模式:“1”為主模式,“0”為從模式。ADCDAT/DACDAT和ADCLRC/DACLRC與位時鐘BCLK同步,在每個BCLK的下降沿進(jìn)行一次傳輸。BCLK和ADCLRC/DACLRC在主模式時為輸出信號,從模式下為輸入信號。DACDAT始終為輸入信號,ADCDAT始終為輸出信號。
數(shù)字輸出支持4種音頻數(shù)據(jù)模式:右對齊、左對齊、I2S和DSP模式。通過對寄存器的不同配置,可以設(shè)置傳輸?shù)臄?shù)據(jù)格式。寄存器配置值如下:
寄存器地址0000111的1~0位設(shè)置音頻格式:“11”時為DSP格式,“10”為I2S格式,“01”為左對齊格式,“00”為右對齊格式。
3~2位設(shè)置字長:“11”時為32位,“10”為24位,“01”為20位,“00”為16位。
這四種音頻格式都是高位(MSB)在前,16~32位。但32位數(shù)據(jù)不支持右對齊模式。
本文采用主模式的左對齊數(shù)據(jù)格式,左對齊數(shù)據(jù)格式傳輸如圖3:左對齊格式時,MSB在BCLK的第一個上升沿有效,緊接著是一個ADCLRC或DACLRC傳輸[1]。
圖3 左對齊音頻格式
3 WM8731芯片驅(qū)動的FPGA設(shè)計
3.1 驅(qū)動器的總體設(shè)計方案
本文設(shè)計驅(qū)動器在使用時的框圖如圖4所示。雙口RAM和驅(qū)動器一同連接在控制器的數(shù)據(jù)總線和地址總線上,控制器只需提供少量的控制線即可完成對音頻編解碼芯片WM8731的控制及數(shù)據(jù)交換功能。
圖4 驅(qū)動器使用框圖
驅(qū)動器內(nèi)部結(jié)構(gòu)框圖如圖5所示??刂撇糠痔峁?qū)動器與控制器之間的接口(包含有數(shù)據(jù)總線信號、地址總線信號和控制信號),同時產(chǎn)生控制字轉(zhuǎn)換單元和數(shù)字音頻接口單元的控制信號;內(nèi)部寄存器緩存控制字和狀態(tài)字;控制字轉(zhuǎn)化單元負(fù)責(zé)將控制字串行發(fā)送給WM8731,同時效驗傳送信號;數(shù)據(jù)音頻接口單元完成WM8731與外部雙口RAM的串并轉(zhuǎn)換,實現(xiàn)對數(shù)字音頻信號的發(fā)送和接收功能。
圖5 驅(qū)動器整體設(shè)計框圖
驅(qū)動器采用統(tǒng)一時鐘同步信號,使用同步時鐘發(fā)送數(shù)據(jù),設(shè)定WM8731工作在主動模式,數(shù)字音頻數(shù)據(jù)字長為16位。
3.2 驅(qū)動器的電路設(shè)計
電路部分采用Max+Plus Ⅱ軟件進(jìn)行設(shè)計。頂層文件使用圖形化編程語言,子模塊采用VHDL和Verilog HDL語言進(jìn)行編程。
3.2.1 內(nèi)部寄存器
內(nèi)部寄存器包含控制字寄存器和狀態(tài)字寄存器。控制字寄存器由24個字節(jié)組成,負(fù)責(zé)存儲準(zhǔn)備發(fā)送給WM8731的控制字;狀態(tài)寄存器反映驅(qū)動器的工作狀態(tài),由8位寄存器組成,其格式如下:
b7b6b5b4b3b2b1b0
每位對應(yīng)意義如表1所示。
表1 狀態(tài)寄存器控制字的對應(yīng)定義
位數(shù)名稱定義
b0ACK控制字傳輸錯誤標(biāo)志位
b1END控制字傳輸完畢標(biāo)志位
b2GO控制字傳輸開始標(biāo)志位
b3START驅(qū)動器工作控制位
b4RESET驅(qū)動器復(fù)位標(biāo)志位
b5C1讀入數(shù)字音頻數(shù)據(jù)標(biāo)志位
b6C2輸出數(shù)字音頻數(shù)據(jù)標(biāo)志位
b7NC無定義
3.2.2 控制字轉(zhuǎn)換單元
當(dāng)START控制位置‘1時,將控制字寄存器中的數(shù)據(jù)串行發(fā)送給WM8731,當(dāng)傳輸出現(xiàn)錯誤時,將狀態(tài)寄存器中的ACK位置1。如圖6所示。
圖6 控制字轉(zhuǎn)換單元
3.2.3 數(shù)字音頻接口單元
當(dāng)讀入數(shù)字音頻標(biāo)志位C1為‘1,接收WM8731芯片傳來的數(shù)字音頻數(shù)據(jù)并將其存入外部雙口RAM中,當(dāng)輸出數(shù)字音頻數(shù)據(jù)標(biāo)志位C2為‘1時,將雙口RAM中的音頻數(shù)據(jù)發(fā)送給WM8731。如圖7所示。
圖7 數(shù)字音頻接口單元
3.3 系統(tǒng)仿真
下面給出控制器通過該驅(qū)動模塊對WM8731寫控制字的時序仿真如圖8所示。圖中各引腳定義如表2所示。
圖8 寫控制字時序仿真
表2 驅(qū)動模塊部分管腳定義
管腳名稱管腳定義
cp同步時鐘輸入
reset系統(tǒng)復(fù)位信號輸入
nwr寫信號輸入
nrd讀信號輸入
data[15..0]16位數(shù)據(jù)總線
cs片選信號線輸入
a0寄存器地址線輸入
sdatWM8731數(shù)據(jù)線
sclkWM8731時鐘線
4 結(jié) 語
利用FPGA對音頻編解碼芯片WM8731進(jìn)行接口電路的設(shè)計,實現(xiàn)了控制接口與數(shù)字音頻接口的統(tǒng)一控制,簡化了對音頻編解碼芯片WM8731的使用步驟,具有擴展性好、使用簡單方便、易于升級等優(yōu)點,對其他芯片的接口設(shè)計也有一定的參考意義。
參考文獻(xiàn)
[1]Wolfson Microelectronics.WM8731/WM8731L數(shù)據(jù)手冊[Z].2004.
[2]張志剛.FPGA與SOPC設(shè)計教程——DE2實踐[M].西安:西安電子科技大學(xué)出版社,2007.
[3]潘松,黃繼業(yè).EDA技術(shù)實用教程[M].北京:科學(xué)出版社,2007.
[4]褚振勇,翁木云.FPGA設(shè)計及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2002.
[5]王鈿,卓興旺.Verilog HDL的數(shù)字系統(tǒng)應(yīng)用設(shè)計[M].北京:國防工業(yè)出版社,2007.
[6]李洪偉,袁斯華.基于Quartus Ⅱ的FPGA/CPLD設(shè)計[M].北京:電子工業(yè)出版社,2006.
[7]李石亮,楊俊安,葉春逢.基于AD7656的多路并行同步音頻數(shù)據(jù)采集系統(tǒng)設(shè)計與實現(xiàn). 現(xiàn)代電子技術(shù),2008,31(10):167-170.
作者簡介 王杰玉 女,1984年出生,河南南陽人,工學(xué)碩士,在讀研究生。主要研究方向為嵌入式系統(tǒng)設(shè)計與開發(fā)。
杜 煒 男,1983年出生,湖北荊州人,工學(xué)碩士,在讀研究生。主要研究方向為FPGA測試。
潘紅兵 男,1969年出生,海軍工程大學(xué)副教授。