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