如何設計基于FPGA和USB2.0的高精度數據采集系統?
現代電子偵查技術要求能夠對外部模擬信號進行精確提取和分析,從而對數據采集的精度提出了很高的要求,本文提出了一種以FPGA 作為主控制器的高精度500M 數據采集系統設計方法,詳細地闡述了各硬件平臺的具體構成。最后利用QUARTUS 內部的嵌入式邏輯分析儀(SignalTap ii)可以觀察到被采集到的信號并且對數據的有效位數及性能進行簡略分析。
本文引用地址:http://www.j9360.com/article/201808/385071.htm0 引言
隨著數字通信技術的逐步發展,高速數據采集系統已經逐步取代傳統的數據采集系統,其廣泛應用在眾多場合。新一代可編程邏輯器件FPGA 都擁有較多的IO 端口以及強大的數據處理能力,這也為高速高精度數據采集系統的研發提供了基礎條件。
1 工作原理
本文設計的數據采集卡硬件原理框圖1 如下所示。

如圖1 所示,前端模擬電路將外界的模擬信號轉化成為ADC能夠接收到的數據格式;高速時鐘電路提供500MHz 的高速時鐘,ADC 在此時鐘作用下,進行ADC 變換。在整個數據采集卡中,FPGA 是進行采集控制,以及數據接收的核心。FPGA 按照1 :4 的比率對將接收到的500MHz 的LVDS 差分數據流進行分流和降速。
數據分流之后由于數據速率與USB 接口數據傳輸速度不同,所以還要進行FIFO 緩沖。FIFO 的寫時鐘與串行收發器保持同步,當FIFO 緩沖器被寫滿之后,由FPGA 讀取FIFO 緩沖器中的數據,并且將數據通過USB 接口芯片傳輸到上位機中進行顯示或者存儲。
2 系統設計
數據采集卡主要包括高速A/D 轉換模塊、FPGA 主控模塊和USB 接口電路三個模塊。
2.1 高速A/D 轉換模塊
ADC 芯片作為模數轉換的核心,設計采用TI 公司推出的ADS5463,其采用流水線型結構,最高采樣速度500MSPS,精度12位,擁有高速差分數字接口LVDS.
對于高速ADC 采樣電路,模擬信號輸入接口的設計不僅要保證足夠的傳輸帶寬而且要完成將單端的輸入信號變成差分信號的功能。本設計使用射頻變壓器將單端輸入轉換為差分輸入,并通過TI 公司生產的可級聯中頻放大器THS9001 芯片實現中頻信號放大的功能。
在A/D 轉換模塊中,采樣始終的質量非常重要。在本文的設計中,采用了鎖相環芯片CDCM61001 生成采樣時鐘,并利用FPGA內部PLL 資源倍頻生成采樣時鐘作為備用的采樣時鐘。本設計是用25M 的時鐘倍頻20 倍生成500M 以LVPECL 格式的差分電平形式。
高速A/D 轉換模塊的原理圖如圖2 所示:

2.2 FPGA 主控模塊
FPGA 是整個采集模塊的控制核心,其主要的功能是接收數據,并且對數據進行降速、分流以及緩沖,并且將數據傳通過USB接口傳輸給上位機。在本文的設計設計中,選擇Cyclone II 系列的EP2C35F672C6,它屬于一款中等密度的FPGA,相比較于ASIC低得多的成本在單片機上實現復雜的數字系統。
設計使用FPGA 的Bank3 和Bank4 接收來自ADS5463 輸出的高速LVDS 數據,包括DRY(數據輸出準備好)以及OVR(數據溢出位)。Bank5 和Bank6 用于USB 接口芯片的控制,其余BANK 留作擴展之用。
在FPGA 主控模塊中,AD 輸出信號和時鐘信號被傳輸到FPGA 中的DIFFIO_RX p/n 通道上。其中p 表示正差分通道信號,而n 表示負差分通道信號。在這部分的軟件設計中,使用altvds模塊接收ADC 的輸出數字信號、始終信號,并且利用DMUX 對數據流進行串行- 并行轉換,以方便對輸入信號的后續操作。
數據流在DMUX 模塊的仿真結果如圖3 所示。

如圖3 所示,Data_in 是一路500MHz 的數據流,而dout1,2,3,4 為Data_in 通過DMUX 進行降速和分流之后的結果。從圖中可以看出,500MHz 的高速數據流經過DMUX 降速、分流之后的輸出較干凈、平滑,在高速狀態下,達到這種結果是比較理想的,對系統設計上也是很有利的。
經過DMUX 降速之后的數據流已經達到了FPGA 的處理要求,但是由于FPGA 的處理速度和與上位機相連的USB 接口速率不匹配,為此需要采用FIFO 來進行緩沖。在本文的設計中,采用兩個容量為4K,寬度為32 位的FIFO 來來作為FPGA 與USB 接口之間的數據緩沖。FPGA 接收高速DMUX 降速后的數據流,并且寫入到FIFO 中,當FIFO 寫滿8K 之后,啟動讀始終,將FIFO 中的數據通過USB 接口分批讀取到上位機中。
2.3 USB 接口電路設計
USB 接口的主要功能是將FPGA 緩沖區中的數據讀取到上位機中。在本文的設計中,USB 接口電路采用CYPRESS 公司CY7C68013A 芯片。CY7C68013A 芯片集成了串行接口引擎來方便讀取FPGA 中的數據。芯片采用2MHz 的時鐘信號,同時使用外部EEPROM 存儲固件程序。在USB 接口電路的初始化過程中,首先需要從EEPROM 中讀取固件程序。FPGA 通過USB 接口與上位機進行數據傳送的流程圖如圖4 所示。

如圖4 所示,EZ-USB FX2 芯片中包含有GPIF 和SlavFIFO 兩種接口方式,可以滿足不同數據流速度以及用戶對數據處理實時性的要求。在CY7C68013A 芯片中,其接口時鐘與FPGA中的IFCLK 引腳連接,從而在FPGA 中的FIFO 緩沖寫滿時,FPGA可以控制USB 接口電路開始從FIFO 緩沖區中讀取數據。
USB 接口的主要工作室實現對FIFO 緩沖區中數據的讀取,因此其設計的邏輯也主要是對FIFO 讀、寫狀態機的監控,其實現的流程如下:在接收到數據讀指令之后,分成8 次讀取FIFO中的128 位數據,并且將這些數據一起存放到FPGA 控制寄存器組中;將FPGA 的FIFO 中的數據讀出,并且寫入到EP6 端點緩沖區中。狀態機先由空閑狀態進入等待狀態;當EP2 不為空時,進入讀狀態EP2 ;當讀命令有效時,那么就進行數據的讀取并且發送相應的命令,之后回到空閑狀態;在等待狀態下,當EP2 為空,EP6 不滿時,開始寫EP6,寫滿后也回到空閑狀態。
評論