基于FPGA的高速實時數據采集系統(tǒng)設計
摘要:設計的基于FPGA的高速實時數據采集系統(tǒng),可控制6路模擬信號的采集和處理,F(xiàn)PGA中的6個FIFO對數據進行緩存,數據總線傳給DSP進行實時處理和上傳給上位機顯示。程序部分是用Verilog HDL語言,并利用QuartusⅡ等EDA軟件進行仿真,驗證了設計功能的正確性。
關鍵詞:FPGA;Verilog HDL;FIFO;數據采集
0 引言
隨著當今社會信息技術的快速發(fā)展,高速數據采集及處理在人們生活、現(xiàn)代工業(yè)和科學研究等很多領域中廣泛地應用。同樣,在一些高精度、快速的測量中需要對數據進行高質量、高速度的采集。傳統(tǒng)的數據采集系統(tǒng)往往采用單片機或數字信號處理器(DSP)作為控制器,來控制模/數轉換器(ADC)、存儲器和其他外圍電路的工作。但由于單片機本身的指令周期以及處理速度的影響,效率較低,很難滿足系統(tǒng)對數據采集系統(tǒng)實時性和同步性的要求。同時,F(xiàn)PGA具有高的時鐘頻率,運行速度快,開發(fā)周期短,集成度高,功耗低,設計費用低,組成形式靈活等諸多優(yōu)點。因此,設計利用FPGA的高速實時數據采集系統(tǒng)有著重要的價值。
1 FPGA硬件設計
1.1 數字系統(tǒng)設計介紹
6路模擬信號經過模擬信號處理模塊,形成電壓差分模擬信號,其目的是減少直流漂移,去除共模干擾,為后級的模/數轉換器(ADC)做準備,系統(tǒng)的硬件框圖如圖1所示。經過ADS8364模數轉換器件后,將輸入的模擬差分信號變換為適用于控制過程、存儲、處理、執(zhí)行計算并顯示讀出等其他目的的數字信號。在FPGA的控制下,數字信號被存儲在異步FIFO中,再按照設計要求將存儲在異步FIFO中的數據通過總線接口實時、高速、大量地傳輸到DSP芯片中進行實時處理,最后再傳輸到上位機。
1.2 外圍主要電路
1.2.1 外部開關控制信號
外部開關控制信號的作用是給整個系統(tǒng)提供開關信號。為了滿足工業(yè)應用,避免長線傳輸中的共地和電平不一致,采用了光電隔離,實現(xiàn)了將輸入的24 V電壓轉化為3 V輸出電壓的功能,然后再通過整形電路整形后,傳輸到FPGA的I/O接口上。
1.2.2 A/D轉換電路
對于采集的6個通道的信號,由于采樣速率高,因此選擇了ADS8364芯片進行模數轉換。其工作電壓為+5V,獨立6通道全差分輸入,2.5V參考電壓的REFIN和REFOUT引腳、有效數據位為14位、采樣頻率可以根據設計要求進行調節(jié)并且最高的采樣頻率可以達到250 KSPS、帶有6級深度的FIFO輸出、功耗只有450 MW、6個差分采樣放大器以及高速并行接口等主要參數。
ADS8364芯片的輸入通道分為三組(A,B和C)的6路模擬信號輸入通道,每個端口含有ADCS和保持信號引腳,這兩個信號用來保證幾個通道能同時進行采樣和轉換,同時輸入電壓是從-VREF到+VREF之間變化的差分模擬輸入電壓信號。6個十六位ADCS可以同時工作,即6通道同時進行轉換。HOLDA,HOLDB,HOLDC這三個轉換保持信號啟動相對應的通道進行模數轉換。如果這些保持信號同時有效時,這6個通道轉換的結果就被保存在6個寄存器中,如果FPGA中的AD控制模塊對ADS8364芯片執(zhí)行每一個讀操作時。ADS836就會輸出十六位數據到FPGA中,A0,A1,A2這3個是地址/模式信號,它們決定ADS8364芯片采用何種方式讀取數據。有單通道,單周期或FIFO模式三種模式供選擇。HOLDA,HOLDB,HOL DC至少20 ns保持低電平,相應的通道才能開始轉換。20 ns的低電平使得相應通道的采樣保持放大器處于保持狀態(tài),進而所選擇的模數轉換通道就開始進行數據轉換,本設計方案所選擇的ADS8364地址/模式信號是單通道模式讀取數據,6通道同時進行數據轉換,其器件連接圖如圖2所示。
1.2.3 UART通信模塊
在本設計中,采用了一片CP2101芯片來實現(xiàn)與PC機的USB接口通信,其電路原理圖如圖3所示。
CP2101是一種高度集成的USB轉UART橋接器,提供一個使用最小化的元件和PCB空間實現(xiàn)RS 232轉USB的簡便的解決方案。該芯片包含一個USB 2.0全速功能控制器、USB收發(fā)器、振蕩器和帶有全部的調制解調器控制信號的異步串行數據總線(UART),全部功能集成在一個5 mm×5 mm MLP-28封裝的IC中。無需其他的外部USB元件。主要引腳有:
VDD:2.7~3.6 V電源電壓輸入或者3.3 V電壓調節(jié)器輸出;
:器件復位。內部端口或VDD監(jiān)視器的漏極開路輸出。一個外部源可以通過將該引腳驅動為低電平至少15 s來啟動一次系統(tǒng)復位;
REGIN:5 V調節(jié)器輸入。此引腳為片內電壓調節(jié)器的輸入;
VBUS:VBUS感知輸入。該引腳應連接至一個USB網絡的VBUS信號,當連通到一個USB網絡時,該引腳上的信號為5 V;
D+:USB D+;
D-:USB D-;
TXD:異步數據輸出(UART發(fā)送);
RXD:異步數據輸入(UART接收);
CTS:清除發(fā)送控制輸入(低電平有效);
RTS:準備發(fā)送控制輸出(低電平有效);
DSR:數據設置準備好控制輸出(低電平有效);
DTR:數據終端準備好控制輸出(低電平有效);
DCD:數據傳輸檢測控制輸入(低電平有效);
RI:振鈴指示器控制輸入(低電平有效);
SUSPEND:當CP2101進入USB終止狀態(tài)時該引腳被驅動為高電平;
:當CP2101進入USB終止狀態(tài)時該引腳被驅動為低電平;
NC:這些引腳應該為未連接或接到VDD的引腳。
CP2101內部及接口連接示意圖如圖4所示。
2 FPGA內部邏輯設計
2.1 內部邏輯框圖
FPGA內部各個模塊的邏輯框圖如圖5所示。
2.2 主要邏輯設計
本設計系統(tǒng)中FPGA內部模塊主要有:Time模塊、A/D模塊、Outcontrol模塊、FIFO模塊、Bus模塊和UART模塊。其中,最主要的模塊為A/D模塊、FIFO模塊和UART模塊,下面就這三個模塊進行描述和實現(xiàn)。
2.2.1 A/D模塊
本文A/D控制模塊主要就是為了控制ADS8364芯片,提供各個控制信號,以便ADS8364芯片能夠正常進行模數轉換、A/D轉換芯片轉換后的數字信號的接收并將這些數字信號寫入對應的FIFO中進行緩存。
輸入引腳:din(15:0):16位A/D模數轉換器轉換后的數字信號的輸入引腳;full(5:0):6路FIFO的滿標識引腳,如果該引腳有效則停止往FIFO中寫入數據,如果該引腳無效則可繼續(xù)向FIFO中寫入數據,直到該引腳有效為止;ad:開始結束采集引腳;clk:5 MHz時鐘輸入引腳;rst:復位引腳。
輸出引腳:dout(1 5:0):16位的數字信號輸出引腳;wr_en(5:0):6路FIFO的寫使能引腳;xa(2:0):ADS8364的數據讀取模式選擇引腳,單通道讀取模式為本設計系統(tǒng)的讀取數據模式;ad clk:5 MHz的ADS8364的時鐘引腳;cs clk:開關模塊時鐘引腳;hold:控制AD芯片開始采集引腳;wr_clk:FIFO寫時鐘引腳;xcs0:ADS8364芯片片選引腳;xr:ADS8364讀使能引腳;xrs:ADS8364芯片復位引腳;xw:ADS8 364芯片寫使能引腳,A/D模塊在Modelsim中的仿真圖如圖6所示。
從Modelsim仿真圖可以看出,當ADS8364的讀使能信號即xr為上升沿時,則表示通過A/D轉換后的數字信號就轉入到相應的FIFO中,從而達到數字信號的緩存作用,為后續(xù)信號實時、大量地傳輸到DSP進行處理做好了準備。
2.2.2 FIFO模塊
FIFO(先入先出)既是最先寫入的數據也是最先讀出的數據的一個堆棧。FIFO具有兩個單一方向的端口,然而沒有像其他存儲器那樣,沒有地址的輸入:一個用于寫,另一個用于讀。FIFO中的數據是列隊結構,因此,會出現(xiàn)上溢和下溢現(xiàn)象。當向一個滿的FIFO中再寫入數據時,就會出現(xiàn)上溢,同時如果對一個空的FIFO進行操作時,就會出現(xiàn)下溢。
FIFO由一個雙端口存儲器塊、一個讀端口、一個寫端口和一個控制邏輯模塊組成,存儲器模塊通常采用的是SRAM,但是對某些應用也可以使用DRAM。它的結構示意圖如圖7所示。
FIFO是把存儲器結成一個環(huán),用內部的兩個指針來尋址的。FIFO的狀態(tài)并不是看兩個指針的絕對大小,而是根據他們的相對大小來進行判斷的。一個空的FIFO開始時把讀的指針和寫的指針生成相同的值,寫數據時,寫指針增加;讀地址時,讀指針增加。因此,當讀指針和寫指針相等時,可能存在兩種情況,即空狀態(tài)和滿狀態(tài)。在不同時鐘域里對FIFO空或滿狀態(tài)的判斷必須遵守的一個原則就是必須保證FIFO為滿的情況下,不能再進行寫操作,在FIFO為空的狀態(tài)下,就不能再進行讀操作,這就是異步FIFO設計的關鍵點同樣也是難點。
本文用的是指針附加位比較法,這種方法是給每一個指針的前面多加一個附加位。寫指針:當存儲完最后一個數據單元后,將向最高位即附加位進位,除最高位外的所有位都將變?yōu)榱?;讀指針:當讀完最后一個數據單元后,也將向最高位進一位。如果兩個地址指針除了最高位外其余位相同時,則表明寫指針比讀指針多循環(huán)了一次,此時馬上停止向FIFO里面再寫入數據,F(xiàn)IFO存儲器為滿狀態(tài)。如果兩個地址指針所有位完全相同,則表示寫指針和讀指針具有相同的循環(huán)次數,此時,說明FIFO存儲器為空狀態(tài),此時,就會馬上停止讀取數據。
FIFO模塊的輸入端:wdata(15:0):來自A/D的16位寫數據端;rclk:瀆數據時鐘端;rreq:讀數據允許端;rrst_n:讀復位端;wcl k:寫數據時鐘端;wreq:寫數據允許端;wrst_n:寫數據復位端。輸出端:rdata(15:0):寫入數據總線的讀數據端;rempty:讀空端;wfull:寫滿端。本文采用的每一個FIFO的模塊圖如圖8所示。
2.2.3 UART模塊
UART即為通用異步收發(fā)器,在發(fā)送時,將并行數據轉換成為串行數據;而在接收端,是將串行數據轉換為并行數據。其傳送數據主要是以幀的形式進行傳輸的,一個基本的幀包含有一個起始位、7位或8位數據、奇偶校驗位和停止位組成,UART的結構示意圖如圖9所示。
起始位按照習慣,線路閑置時的邏輯值一般都是1,起始標志的邏輯值為0。對于奇偶校驗位的值是所有數據位的異或結果,并且隨著數據會一起傳輸的,如果采用偶校驗,當數據中有奇數個1時,那么奇偶校驗位就設置為1;如果有偶數個1時,那么奇偶校驗位就設置為0。采用奇校驗,其結果恰恰相反。對于停止位的邏輯值,一般都是設置為0。
發(fā)送模塊中引腳功能為:din(7:0):8位并行數據的輸入端;sdo:并行數據轉串行數據輸出端;rst:復位信號輸入端,低電平有效;wrn:寫控制信號,高電平有效,高電平時寫入數據;tsre:并串轉換過程標志信號,低電平有效,轉換過程中始終保持為0;clk16x:時鐘信號輸入端波特率發(fā)生器產生;tbre:整個工作過程標志信號。
UART模塊發(fā)送模塊在Modelsim中的仿真圖如圖10所示。
從Modelsim仿真圖可以看出,在并串轉換過程標志信號(tsre信號)有效時,即為低電平時,則8位并行數據就實現(xiàn)了并串轉換,然后通過USB接口傳輸給上位機顯示。
接收模塊中引腳功能:rxd:串行數據輸入端口;dout[7:0]:并行數據輸出端;rdn:寫控制端口,高電平有效,此時數據輸出;data_ ready:數據是否準備好的標志端口;parity_error:校驗位是否出錯的標志端口;framing_error:幀是否出錯的標志端口。UART模塊的接收模塊在Modelsim中的仿真圖如圖11所示。
從Modelsim仿真圖可以看出,當UART寫控制信號(rdn信號)為高電平,即有效時,則串行數據就實現(xiàn)了并串轉換,將上位機的反饋信號傳輸給系統(tǒng)。
3 結語
本文基于FPGA的高速實時數據采集系統(tǒng)的設計,能夠實現(xiàn)數據的高速、實時地采集。系統(tǒng)能夠實現(xiàn)6通道同步采集,并通過FIFO解決了A/D轉換速率和DSP處理數據的速率不匹配的問題,使系統(tǒng)具有高效、快速的特點。在仿真中驗證了所設計功能的正確性,因而在高速實時數據采集方面有著廣泛的應用空間。