【摘要】本文介紹了一種基于FPGA與USB2.0的多路音頻信號采集系統(tǒng)。采用XILINX公司的FPGA為控制芯片,以USB2.0為接口實現(xiàn)FPGA和PC機(jī)之間的高速數(shù)據(jù)傳輸。通過軟硬件技術(shù)的結(jié)合實現(xiàn)了對多路音頻模擬信號的采集。并介紹了固件(fireware)和USB設(shè)備驅(qū)動軟件的開發(fā)。
【關(guān)鍵詞】USB;FPGA;音頻信號采集
1概述
本文設(shè)計了一種多路音頻信號采集系統(tǒng),該系統(tǒng)單位時間內(nèi)采集的海量數(shù)據(jù)需要在規(guī)定時間內(nèi)快速傳回PC,采用通用串行總線USB2.0接口,它是一種標(biāo)準(zhǔn)的總線接口,有較高的傳輸速率(USB2.0總線規(guī)范理論速率480Mbit/s),并且具有即插即用和易擴(kuò)展的特性。
2硬件設(shè)計
2.1多路音頻信號采集系統(tǒng)結(jié)構(gòu)
多路音頻信號采集系統(tǒng)框圖如圖1所示。系統(tǒng)主要由A/D轉(zhuǎn)換模塊、FPGA驅(qū)動和控制模塊及USB2.0接口傳輸模塊3部分組成。本文擬為16路的模擬音頻信號采集方案,因所采用的音頻AD芯片PCM3000可對兩路模擬音頻信號進(jìn)行模/數(shù)轉(zhuǎn)換,故需采用8片PCM3000將16路模擬音頻數(shù)字化后得到8路速率為2.304Mbit/s的串行數(shù)據(jù)輸出送至FPGA內(nèi)。在FPGA內(nèi)經(jīng)數(shù)字復(fù)接模塊按8:1復(fù)接成1路18.432Mbit/s高速數(shù)字信號后緩存在XC3S400內(nèi)部配置的FIFO中。然后判斷當(dāng)FIFO中的數(shù)據(jù)達(dá)到512 B時,向USB2.0控制器中同步寫入數(shù)據(jù)。由于USB設(shè)置為AUTO-IN模式,可以直接把FIFO中數(shù)據(jù)自動傳輸?shù)絇C上位機(jī)硬盤文件中,因而可完成音頻信號的采集、傳輸及存儲。
2.2USB2.0芯片結(jié)構(gòu)及應(yīng)用
USB2.0接口芯片選用CYPRESS公司的EZ-USB FX2(CY7C68013 56腳SOPP)。FX2定義了7個端點。其中EP0IN&OUT、EPlIN、EPlOUT是64byte的端點緩存,只能由FX2的固件訪問,支持塊、中斷和同步傳輸;EP2、EP4、EP6和EP8是高帶寬、大緩沖端點緩沖區(qū),無需固件干涉即可同片外設(shè)備進(jìn)行高帶寬數(shù)據(jù)傳輸,在高速模式下,EP4、EP8都是512字節(jié)的雙緩存,而EP2、EP6可以由固件來配置成512或1024字節(jié)的多重緩存。
本系統(tǒng)我們配置端點EP2、EP6為slave FIFO模
USB模塊主要完成兩種功能:(1)通過EZ-USB FX2實現(xiàn)把數(shù)據(jù)傳輸?shù)絇C機(jī)。此時FIFO中的數(shù)據(jù)先寫入EP6。(2)接收來自PC機(jī)的命令數(shù)據(jù)。此時命令數(shù)據(jù)從PC機(jī)通過USB接口傳輸?shù)紼P2,然后讀取EP2的數(shù)據(jù)到FIFO控制單元的命令分析器中。
USB接口控制單元狀態(tài)機(jī)工作如下:
(1)當(dāng)FPGA上電或者復(fù)位后,狀態(tài)機(jī)進(jìn)入空閑狀態(tài)(IDEL)。
(2)在空閑狀態(tài)下,當(dāng)EP2不空(EP2_EMPTY=0)時,進(jìn)入讀命令狀態(tài)(READ_COMMAND),此時令EP_ADDR[1:0]=00,F(xiàn)D[15:0]的傳輸方向由EP2指向FPGA,控制單元從EP2中讀出PC機(jī)傳來的控制命令。
(3)隨后進(jìn)入分析命令狀態(tài)(ANALYSE_COMMAND),命令包括設(shè)置時鐘、采樣率、開始或停止A/D轉(zhuǎn)換等;
(4)優(yōu)先處理PC機(jī)通過EP2傳來的命令,因此優(yōu)先查看EP2的空狀態(tài)。在分析命令狀態(tài)下,當(dāng)EP2為空(EP2_FF=1)且EP6不滿(EP6_ FF=0)時,進(jìn)入寫數(shù)據(jù)狀態(tài)(WRITE_DATA)。
(5)隨后進(jìn)入傳輸數(shù)據(jù)狀態(tài)(TRANS_DATA)。如果采集命令一直維持有效(START=’1’)且EP6不滿(EP6_FF=‘0’),則又回到寫數(shù)據(jù)狀態(tài)。如果采集命令無效(START=’0’)則回到IDLE狀態(tài)。重新枚舉、端點配置、控制和監(jiān)測USB的活動,根據(jù)PC主機(jī)的命令與外圍電路進(jìn)行數(shù)據(jù)交換等。Cypress公司為用戶提供了一個固件程序框架,是通用性強(qiáng)的模塊化程序。在框架的基礎(chǔ)上,用戶只需要編寫Function. C文件即可完成USB功能開發(fā)。主要包括:Slave FIFO模式的初始化和用戶自定義請求。
驅(qū)動程序開發(fā)系統(tǒng)包括兩個USB驅(qū)動程序:一個驅(qū)動專用于下載芯片的固件程序ccdloader.sys,另一個通用驅(qū)動程序ccdusb.sys用來實現(xiàn)USB設(shè)備與應(yīng)用程序的通信和控制。芯片固件程序在主機(jī)上,當(dāng)系統(tǒng)上電時,前者將其下載到芯片的RAM中,并由增強(qiáng)型8051微處理器執(zhí)行。當(dāng)固件下載完成后,模擬一次斷開重新連接,此時下載的固件響應(yīng)USB枚舉,并加載USB設(shè)備通用驅(qū)動程序。USB的驅(qū)動程序是WDM類型,可以使用Windows DDK,WinDriver,DriverStudio開發(fā)。
應(yīng)用程序通過USB驅(qū)動程序與USB接口進(jìn)行通信。本設(shè)計使用LabVIEW設(shè)計應(yīng)用程序。LabVIEW為用戶提供了簡單、直觀、易學(xué)的圖形編程法,相比于傳統(tǒng)的編程語言,LabVIEW能大量地節(jié)省開發(fā)時間。用戶通過LabVIEW應(yīng)用程序可以進(jìn)行對數(shù)據(jù)采集系統(tǒng)的控制,而且采集到的數(shù)據(jù)在控制界面中實時顯示。
本文介紹了一種較為通用的基于FPGA與USB2.0接口的多路音頻信號采集系統(tǒng)的設(shè)計方法,通過FPGA軟核在數(shù)據(jù)采集系統(tǒng)中的靈活應(yīng)用,解決了硬件電路設(shè)計繁瑣復(fù)雜的問題,而且便于開發(fā)者對產(chǎn)品進(jìn)行修改優(yōu)化,可以大幅度地縮短產(chǎn)品的開發(fā)時間。本系統(tǒng)通過了硬軟件的聯(lián)合調(diào)試,系統(tǒng)工作正常,穩(wěn)定性良好。