基于FPGA軟核的高速數據采集系統設計
數據采集在現代工業(yè)生產(chǎn)及科學(xué)研究中的重要地位日益突出,同時(shí)對實(shí)時(shí)采集、實(shí)時(shí)傳輸、實(shí)時(shí)處理的高速數據采集的要求也不斷提高。此外,對于不同的場(chǎng)合,數據采集系統的數據采樣參數要求也不同。工業(yè)生產(chǎn)與科研領(lǐng)域中對數據采集研發(fā)提出了以下的要求:(1)接口簡(jiǎn)單靈活且有較高的數據傳輸率;(2)采集器體積小、抗干擾能力強、能夠對數據做出快速的存儲,并及時(shí)進(jìn)行分析和處理;(3)設計周期短,能快速適應市場(chǎng)需求。
USB2.0以其即插即用、支持熱插拔的靈活性,以及高達480 Mb/s的傳輸速率,成為了高速數據傳輸接口的首選。而FPGA以其工作頻率和集成度高、穩定性良好、抗干擾能力強等優(yōu)點(diǎn),逐步成為各領(lǐng)域數據采集數字電路的首選。FPGA集成軟核有設計周期短、設計投入少等優(yōu)越性,且不涉及具體的物理實(shí)現,可以方便移植到各種FPGA硬件平臺,極大提高了它的靈活性和適應性。
1 系統方案與結構
數據采集系統性能指標修改主要集中在A(yíng)/D轉換模塊與FPGA控制模塊上,在USB2.0接口的硬件、固件、驅動(dòng)程序的設計以及PC機應用軟件的設計基本沒(méi)有變化。而A/D轉換模塊的修改可以通過(guò)A/D轉換芯片的選擇及更改輸入信號調理電路設計來(lái)實(shí)現。但更換不同的A/D轉換芯片可能給A/D轉換的啟??刂?、數字信號的緩存等方面帶來(lái)較多的改動(dòng)。而FPGA軟核的模塊化設計可以極大地減少這方面的改動(dòng)。
本文以TI公司的低功率高性能A/D轉換芯片ADS800為例介紹系統的設計。圖1為本數據采集系統的結構框圖。模擬信號經(jīng)過(guò)THS4504全差分放大器進(jìn)行信號差分放大后,輸入到ADS800進(jìn)行A/D轉換。為減少不同系統中FPGA軟核改動(dòng)的工作量,FPGA內部按功能設計了三個(gè)軟核作為系統的控制單元。CY7C68013作為USB控制芯片設置為從屬FIFO模式(Slave FIFO Mode),負責數字信號在采集系統與PC機間的傳輸;用戶(hù)通過(guò)LabVIEW設計的PC機應用軟件,在驅動(dòng)程序的驅動(dòng)下與數據采集系統進(jìn)行命令以及數據的傳輸,以便對數據采集系統采集到的數據進(jìn)行實(shí)時(shí)處理。
2 系統硬件設計
2.1 模數轉換電路
數據采集系統采樣參數調整的本質(zhì)在于模數轉換電路的改變,設計者只需要更換不同的A/D轉換芯片、重新設計其硬件電路即可達到目標。本系統中模數轉換電路由信號調理電路與高速A/D轉換器組成。信號調理電路負責對待測模擬信號進(jìn)行差分放大,高速A/D轉換器負責模擬信號到數字信號的轉換。
為了能精確檢測微弱信號,數據采集系統的ADC前加入了全差分放大器THS4504,采用ADS800作為A/D轉換芯片。ADS800含12 bit流水線(xiàn)型A/D轉換內核,支持差分輸入,最高轉換速率高達40 MHz[1],極好地滿(mǎn)足了本系統采樣頻率的要求。
2.2 FPGA芯片外圍電路
本系統FPGA采用Xilinx公司的XC3S200AN-4-FT256-C芯片。該芯片擁有20 萬(wàn)門(mén)邏輯單元,內含16 個(gè)18 KB的塊存儲器(Block RAM)與30 KB分布存儲器(Distributed RAM),最高工作頻率達到326 MHz[2],可滿(mǎn)足本系統的時(shí)序需求。
FPEA芯片外圍電路:
(1)FPGA與A/D接口模塊
ADS800的控制信號由FPGA生成,ADS800的轉換時(shí)鐘設定為30 MHz,由FPGA的時(shí)鐘分頻獲得。FPGA與ADS800的連接示意圖如圖2所示。本設計中,FPGA通過(guò)ADC_OE來(lái)控制ADS800轉換數據輸出的啟停;ADS800的30 MHz工作時(shí)鐘由FPGA的60 MHz工作時(shí)鐘經(jīng)過(guò)二分頻得到;ADS800的數據由并口輸出,FPGA內部FIFO控制單元將接收到的12 bit數據轉換成16 bit數據存入FPGA內的FIFO中。
當更換不同的A/D轉換芯片時(shí),A/D轉換芯片與FPGA的連接有所不同。但對于并行輸出、流水線(xiàn)型的A/D轉換芯片,只需模仿上述連接方式,對輸出位數、控制時(shí)序以及FPGA時(shí)鐘分頻大小等做合適的修改即可。
(2)FPGA與USB接口模塊
本設計中使用Cypress公司生產(chǎn)的EZ-USB FX2LP系列的CY7C68013芯片作為USB2.0協(xié)議的微控制器芯片。由于該芯片支持480 Mb/s高速傳輸,為本設計數據傳輸提供了速率保證。FPGA與CY7C68013的連接圖如圖3所示。
FLAGA、FLAGB腳可通過(guò)PINFLGSAB、PINFLAGSCD寄存器來(lái)選擇其工作在索引模式還是固定模式。本設計中被設置為固定模式。其中FLAGA表示EP2的空狀態(tài)(FIFO_EMPTY),FLAGB表示EP6的滿(mǎn)狀態(tài)(FIFO_FULL)。
2.3 USB接口外圍芯片電路
本設計使用容量為16 KB的EEPROM芯片AT24C016A存儲,并設置CY7C68013的VID與PID。在CY7C68013上電并脫離復位狀態(tài)后,內部邏輯會(huì )檢查I2C端口上是否連接有串行EEPROM。如果有,則判斷連接上的EEPROM第一個(gè)字節是0xC0還是0xC2。本設計中設置EEPROM第一個(gè)字節為0xC0,設置VID=0x1234、PID=0x2211、DID=0x0001。在這種情況下,由CY7C68013內核提供USB描述符,使用EEPROM存儲的VID/PID/DID值替換CY7C68013內部的值,并設置RENUM=0。這樣,在設備重新列舉后,芯片內的程序代碼會(huì )以全新的自定義設備來(lái)加以呈現。
3 FPGA軟核設計
FPGA內部控制單元的功能分別由三個(gè)軟核負責完成,分別為:ADC接口控制單元、FIFO控制單元以及USB接口控制單元。三個(gè)軟核連接示意圖如圖4所示。
3.1 ADC接口控制單元
ADC接口控制單元控制數據采集的啟停和傳輸。數據采集開(kāi)始時(shí),ADC接口控制單元將時(shí)鐘信號分頻為30 MHz供ADS800作轉換時(shí)鐘ADC_CLK使用。此時(shí)控制單元內寄存器CLK_CNT對ADC_CLK轉換時(shí)鐘進(jìn)行周期計數,當經(jīng)過(guò)7個(gè)時(shí)鐘周期后(ADS800轉換延時(shí)為6.5個(gè)時(shí)鐘周期,為了使轉換數據穩定,本設計再延時(shí)半個(gè)時(shí)鐘周期輸出)即CLK_CNT=8時(shí),CLK_CNT清零,FIFO寫(xiě)時(shí)鐘(FIFO_WR_CLK)輸出,同時(shí)端口FIFO_WR_EN置高電平,經(jīng)ADC轉換完成的數據在補齊16 bit后,隨時(shí)鐘FIFO_WR_CLK上升沿存入FIFO中。ADC接口控制單元狀態(tài)機工作過(guò)程如下:
(1)當FPGA上電或者復位后,狀態(tài)機進(jìn)入空閑狀態(tài)(IDEL)。
(2)在空閑狀態(tài)下,當FIFO不滿(mǎn)(FIFO_FULL=0)且ADC_START=1時(shí),狀態(tài)機進(jìn)入轉換狀態(tài)(CONVERT),此時(shí),ADC_CLK輸出ADC數據轉換時(shí)鐘。
(3)在轉換狀態(tài)下,當FIFO_WR_EN=1,即數據轉換延時(shí)結束時(shí),狀態(tài)機進(jìn)入寫(xiě)狀態(tài)(WRITE),此時(shí)CLK_CNT清零,ADC_OE和FIFO_WR_EN都置為高電平,FIFO_WR_CLK輸出FIFO寫(xiě)時(shí)鐘。
(4)在任何狀態(tài)下,如果FIFO已經(jīng)寫(xiě)滿(mǎn)(FIFO_FULL=1)或者ADC_START=0時(shí),自動(dòng)跳轉到空閑狀態(tài)。
ADC接口控制單元狀態(tài)機示意圖如圖5所示。
3.2 FIFO控制單元
本設計首先使用FPGA內部Block RAM生成FIFO。由于A(yíng)/D接口控制單元輸出數據寬度為16 bit,因此,FIFO寬度也設置為16 bit,深度設置為4 KB。FIFO可以使用Xilinx ISE套件中的Core Generator生成器,由Core Generator生成的FIFO軟核配合控制部分構成FIFO控制單元。FIFO控制單元內部結構示意圖如圖6所示。
由于本設計中數據采集系統處于異步從屬FIFO模式,且USB接口芯片讀數據的速度與ADC數據寫(xiě)入FIFO的速度不同。為解決因讀寫(xiě)速度不同而可能帶來(lái)的數據讀寫(xiě)錯誤問(wèn)題,FIFO軟核上的FULL與EMPTY兩信號線(xiàn)可以分別指示FIFO滿(mǎn)與空的狀態(tài)。當FIFO處于滿(mǎn)狀態(tài)時(shí),FIFO_FULL信號置高電平,由ADC控制單元通知ADC停止采集數據;當FIFO處于空狀態(tài)時(shí),FIFO_EMPTY信號置為高電平,由USB接口控制單元通知USB接口芯片停止讀FIFO。FIFO的讀時(shí)鐘信號(FIFO_RD_CLK)與讀使能信號(FIFO_RD_EN)由USB接口控制單元提供,寫(xiě)時(shí)鐘(FIFO_WR_CLK)與寫(xiě)使能信號(FIFO_WR_EN)由ADC接口控制單元提供。FIFO控制單元的工作有以下兩種特殊情況:
評論