基于FPGA的以太網(wǎng)音頻廣播系統,軟硬件協(xié)同
1、課題背景:
課題來(lái)源:傳統的廣播系統從傳送音頻信號到廣播點(diǎn),都須鋪設專(zhuān)門(mén)的線(xiàn)路且傳送的事模擬音頻信號,模擬音頻信號抗干擾能力弱,長(cháng)距離的信號傳輸勢必造成信號的衰減,很難保證聲音質(zhì)量。同時(shí)為了對廣播的方式進(jìn)行控制,控制信號必須通過(guò)另外的控制線(xiàn)來(lái)傳送,布線(xiàn)復雜,成本高,施工及維修困難。采用互聯(lián)網(wǎng)技術(shù)和音頻流技術(shù)實(shí)現在以太網(wǎng)上以數字化方式傳輸多路音頻信號,使廣播點(diǎn)可以連續、實(shí)時(shí)地收聽(tīng)高品質(zhì)聲音,實(shí)現零布線(xiàn)設計。以太網(wǎng)數字音頻廣播系統定位于公用廣播系統,主要應用于車(chē)站、機場(chǎng)、碼頭等廣場(chǎng)和學(xué)校、大型商場(chǎng)等場(chǎng)合的廣播。主要采用以太網(wǎng)絡(luò )技術(shù),將音頻信號以TCP/IP協(xié)議形式在以太網(wǎng)上進(jìn)行傳送和接收,解決了傳統廣播系統存在的音質(zhì)不佳、易受干擾、維護管理復雜、互動(dòng)性能差等問(wèn)題。
需求分析:以太網(wǎng)數字音頻廣播系統可廣泛應用于車(chē)站、機場(chǎng)、學(xué)校、大廈等場(chǎng)合,具有低失真度、傳輸距離遠、高可靠性、易于安裝布線(xiàn)等優(yōu)點(diǎn),可實(shí)現實(shí)時(shí)廣播、自由點(diǎn)播、多路分區播音,具有廣闊的應用前景。以太網(wǎng)作為一種比較成熟的網(wǎng)絡(luò )已經(jīng)廣泛應用于各個(gè)領(lǐng)域,其TCP/IP協(xié)議也成為事實(shí)上的標準網(wǎng)絡(luò )協(xié)議。傳統以PC機為中心的互聯(lián)網(wǎng)應用現已開(kāi)始轉向以嵌入式為中心。利用FPGA來(lái)實(shí)現嵌入式系統設計,可以克服定制電路的不足,系統設計更加靈活,易于依不同的需要進(jìn)行修改。引入軟處理器和嵌入式操作系統,并結合使用LwIP協(xié)議棧,能夠降低系統平臺的設計復雜度,可縮短開(kāi)發(fā)周期,提高系統的穩定性和可靠性,軟硬件系部分可分離的設計架構,使得對系統進(jìn)行修改和重構非常方便。
國內外研究現狀:以太網(wǎng)數字音頻廣播系統定位于公用廣播系統,主要應用于車(chē)站、機場(chǎng)、碼頭等廣場(chǎng)和大廈等場(chǎng)合的廣播。主要特點(diǎn)采用當今世界最廣泛使用的以太網(wǎng)絡(luò )技術(shù),將音頻信號以TCP/IP協(xié)議形式在以太網(wǎng)上進(jìn)行傳送和接收,徹底解決了傳統廣播系統存在的音質(zhì)不佳容易受到干擾,維護管理復雜,互動(dòng)性能差等問(wèn)題?,F有的廣播系統可采用多路定向尋址等技術(shù)實(shí)現對廣播節目播出、接收的智能化管理,安裝在不同區域的廣播終端可以實(shí)時(shí)接收廣播數據,突破了傳統廣播系統只能對全部區域進(jìn)行公共廣播的局限,并且廣播終端可以是移動(dòng)的(在局域網(wǎng)范圍內),并涵蓋了傳統廣播系統的所有功能,包括音樂(lè )播放、實(shí)時(shí)講話(huà)、播送通知和轉播電臺節目等。以太網(wǎng)廣播系統具有良好的可靠性、穩定性、低失真度、易于安裝布線(xiàn)等優(yōu)點(diǎn),有著(zhù)廣闊的發(fā)展及應用前景,目前已廣泛應用于校園廣播、大型商場(chǎng)及公司內部廣播。以太網(wǎng)數字音頻廣播系統可實(shí)現的功能有:多路分區播音、自由點(diǎn)播、實(shí)時(shí)插播、移動(dòng)播音,并可實(shí)現遠程管理及監控。
2、功能描述:
功能:本系統將實(shí)時(shí)錄制的音頻文件利用以太網(wǎng),以UDP傳輸方式實(shí)現實(shí)時(shí)的信號的發(fā)送、接收與播放。
- 實(shí)況音頻流服務(wù)器:完成模擬語(yǔ)音信號的采集,將模擬信號轉換為數字信號,通過(guò)以太網(wǎng)上,發(fā)送到終端進(jìn)行接收和播放,滿(mǎn)足用戶(hù)播放實(shí)時(shí)聲音的需求;
- 基于FPGA的廣播終端:實(shí)時(shí)接收以太網(wǎng)傳送的數字音頻信號,存儲并轉發(fā)至音頻D/A轉換器,將所接收到的數字信號解碼轉換成模擬信號,并輸出到音響設備進(jìn)行播放。
- 擴展功能:實(shí)現多個(gè)廣播終端的同時(shí)工作;廣播先前已存儲的音頻文件數據。
技術(shù)指標:實(shí)時(shí)傳輸并播放語(yǔ)音信號,可用于遠程管理,具有低失真度,高可靠性的特征。
3、總體設計:
以太網(wǎng)數字音頻廣播系統分為兩個(gè)部分:音頻數據采集發(fā)送端和音頻數據接收播放端,通過(guò)以太網(wǎng)發(fā)送實(shí)時(shí)語(yǔ)音信號實(shí)現遠端實(shí)時(shí)接收和播放功能。
系統硬件結構框架:
圖1以太網(wǎng)音頻廣播系統框圖
數據流程:
圖2音頻數據采集與發(fā)送模塊數據流程圖
圖3音頻數據接收與播放模塊流程圖
各模塊功能:
①音頻數據采集與發(fā)送模塊:通過(guò)編程實(shí)現語(yǔ)音信號的采集、存儲,根據接收端的IP地址,將語(yǔ)音信號壓縮成廣播包以UDP傳輸方式發(fā)送出去。
②音頻數據接收與播放模塊:由Spartan3E FPGA開(kāi)發(fā)板接收以太網(wǎng)傳來(lái)的IP包,進(jìn)行存儲,轉發(fā)到音頻D/A轉換器進(jìn)行解碼,送交音響設備播放。
4、方案論證:
設計思想:采用FGPA模塊接收以太網(wǎng)傳來(lái)的數字語(yǔ)音信號,并進(jìn)行存儲,再通過(guò)音頻D/A轉換器將數字信號轉換為模擬信號在音響設備上進(jìn)行播放。分為兩個(gè)部分實(shí)現:語(yǔ)音信號采集與發(fā)送部分和信號接收與播放部分。①語(yǔ)音信號采集模塊(編程實(shí)現)在PC機上進(jìn)行,然后采用UDP傳輸方式以IP廣播包方式通過(guò)以太網(wǎng)發(fā)送出去。②接收端是在FPGA開(kāi)發(fā)板上實(shí)現語(yǔ)音數據包的接收,并將數據處理后送給音頻解碼芯片進(jìn)行解碼,轉換成模擬信號進(jìn)行播放。
方案論證:本系統采用服務(wù)器端和廣播終端的架構,由音頻流服務(wù)器采集、處理語(yǔ)音信號,通過(guò)以太網(wǎng)進(jìn)行傳輸,然后由Spartan 3E作為廣播終端來(lái)接收以太網(wǎng)傳輸的數據,并進(jìn)行D/A轉換處理后輸送到播放設備。
服務(wù)器端的設計:服務(wù)器端在PC機上實(shí)現,主要完成語(yǔ)音數據的采集、存儲和發(fā)送。其中,語(yǔ)音數據的采集和存儲采用WAVE音頻函數來(lái)實(shí)現。使用WAVE低級音頻函數,可直接與音頻驅動(dòng)程序交互,通過(guò)窗口消息或回調函數來(lái)管理音頻數據塊的錄入和存儲,并提供了一個(gè)設備無(wú)關(guān)接口。在使用音頻設備之前,必須打開(kāi)設備驅動(dòng)程序,確定系統音頻設備的能力,用完之后必須關(guān)閉音頻設備。具體流程如下:
①查詢(xún)設備數目。使用waveInGetNumDevs函數來(lái)獲取波形輸入設備的個(gè)數。只有確定設備存在,才能打開(kāi)、使用設備。
②打開(kāi)波形輸入設備。使用waveInOpen函數,該函數打開(kāi)與指定設備ID相關(guān)聯(lián)的設備,并以給出指定內存句柄的方法放回打開(kāi)波形設備的句柄。需要在waveInOpen中指定的一個(gè)回調函數或者線(xiàn)程,其作用是在一個(gè)數據緩沖區被錄滿(mǎn)后被調用,以對這些數據進(jìn)行處理,和其他一些相關(guān)的操作。
③準備音頻數據塊。在音頻數據錄入之前,必須準備好音頻數據塊。將數據塊傳送給設備驅動(dòng)程序就可以開(kāi)始錄音了。使用waveInPerpareHeader函數為輸入緩沖區準備頭部,使用waveInAddBuffer函數添加一個(gè)輸入用的數據緩沖區。在用完數據塊后,必須用waveInUnprepareHeader函數來(lái)清除對音頻數據塊的準備。
④開(kāi)始錄音。使用waveInStart函數。
⑤停止錄音,關(guān)閉設備。調用waveInReset和waveInClose函數。結束錄音時(shí),在waveInClose之前先調用waveInReset,以清除尚在等待錄音的緩沖區。
錄音過(guò)程中,若緩沖區已滿(mǎn),但錄音還在繼續,為防止語(yǔ)音數據丟失,就需要再加入一個(gè)緩沖區進(jìn)去??紤]到添加緩沖區的處理是有時(shí)間延遲的,而音頻對時(shí)間很敏感,所以要預先設置好至少兩個(gè)數據緩沖區。當一個(gè)緩沖區滿(mǎn)時(shí),就調用另外一個(gè),即可保證所錄得的音頻數據不會(huì )有斷開(kāi)的間隔。錄制波形音頻時(shí)如果緩沖區已滿(mǎn),系統將發(fā)送MM_WIM_DATA消息給應用程序,程序接收到這個(gè)消息后,就可以從消息帶回的參數中得到緩沖區的指針,從而讀出緩沖區的數據,或對數據進(jìn)行處理,并且該緩沖區的數據讀完后要用waveInAddBuffer函數將緩沖區重新送入設備,循環(huán)利用。在本設計中采用兩個(gè)緩沖區來(lái)存放語(yǔ)音數據。
音頻數據的發(fā)送:數據發(fā)送采用MFC的CSocket類(lèi)來(lái)實(shí)現。CSocket類(lèi)是由CAsyncSocket類(lèi)繼承而來(lái),與CSocketFile類(lèi)和CArchive類(lèi)一起工作來(lái)發(fā)送和接收數據。軟件實(shí)現:當數據緩沖區滿(mǎn)時(shí),需要將已采集到的語(yǔ)音數據通過(guò)以太網(wǎng)發(fā)送出去,這就要用到Socket網(wǎng)絡(luò )傳輸。利用CSocket類(lèi)創(chuàng )建一個(gè)套接字,然后將錄音緩沖區中采集到的語(yǔ)音數據依次封裝成IP包進(jìn)行發(fā)送。語(yǔ)音數據發(fā)送流程圖如圖4所示:
圖4 數據發(fā)送流程圖
要實(shí)現語(yǔ)音信號的實(shí)時(shí)播放,必須對語(yǔ)音信號進(jìn)行實(shí)時(shí)傳輸,所以在以太網(wǎng)上傳輸數據采用UDP傳輸方式。雖然TCP提供一種面向連接的、可靠的字節流服務(wù),可以實(shí)現數據的可靠傳輸與出錯重傳,但是這也導致了TCP協(xié)議對資源的占用更多。TCP主要適用于對數據的完整性要求很高的網(wǎng)絡(luò )傳輸的應用。UDP不一定提供可靠的數據傳輸,它只是把應用程序傳給IP層的數據報發(fā)送出去,并不保證它們能到達目的地。由于UDP在傳輸數據報之前不用在客戶(hù)和服務(wù)器之間建立連接,沒(méi)有超時(shí)重發(fā)機制,所以傳輸速度很快。當某個(gè)程序的目標是盡快地傳輸盡可能多的信息,強調傳輸性能而不是傳輸的完整性時(shí),如音頻和多媒體應用,UDP是最好的選擇。
錄音緩沖區的大小為1024個(gè)字節,這樣才能避免語(yǔ)音信號丟失,但是在系統終端對語(yǔ)音數據包進(jìn)行處理的時(shí)候,如果數據包過(guò)大,則產(chǎn)生嚴重的噪音,因此系統終端要求接收到的語(yǔ)音數據IP包不能過(guò)大,設計中終端處理IP包的大小為128個(gè)字節,這樣當服務(wù)器端錄音緩沖區滿(mǎn)時(shí),需要對數據進(jìn)行分割,封裝成IP數據包,然后再發(fā)送。這里要采用廣播地址。在局域網(wǎng)內實(shí)現廣播,只需將IP地址中主機部分設為全1,本設計中IP廣播地址設為192.168.1.255。
廣播系統可以有多個(gè)廣播終端,既可實(shí)現全區域的廣播,還可以實(shí)現局域廣播,即對指定的終端進(jìn)行廣播。要實(shí)現對指定的終端的廣播,服務(wù)器端必須知道各個(gè)終端的IP地址,然后才能實(shí)施對應的廣播??紤]到終端數量不多而且是在相對固定的局域網(wǎng)中,采用靜態(tài)IP地址分配,其特點(diǎn)是IP地址對每一臺計算機都是固定的??梢詫⒏鱾€(gè)終端的IP地址寫(xiě)入一個(gè)配置文檔,如:“IPADDR.txt”。服務(wù)器首先讀取配置文檔中的IP地址,將終端IP地址與服務(wù)器端的終端號進(jìn)行綁定,然后每次選定廣播終端時(shí)也得到了對應終端的IP地址,即可實(shí)現區域廣播了。另一方面,也必須使終端能夠判斷出所接收到的IP包是不是發(fā)給自己的。是則存儲并轉發(fā)給音頻解碼器;不是則丟棄??梢栽贗P包頭進(jìn)行設置,廣播終端根據IP數據包包頭來(lái)判斷數據是否發(fā)給自己。IP數據包采用廣播包的形式進(jìn)行數據傳輸。
可以將廣播的內容保存下來(lái)以便在以后可以使用。本設計對每次廣播的內容進(jìn)行了存儲,存儲文件設置為Record.wav。每次錄音緩沖區滿(mǎn)時(shí),即將IP廣播包發(fā)送出去,同時(shí)對其進(jìn)行存儲,在文件末尾將數據寫(xiě)入文件,并改變文件的長(cháng)度。
廣播終端的設計:要實(shí)現FPGA與以太網(wǎng)的通信,可以將FPGA終端設計為一個(gè)嵌入式系統,即采用基于FPGA的嵌入式系統實(shí)現以太網(wǎng)的互聯(lián)??梢岳肵ilinx的MicroBlaze微處理器軟核和相應的外設,通過(guò)Xilinx EDK搭建系統所需的軟硬件平臺,完成嵌入式系統的設計。FPGA控制著(zhù)以太網(wǎng)物理層的操作,內置一個(gè)符合MII標準的以太網(wǎng)控制器MAC,FPGA通過(guò)MII連接到開(kāi)發(fā)板上的LAN83C185 Ethernet PHY,以便和以太網(wǎng)進(jìn)行通信,接收以太網(wǎng)發(fā)送給本終端的IP數據包,進(jìn)行存儲,并轉發(fā)給音頻解碼芯片進(jìn)行播放。
硬件部分:
硬件電路結構分為兩個(gè)部分,基于Spartan 3E開(kāi)發(fā)板的音頻數據接收模塊和音頻解碼模塊。
Xilinx Spartan 3E開(kāi)發(fā)板上的XC3S500E FPGA作為控制芯片,在EDK中配置MicroBlaze微處理軟核作為CPU,配置FPGA內置Ethernet MAC IP核(MAC是EDK開(kāi)發(fā)平臺的一部分),外部存儲器采用DDR SDRAM,采用Xilkernel嵌入式操作系統和LwIP協(xié)議棧,構建一個(gè)完整的嵌入式系統實(shí)現以太網(wǎng)互聯(lián)。
硬件結構圖如圖5所示:
圖5 硬件結構圖
MicroBlaze微處理器軟核是可嵌入在FPGA中的RISC處理器軟核,采用哈佛結構的32位指令和數據總線(xiàn),具有運行速度快、占用資源少、可配置性強等優(yōu)點(diǎn),支持CoreConnect總線(xiàn),和其他外設一起可以完成可編程片上系統的設計。特征:32個(gè)32位通用寄存器和2個(gè)專(zhuān)用寄存器;32位指令系統,支持3個(gè)操作數和2種尋址方式;分離的32位指令與數據總線(xiàn),符合IBM的OPB總線(xiàn)規范;通過(guò)本地存儲器總線(xiàn)(LMB)直接訪(fǎng)問(wèn)片內塊存儲器;具有高速的指令和數據緩存(cache),三級流水線(xiàn)結構;具有硬件調試模塊;帶8個(gè)輸入輸出快速鏈路接口。
EDK開(kāi)發(fā)流程:
EDK:所有的系統設計包括后面的應用程序開(kāi)發(fā)設計均在嵌入式開(kāi)發(fā)套件軟件EDK內完成。EDK(Embedded Development Kit)是針對FPGA內部32位嵌入式處理器開(kāi)發(fā)而推出的開(kāi)發(fā)套件,EDK工具包中集成了硬件平臺產(chǎn)生器、軟件平臺產(chǎn)生器、仿真模型生成器、軟件編譯器和軟件調試等工具,利用其集成開(kāi)發(fā)環(huán)境XPS(Xilinx Platform Studio)可以很方便、快速地完成嵌入式系統開(kāi)發(fā)的整個(gè)流程。EDK以IP核的形式提供LMB、OPB總線(xiàn)接口、外部存儲控制器、SDRAM控制器、UART中斷控制器、定時(shí)器及其他一些外圍設備接口等資源,利用這些資源可以構建一個(gè)完善的嵌入式處理器系統。這些IP核都有相應的設備驅動(dòng)和應用接口,使用者只需利用相應的函數庫,就可以編寫(xiě)自己的應用軟件和算法程序。
首先完成系統硬件平臺的搭建和相應的驅動(dòng)配置。在EDK的XPS中先使用基本的系統生成向導BSB,自動(dòng)生成MicroBlaze系統的基本構架,設置處理器時(shí)鐘頻率為50MHz,總線(xiàn)時(shí)鐘頻率為50MHz,設置片上讀寫(xiě)調試模塊為調試接口。生成結束時(shí)XPS可以自動(dòng)地生成對硬件進(jìn)行例化的微處理器硬件規范文件MHS和描述軟件系統結構的微處理器軟件規范文件MSS以及一些相關(guān)的文件,對這兩個(gè)文件進(jìn)行修改,以便完成對系統的優(yōu)化。生成的系統經(jīng)過(guò)綜合、布局布線(xiàn)無(wú)誤后生成bit文件下載到目標開(kāi)發(fā)板上。
系統軟件平臺:
在硬件系統建立后,利用XPS的集成工具,完成網(wǎng)標的生成核軟件的配置,存儲器地址映射默認由系統自動(dòng)生成,自動(dòng)分配地址。
為了能夠更好地管理系統資源,選擇Xilinx 精簡(jiǎn)嵌入式操作系統Xilkernel,它是一種可定制的簡(jiǎn)單高效系統,能夠與用EDK形成的硬件系統緊密結合,并支持可移植操作系統界面POSIX開(kāi)放結構。Xilkernel系統的設置可以在開(kāi)發(fā)環(huán)境EDK中手動(dòng)設置,需要配置調度原則為SCHED_RR(simple round-robin scheduling),并設置一個(gè)靜態(tài)線(xiàn)程用于初始化要使用的LwIP協(xié)議棧。Xilkernel操作系統通過(guò)移植LwIP協(xié)議棧就可以實(shí)現基于Socket的網(wǎng)絡(luò )通信。LwIP協(xié)議棧支持服務(wù)器模式和客戶(hù)機模式,提供RAW和Socket兩種API,是目前使用最為廣泛的TCP/IP協(xié)議棧。本設計中采用Socket API模式,利用Libgen工具對LwIP庫進(jìn)行鏈接和編譯。
在Xilkernel中設置一個(gè)靜態(tài)線(xiàn)程serverThread來(lái)初始化LwIP協(xié)議棧,即可以使用協(xié)議棧提供的功能函數。調用LwIP的線(xiàn)程生成函數sys_thread_new()生成并啟動(dòng)一個(gè)線(xiàn)程。在這個(gè)線(xiàn)程中設置開(kāi)發(fā)板硬件的MAC地址、網(wǎng)關(guān)、IP地址和子網(wǎng)掩碼等參數。分配內存空間開(kāi)發(fā)板的網(wǎng)絡(luò )接口,再將MAC地址、網(wǎng)關(guān)、IP地址等信息添加到內存空間,初始化網(wǎng)絡(luò )接口。
在設置好系統的軟件平臺后就可以編寫(xiě)各種關(guān)于網(wǎng)絡(luò )傳輸控制的應用程序了。使用標準C語(yǔ)言進(jìn)行應用程序開(kāi)發(fā),編寫(xiě)相應的算法軟件,將編寫(xiě)的程序代碼利用mb-gcc編譯工具,根據系統軟件環(huán)境,生成.ELF文件,完成系統功能的實(shí)現,通過(guò)JTAG接口連到目標開(kāi)發(fā)板上,將軟件程序下載到系統中進(jìn)行調試。
程序設計思路:
終端同樣需要Socket編程,以接收從以太網(wǎng)傳送來(lái)的音頻數據。為了實(shí)現數據的順序存儲與轉發(fā),定義一個(gè)循環(huán)隊列來(lái)存儲接收到的數據。
struct Queue
{ int front; //隊首
int rear; //隊尾
int count;
char DATA[QueueSize][SIZE];
};
初始化一個(gè)Socket,將它與IP地址和端口號綁定,然后開(kāi)始監聽(tīng)網(wǎng)絡(luò ),一旦監聽(tīng)到網(wǎng)絡(luò )上有數據到來(lái),就生成一個(gè)線(xiàn)程去處理。先定義一個(gè)結構體struct CSTRING,包含目的終端的IP地址,終端通過(guò)判斷其成員變量,與自己的IP地址進(jìn)行比較。若有成員變量與自己的IP地址相同,則存儲數據包中數據到循環(huán)隊列中。還需要定義一個(gè)接收數據結構體struct RECVBUFFER,來(lái)存放所接收到的音頻數據,并且struct CSTRING IP作為它的一個(gè)成員用于判斷目的IP包地址。
struct RECVBUFFER
{ INT32 count;
struct CSTRING IP; //用來(lái)判斷IP包是不是發(fā)給自己的
INT8 recvbuffer[SIZE]; //接收數據緩沖區
}RecvBuffer; //接收數據的結構體
Socket接收函數接收數據到一個(gè)數據緩沖區,然后對數據包進(jìn)行判斷,根據IP數據包頭判斷該包是不是發(fā)給自己的,若是,將數據放入循環(huán)隊列以待轉發(fā),否則丟棄。在以太網(wǎng)范圍內實(shí)現音頻廣播,終端以太網(wǎng)控制器IP地址要和服務(wù)器處在同一個(gè)網(wǎng)段內,設置本地IP地址和端口號,并綁定到服務(wù)器地址。
廣播終端的實(shí)現還需要連接一個(gè)音頻D/A轉換器,將開(kāi)發(fā)板上輸出的數字音頻信號轉換為模擬音頻信號。在本設計中采用VS1003音頻解碼器。VS1003是一個(gè)單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器,包含一個(gè)高性能、自主產(chǎn)權的低功耗DSP處理器核VS_DSP,工作數據存儲器,串行的控制和數據接口,4個(gè)常規用途的I/O口,一個(gè)UART,一個(gè)高品質(zhì)可變采樣率的ADC和立體聲DAC,還有一個(gè)耳機放大器和地線(xiàn)緩沖器。VS1003通過(guò)一個(gè)串行口來(lái)接收輸入的比特流 。數據流程:首先音頻數據從SDI接收并解碼,若其SCI_AIADDR非零則應用代碼從寄存器所指向的地址開(kāi)始執行;然后數據流是否經(jīng)過(guò)低音/高音增強器,取決于SCI_BASS寄存器;之后數據流向音量控制單元,同時(shí)拷貝數據進(jìn)音頻FIFO,鎖存住數據,通過(guò)音頻中斷將數據送進(jìn)采樣率變換器和DAC;采樣率變換器將所有不同的采樣率變?yōu)閄TALI/2或128次最高可用采樣率;過(guò)采樣的輸出被片上的模擬濾波器進(jìn)行低通濾波;濾波后的信號前往耳機放大器。
VS1003通過(guò)一個(gè)串行接口來(lái)接收輸入的比特流,所以要實(shí)現VS1003與FPGA的互連,還需要在開(kāi)發(fā)板上模擬實(shí)現SPI總線(xiàn)接口。SPI——串行外設接口總線(xiàn)系統是一種同步串行外設接口,允許MCU與各種外設以串行方式進(jìn)行通信、數據交換。在內部硬件實(shí)際上是兩個(gè)簡(jiǎn)單的移位寄存器,傳輸的數據為8位。一般使用4條線(xiàn):串行時(shí)鐘線(xiàn)(SCK)、主機輸入從機輸出數據線(xiàn)(MISO)、主機輸出從機輸入數據線(xiàn)(MOSI)和低電平有效的從機選擇線(xiàn)/SS,即可實(shí)現與具有SPI總線(xiàn)接口功能的各種I/O器件進(jìn)行通信,而擴展并行總線(xiàn)則需要8根數據線(xiàn)、8~16位地址線(xiàn)、2~3位控制線(xiàn),因此采用SPI總線(xiàn)接口可以簡(jiǎn)化電路設計,提高設計的可靠性。在本設計中,從器件是vs1003音頻解碼器,在主器件產(chǎn)生的從器件時(shí)能和移位脈沖作用下,才能接收主機傳送的數據,其數據傳輸格式是高位(MSB)在前,低位(LSB)在后。
FGPA為主控芯片,vs1003為從芯片,選擇開(kāi)發(fā)板上與FPGA連接的Hirose FX2擴展連接器模擬實(shí)現SPI接口,實(shí)際上是對SPI時(shí)序的模擬。FPGA的I/O口與Hirose FX2擴展連接器相連,雙向I/O口都可以驅動(dòng)或接收信號。選擇FX2連接器上的FX2_CLKOUT模擬實(shí)現SPI接口的時(shí)鐘輸出線(xiàn),一個(gè)I/O(如FX2_IO1)口模擬實(shí)現MOSI數據線(xiàn),一個(gè)I/O(如FX2_IO2)口模擬實(shí)現/SS選擇線(xiàn)。SPI數據傳輸模式采用模式0(CPOL=0,CPHA=0)。數據傳輸流程:首先主控芯片FPGA要使能相應的/SS信號(FX2_IO2,直到數據發(fā)送完畢),通知從芯片即VS1003數據傳輸要開(kāi)始了;主控芯片產(chǎn)生SPI時(shí)鐘脈沖,將數據從每個(gè)時(shí)鐘下降沿發(fā)送出去,每次發(fā)送1bit,從高位開(kāi)始發(fā)送;待數據發(fā)送完畢,主控芯片復位/SS信號,SPI傳輸結束。
系統設計中的難點(diǎn)與重點(diǎn):
(1)音頻信號的采集;
(2)IP廣播包的UDP傳輸;
(3)廣播終端對音頻信號的接收;
(4)FPGA控制芯片與VS1003解碼芯片之間的數據傳輸。
5、項目預期成果:
實(shí)現音頻數據的以太網(wǎng)上實(shí)時(shí)UDP傳輸,同步播放,支持多個(gè)廣播終端同時(shí)工作,實(shí)現網(wǎng)絡(luò )廣播功能。
評論