【摘要】本課題設計了一套基于FPGA和USB2.0的便攜高速數據采集系統,以FPGA最小片上系統為控制核心,對A/D轉換芯片TLC5510和USB2.0接口芯片CY7C68013的控制,來實現對信號的高速采集和傳輸。
【關鍵詞】數據采集;FPGA;USB2.0;A/D轉換
一、引言
近年來,對于數據采集系統的要求與日俱增,現代數據采集系統已經從傳統的試驗測量中的數據采集與處理跨入到工業與過程控制。它已成為現代工業自動化的不可缺少的一個組成部分。
本課題是對EDA技術的應用,即利用EDA工具實現基于FPGA的數據采集。本文按照EDA開發流程,采用Verilog語言對FPGA進行編程來實現數據采集和傳輸的功能。用Verilog語言編寫代碼,進行時序仿真,各模塊都在邏輯綜合工具QuartusⅡ下進行綜合,并編程下載到FPGA芯片Cyclone IV系列EP4CE30F23C6芯片,經A/D轉換器將模擬數據轉換成數字數據,再通過USB2.0接口電路送入PC機輸出。
二、系統總體設計
該系統主要由FPGA控制模塊、A/D轉換、USB接口部分組成,如圖1所示。
A/D轉換器將所要采集的模擬信號轉換成數字信號,由FPGA接收、緩沖、存儲,經USB2.0端口傳回至主機工作站。高速A/D轉換器采用轉換速率為20MHz的TLC5510。
FPGA利用內部的SRAM提供數據輸入/輸出的雙緩沖功能。采用雙緩沖的原因同USB中的大端點所配置的雙緩沖類似,均是防止數據的溢出和保證數據傳輸的連續性。本文選用Altera公司的Cyclone系列芯片EP4CE30F23C6。
CY7C68013是Cypress公司推出的EZ-USB FX2系列智能USB接口芯片。其作用是把A/D轉換器采集的數據以高速的數據序列形式發送到主機。其中,USB2.0端口提供一個能和計算機連接的數據傳輸接口。
系統工作過程為:A/D轉換器在FPGA的ADC接口控制電路控制下,把模擬信號轉換成數字信號,并將指定通道的采樣數據存入FPGA內部FIFO緩存。同時,FPGA的USB接口控制邏輯查詢CY7C68013是否空閑,如果空閑,那么由FPGA的USB接口控制邏輯將指定通道的采樣結果,從FPGA內部FIFO緩存送入CY7C68013的內部FIFO。當內部的FIFO容量達到一定程度后,CY7C68013自動將數據打包傳送到PC機。由于固件程序把CY7C68013設置為特定的自動模式,因此CY7C68013把數據送往PC機期間的所有操作無需CY7C68013中CPU的干預,從而保證足夠的數據傳輸速率。采樣過程中FPGA的USB接口控制邏輯依次取走批量數據,在USB接口打包傳送時A/D轉換持續進行,FPGA內部FIFO也被持續寫入轉換結果。
圖1 系統總體框圖
三、硬件設計
本系統的硬件主要分為兩個部分:A/D轉換芯片TLC5510和FPGA構成的數據采集模塊,另一部分由FPGA和USB控制芯片CY7C68013構成的數據傳輸模塊。
(1)數據采集模塊
經過處理后的信號進入模數轉換電路,選用的高速A/D芯片是TI公司的TLC5510。它是一種采用CMOS工藝制造的8位高阻抗并行A/D芯片,能提供的最小采樣率為20MSPS。由于TLC5510采用了半閃速結構及CMOS工藝,因而大大減少了器件中比較器的數量,而且在高速轉換的同時能夠保持較低的功耗。TLC5510與FPGA的接口電路如圖2所示。
FPGA提供TLC5510 20MHz的工作時鐘和使能輸出信號OE,低電平有效。模擬信號經過TLC5510轉換成數字信號后,將采樣數據傳給FPGA的FIFO保存。
圖2 FPGA與TLC5510的接口電路圖
(2)數據傳輸模塊
在數據傳輸模塊中,采用的是Cypress公司的EZ-USB FX2芯片CY7C68013。這是一款性能較高的USB2.0微控制器。在單芯片上集成了USB2.0收發器、SIE(串行接口引擎)、增強的8051微控制器和可編程的外圍接口。
為了保證較高的傳輸速度,使用不經過CPU的SLAVE FIFO(從FIFO)控制工作模式。在該方式下FX2的CPU不直接參與USB數據處理,而是簡單地把FX2作為USB和外部數據處理邏輯之間的通道,數據流并不經過CPU,而是通過FX2的FIFO直接傳輸。FIFO由外部控制器控制,外部控制器可像普通FIFO一樣對FX2的多層緩沖FIFO進行讀寫;與此同時,FIFO提供外部控制器所需的時序信號、握手和輸出使能等信號。
在本設計中,采用Slave FIFO從機方式實現FPGA對FX2的控制。CY7C68013與FPGA的連接示意圖如圖3所示。修改FX2芯片提供的基本固件程序,設置端點EP2為輸出端點,大小為1KB,FlagA為EP2緩存的空標志,低電平有效;端點EP6為輸入端點,大小為1KB,FlagC為EP6緩存的滿標志,低電平有效。
模塊的基本工作過程為:當A/D采樣數據存儲滿FPGA中的FIFO后,FPGA根據SLAVE FIFO的控制時序產生相應的控制信號,將在FIFO中的數據傳輸給FX2的內部端點FIFO,而當內部端點存儲滿后,FX2自動將數據傳輸到PC。外部控制器FPGA對FX2的控制進程如下:
①分配FIFOAddr[1:0]=10,FIFO指針指向輸入端點,檢查FIFO的滿標志是否為1,假如Full=1,表示FIFO不滿,轉到②,否則保持在①;
圖3 CY7C68013與FPGA連接示意圖
②把外部數據indata放在FD上,同時將SLWR拉高,以使FIFO指針自動加1,然后轉到③;
③假如有更多的數據要傳輸,轉到②,否則轉到①。
四、軟件設計
數據采集系統的軟件設計包括三個部分:FX2的固件程序,USB的驅動程序,FPGA控制模塊。
(1)EZ-USB FX2的固件設計
固件程序是指運行在設備CPU中的程序。只有在該程序運行時,外設才能稱為具有給定功能的外圍設備。Cypress公司為FX2固件開發提供了一個固件庫和固件框架,都是在Keil C51集成開發環境下開發的。固件庫提供了一些常量、數據結構、宏、函數來簡化用戶對芯片的使用。固件框架實現了初始化芯片、處理USB標準設備請求以及掛起狀態下的電源管理等功能。該框架不添加任何代碼,編譯后生成的.HEX文件載入芯片就能和主機進行基本的USB通信。用戶主要的工作就是選擇適合的傳輸方式,添加需要使用的端點,在框架預留的地方添加初始化代碼和完成特定功能的代碼。這樣大大簡化了用戶對程序的編寫,在不十分了解USB2.0協議的情況下,也能通過代碼的編寫,實現USB的傳輸功能。
(2)USB的驅動程序
該系統需要通用驅動程序和下載固件的驅動程序。通用驅動程序完成與外設和用戶程序的通信及控制;而下載固件的驅動程序則只負責在外設連接USB總線后把特定的固件程序下載到FX2的RAM中,使FX2的CPU重啟,模擬斷開與USB總線連接,完成對外設的重新設置。FX2根據新的設置安裝通用驅動程序,重新枚舉外設為一個新的USB外設。
在Windows操作平臺下,當有新的設備接入時,操作系統就會依據設備回送的有關信息自動的調用相應的設備驅動程序。
(3)FPGA控制模塊。
在本系統中,FPGA構成了數據采集系統和數據傳輸系統的橋梁,完成對TLC5510的控制和數據的存儲,同時也完成對EZ-USB FX2單片機的控制。因此在FPGA中需要構成3個模塊:FIFO數據存儲模塊、控制模塊、時鐘分頻模塊。
FIFO數據存儲模塊主要完成對A/D轉換數據的存儲。每個FIFO存儲模塊的存儲容量定位2048B,可通過Mega Wizard工具來調用。
控制模塊要完成對TLC5510、FIFO存儲模塊和EZ-USB FX2的控制,這是整個系統的關鍵。根據系統實現的功能和各個模塊的控制時序,控制模塊將產生相應的控制信號,實現系統的采集和存儲的功能。
系統提供的FPGA外部時鐘頻率為50MHz,通過分頻模塊產生TLC5510的最大采樣工作頻率20MHz。
五、結論
基于FPGA和USB2.0的數據采集系統滿足現代高速設備對傳輸速度的要求,解決了傳輸速度慢的瓶頸。通過FPGA的模塊設計、EZ-USB FX2的固件設計和上層應用程序設計,實現了整個系統的數據采集與傳輸。
參考文獻
[1]劉克剛,陳曦,王衛兵,等.復雜電子系統設計與實踐[M].北京:電子工業出版社,2010.
[2]潘松.EDA技術實用教程[M].北京:科學出版社,2006.3.
[3]齊洪喜.基于FPD&ASIC的專用USB接口設計與實現[D].山東大學,2006.
作者簡介:馬玲(1981—),女,湖北武漢人,華中科技大學武昌分校講師,主要從事通信專業的教學與研究工作。