摘 要: 介紹了一種基于FPGA與USB2.0的雙通道實(shí)時(shí)數(shù)據(jù)采集與處理系統(tǒng)。該系統(tǒng)采用XC3S1200E芯片作為核心處理芯片,CY7C68013作為USB接口芯片,通過(guò)FPGA內(nèi)部的控制模塊控制A/D數(shù)據(jù)轉(zhuǎn)換和USB的數(shù)據(jù)傳輸,并在FPGA內(nèi)部完成數(shù)據(jù)的處理。實(shí)驗(yàn)證明,該系統(tǒng)基本能滿足設(shè)計(jì)的要求,計(jì)算出所求粒子的直徑。
關(guān)鍵詞: 數(shù)據(jù)采集;A/D;FPGA;USB2.0
數(shù)據(jù)采集系統(tǒng)正越來(lái)越多地應(yīng)用于控制和測(cè)試領(lǐng)域,在某些特定的領(lǐng)域,數(shù)據(jù)采集系統(tǒng)所起的作用也越來(lái)越大[1]。傳統(tǒng)的數(shù)據(jù)采集方法通常采用DSP作為核心芯片,DSP雖然運(yùn)行速度快,但是不能完成外圍的硬件邏輯控制。FPGA時(shí)鐘頻率相對(duì)較高且延時(shí)小,F(xiàn)PGA采用IP內(nèi)核技術(shù),可以集成外圍控制和接口電路[2]。本文根據(jù)項(xiàng)目需要,設(shè)計(jì)了一種基于FPGA的雙通道、最大采樣率為5 Mb/s的通用數(shù)據(jù)采集與實(shí)時(shí)處理系統(tǒng)。
1 系統(tǒng)方案設(shè)計(jì)
數(shù)據(jù)采集和處理系統(tǒng)主要由信號(hào)調(diào)理電路、A/D轉(zhuǎn)換器、FPGA和USB四部分組成,如圖1所示。
信號(hào)調(diào)理電路的作用是對(duì)所采集的模擬信號(hào)進(jìn)行放大、濾波,將單路信號(hào)轉(zhuǎn)變?yōu)椴罘中盘?hào),驅(qū)動(dòng)A/D轉(zhuǎn)換器的正常工作。本文選用TI公司的全差動(dòng)運(yùn)算放大器THS4503,它是模數(shù)轉(zhuǎn)換器ADS1605的數(shù)據(jù)手冊(cè)中推薦的運(yùn)算放大器[3]。
A/D轉(zhuǎn)換器在FPGA內(nèi)的控制模塊控制下,將所采集的模擬信號(hào)轉(zhuǎn)換為16 bit的數(shù)字信號(hào),傳入FPGA中進(jìn)行處理。本系統(tǒng)所采用的模數(shù)轉(zhuǎn)換器為TI公司的ADS1605。
FPGA芯片采用的是Xilinx公司的Spartan 3E系列中的XC3S1200E。FPGA為本系統(tǒng)的核心部分,控制A/D轉(zhuǎn)換器的數(shù)據(jù)轉(zhuǎn)換,并將A/D轉(zhuǎn)換來(lái)的數(shù)據(jù)進(jìn)行FFT處理。同時(shí),F(xiàn)PGA的USB接口控制邏輯查詢CY7C68013是否空閑,控制USB將處理完的數(shù)據(jù)傳遞給主機(jī),并在PC機(jī)中顯示出來(lái),實(shí)現(xiàn)數(shù)據(jù)的可視化顯示和人機(jī)接口的互動(dòng)。
CY7C68013是Cypress公司推出的EZ-USB FX2系列的USB接口芯片,其作用是在FPGA的接口控制邏輯下,把處理完的數(shù)據(jù)傳遞給主機(jī)。
本系統(tǒng)的工作原理為:該系統(tǒng)可以完成兩路中頻信號(hào)的采樣處理,單路信號(hào)經(jīng)過(guò)THS4503后轉(zhuǎn)變?yōu)椴罘中盘?hào),輸入到模數(shù)轉(zhuǎn)換器中,F(xiàn)PGA中的A/D控制模塊向ADS1605發(fā)送采樣控制指令,A/D轉(zhuǎn)換器在控制模塊控制下進(jìn)行數(shù)據(jù)采集,將模擬信號(hào)轉(zhuǎn)換成16 bit的數(shù)據(jù)信號(hào),并依次選通兩片A/D通道,實(shí)現(xiàn)由A/D轉(zhuǎn)換器到FPGA的雙通道數(shù)據(jù)傳輸。當(dāng)采集的數(shù)據(jù)達(dá)到處理?xiàng)l件后,相應(yīng)的數(shù)據(jù)在FPGA中進(jìn)行FFT計(jì)算。計(jì)算完成后,將處理過(guò)的數(shù)據(jù)在FPGA的USB接口控制邏輯下,經(jīng)過(guò)USB接口傳遞給主機(jī),當(dāng)數(shù)據(jù)傳遞完成后,再進(jìn)行下一次的數(shù)據(jù)采集和處理。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 信號(hào)調(diào)理電路
A/D轉(zhuǎn)換器的前端需要運(yùn)放來(lái)驅(qū)動(dòng),本設(shè)計(jì)中的信號(hào)調(diào)理電路采用TI公司的全差動(dòng)運(yùn)算放大器THS4503。經(jīng)過(guò)信號(hào)調(diào)理電路后,單路信號(hào)轉(zhuǎn)變?yōu)椴罘中盘?hào),輸入到A/D轉(zhuǎn)換器中。
全差動(dòng)放大器的特點(diǎn)為:具有高分辨率、高精度以及出色的動(dòng)態(tài)范圍。THS4503就是一種高精度的全差動(dòng)運(yùn)放,選擇它作為ADC的緩沖器可以簡(jiǎn)化方案的設(shè)計(jì)[4]。
2.2 A/D轉(zhuǎn)換電路
A/D轉(zhuǎn)換電路是系統(tǒng)的重要組成部分,其與FPGA的連接如圖2所示。
ADS1605是TI生產(chǎn)的一款高采樣率、高精度、易使用的16 bit ΔΣ模數(shù)轉(zhuǎn)換器,ADS1605的工作電源為+5 V的模擬電源和+3 V的數(shù)字電源,獨(dú)立的數(shù)字I/O電源設(shè)計(jì)使芯片可靈活與其他邏輯芯片接口[3]。ADS1605需要外接時(shí)鐘源進(jìn)行工作。本系統(tǒng)外接頻率為50 MHz的晶振時(shí)鐘源,經(jīng)過(guò)FPGA分頻后,為ADS1605提供正常工作所需的頻率。
ADS1605在FPGA的控制模塊下正常工作。ADS1605的控制模塊對(duì)ADS1605的控制進(jìn)程為:
(1)狀態(tài)0:CS、RD置1,RESET置0,初始化ADS1605,進(jìn)入狀態(tài)1。
(2)狀態(tài)1:CS置0,RD置1,RESET置1,開(kāi)始數(shù)據(jù)轉(zhuǎn)換,進(jìn)入狀態(tài)2。
(3)狀態(tài)2:CS置0,RD置1,RESET置1,檢測(cè)DRDY的狀態(tài),若下降沿來(lái)臨,進(jìn)入狀態(tài)3;否則,繼續(xù)等待DRDY下降沿的到來(lái)。
(4)狀態(tài)3:CS置0,RD[0]置0,RESET置1,輸出一通道轉(zhuǎn)換好的數(shù)據(jù),進(jìn)入狀態(tài)4。
(5)狀態(tài)4:CS置0,RD[1]置0,RESET置1,輸出兩通道轉(zhuǎn)換好的數(shù)據(jù),進(jìn)入初始狀態(tài)。
2.3 FPGA的設(shè)計(jì)
本系統(tǒng)采用的是Xilinx公司的Spartan 3E系列的XC3S1200E芯片,它更好地利用了90 nm工藝,擁有的系統(tǒng)門數(shù)達(dá)到120萬(wàn),28個(gè)乘法器,504 KB的塊RAM,136 KB的分布式RAM,8個(gè)數(shù)字時(shí)鐘管理模塊,最大可用管腳可達(dá)304個(gè),它性價(jià)比也較高[2]。
XC3S1200E是基于SRAM工藝的查找表結(jié)構(gòu),它不具備非易失特性,因此斷電后將丟失內(nèi)部邏輯配置。在每次上電后,都需要從外部非易失存儲(chǔ)器(如PROM、Flash存儲(chǔ)器等)中導(dǎo)入配置比特流。本系統(tǒng)選用的是XCF04S芯片,這是FPGA數(shù)據(jù)手冊(cè)上提供的配置芯片[5]。
FPGA是本系統(tǒng)的核心部分,構(gòu)成了數(shù)據(jù)采集系統(tǒng)和數(shù)據(jù)傳輸系統(tǒng)的“橋梁”,完成了對(duì)ADS的控制,并對(duì)采集到的數(shù)據(jù)進(jìn)行存儲(chǔ)和處理,同時(shí)也完成了對(duì)CY7C68013的控制。使用FPGA使電路得到了簡(jiǎn)化,不需要額外的分立器件來(lái)存儲(chǔ)數(shù)據(jù)。在FPGA內(nèi)部構(gòu)成了以下幾個(gè)模塊。
(1)兩片F(xiàn)IFO數(shù)據(jù)存儲(chǔ)模塊
FIFO數(shù)據(jù)存儲(chǔ)模塊主要用來(lái)存儲(chǔ)A/D轉(zhuǎn)換的數(shù)據(jù)。由于需要同時(shí)采集兩路信號(hào)(一路熒光信號(hào),一路多普勒信號(hào)),因此需要兩個(gè)FIFO模塊,這樣易于對(duì)數(shù)據(jù)的存儲(chǔ)和控制。
(2)數(shù)據(jù)處理模塊
本系統(tǒng)需要把采集到的數(shù)據(jù)進(jìn)行處理,所以數(shù)據(jù)處理模塊是很重要的組成部分。
在數(shù)據(jù)處理模塊中,首先將一路通道采集到的熒光信號(hào)數(shù)據(jù)進(jìn)行32個(gè)數(shù)據(jù)的求平均操作,以預(yù)觸發(fā)兩個(gè)通道的信號(hào),然后再對(duì)一路通道的數(shù)據(jù)進(jìn)行最大值和最小值計(jì)算,通過(guò)這兩個(gè)數(shù)據(jù)求出熒光信號(hào)的寬度。對(duì)另一通道中的多普勒信號(hào)進(jìn)行FFT計(jì)算。通過(guò)兩通道得到的數(shù)據(jù)計(jì)算出所求粒子的直徑。
(3)控制模塊
控制模塊主要完成對(duì)ADS1605、FIFO存儲(chǔ)模塊和CY7C68013的控制,這是整個(gè)系統(tǒng)的關(guān)鍵。控制模塊將產(chǎn)生控制信號(hào),實(shí)現(xiàn)系統(tǒng)的數(shù)據(jù)采集、處理和傳輸功能。
(4)分頻倍頻模塊
系統(tǒng)提供的FPGA外部時(shí)鐘頻率為50 MHz,經(jīng)過(guò)分頻倍頻模塊將外部時(shí)鐘轉(zhuǎn)換成各個(gè)芯片工作所需的頻率。
2.4 USB的設(shè)計(jì)
2.4.1 USB與FPGA的接口設(shè)計(jì)
在USB設(shè)計(jì)中,為了保持較高的傳輸速度,使用不經(jīng)過(guò)CPU的SLAVEFIFO控制模式。
接口方式如圖3所示:
本系統(tǒng)選用的芯片是Cypress公司的CY7C68013芯片。該模塊的工作過(guò)程為:當(dāng)采集的數(shù)據(jù)在FPGA中處理完后,F(xiàn)PGA根據(jù)SLAVEFIFO的控制時(shí)序產(chǎn)生相應(yīng)的控制信號(hào),將在FPGA中的數(shù)據(jù)傳輸給EZ-IJSB FX2的內(nèi)部端點(diǎn)FIFO,而當(dāng)內(nèi)部端點(diǎn)存儲(chǔ)滿后,F(xiàn)X2自動(dòng)將數(shù)據(jù)傳輸?shù)絇C機(jī)上[6]。外部控制器FPGA對(duì)FX2的控制進(jìn)程如下:
(1)IDLE:空閑狀態(tài),此時(shí)如果寫(xiě)事件發(fā)生,將轉(zhuǎn)向狀態(tài)1。
(2)狀態(tài)1:指向IN FIFO,觸發(fā)FIFOADR[1:0],轉(zhuǎn)向狀態(tài)2。
(3)狀態(tài)2:如果FIFO滿標(biāo)志為假,則轉(zhuǎn)向狀態(tài)3;否則,保持在狀態(tài)2。
(4)狀態(tài)3:驅(qū)動(dòng)數(shù)據(jù)到總線上,通過(guò)觸發(fā)SLWR來(lái)寫(xiě)數(shù)據(jù)到FIFO,并增加FIFO指針,然后轉(zhuǎn)向狀態(tài)4。
(5)狀態(tài)4:如果還有數(shù)據(jù)寫(xiě),轉(zhuǎn)向狀態(tài)2,否則,轉(zhuǎn)向IDLE。
2.4.2 USB接口芯片固件程序
固件程序是指運(yùn)行設(shè)備CPU中的程序,只有在運(yùn)行該程序的時(shí)候,外設(shè)才能稱為具有給定功能的外圍設(shè)備。在該系統(tǒng)中,CY7C68013芯片的固件程序的主要功能就是輔助硬件系統(tǒng)工作,完成對(duì)設(shè)備的初始化,處理應(yīng)用程序和驅(qū)動(dòng)程序發(fā)送的各種命令和數(shù)據(jù)交換。
Cypress公司為使用FX2芯片的用戶提供了一個(gè)完整的固件開(kāi)發(fā)框架,用戶只需要在框架的基礎(chǔ)上提供一個(gè)USB描述符表,添加其他端點(diǎn)接收和發(fā)送數(shù)據(jù)的通信代碼以及控制外圍電路的程序代碼,即可完成固件的開(kāi)發(fā)。該固件所使用的編程工具是Keil公司的C51編譯器[6]。
本文主要介紹了基于Xilinx公司XC3S1200E FPGA的數(shù)據(jù)采集與實(shí)時(shí)處理系統(tǒng),采用計(jì)算機(jī)的USB接口作為數(shù)據(jù)傳輸接口。本系統(tǒng)利用FPGA內(nèi)部模塊來(lái)實(shí)現(xiàn)數(shù)據(jù)處理,采用Verilog生成的狀態(tài)機(jī)來(lái)控制各個(gè)模塊的連接,實(shí)現(xiàn)數(shù)據(jù)的采集、轉(zhuǎn)換、處理和傳輸。本文的創(chuàng)新點(diǎn)在于:利用FPGA生成了各個(gè)接口的控制模塊,并利用FPGA內(nèi)部的IP核完成了對(duì)數(shù)據(jù)的FFT計(jì)算,簡(jiǎn)化了硬件的設(shè)計(jì),使系統(tǒng)變的簡(jiǎn)潔。在應(yīng)用中可以根據(jù)任務(wù)的不同改換內(nèi)部的數(shù)據(jù)處理模塊,使系統(tǒng)可以靈活地處理各種數(shù)據(jù)采集處理任務(wù)。
參考文獻(xiàn)
[1] 沈蘭蓀.數(shù)據(jù)采集技術(shù)[M].北京:中國(guó)科學(xué)技術(shù)大學(xué)出版社,1990.
[2] 田耘,徐文波,胡彬.Xilinx ISE design suite 10.x FPGA開(kāi)發(fā)指南[M].北京:人民郵電出版社,2008.
[3] Texas Instruments. ADS1605 data book.2007.5.
[4] Texas Instruments.THS4503 data book.2004.
[5] Xilinx.Xilinx Spartan-3E FPGA family data sheet,2009.8.
[6] 薛園園.USB應(yīng)用開(kāi)發(fā)技術(shù)大全[M].北京:人民郵電出版社,2007.