一、引言
傳統(tǒng)的數(shù)據(jù)采集系統(tǒng),通常采用單片機或DSP作為主要控制模塊,控制ADC、存儲器和其他外圍電路的工作。隨著數(shù)據(jù)采集對速度性能的要求越來越高,傳統(tǒng)采集系統(tǒng)的弊端就越來越明顯。單片機的時鐘頻率較低且需用軟件實現(xiàn)數(shù)據(jù)采集,這使得采集速度和效率降低,此外軟件運行時間在整個采樣時間中也占很大的比例。而FPGA(現(xiàn)場可編程門陣列)有單片機無法比擬的優(yōu)勢。FPGA時鐘頻率高,內(nèi)部延時小,全部控制邏輯由硬件完成,速度快、效率高。在此技術(shù)基礎(chǔ)上,為了滿足數(shù)據(jù)采集對速度的要求,本文就著重介紹了一種基于FPGA,采用VHDL硬件描述語言設(shè)計實現(xiàn)的高速數(shù)據(jù)采集系統(tǒng)。
二、系統(tǒng)的整體硬件設(shè)計
本數(shù)據(jù)系統(tǒng)以FPGA為中心、主要包括數(shù)據(jù)采集電路、通信接口電路、電源模塊等幾部分。其中中心控制邏輯主要負責(zé)產(chǎn)生各部分的控制信號,完成對整個系統(tǒng)的邏輯控制和對來自面板的工作模式控制信號的軟件消抖,并對所采數(shù)據(jù)進行編禎處理,電源模塊為該系統(tǒng)供電的同時,也為前端傳感器提供了+9V的供電電源
系統(tǒng)采用60MHz晶振輸入,模式控制信號來自面板上的控制開關(guān),分別產(chǎn)生系統(tǒng)自檢、采集開始、及手動復(fù)位三個控制信號。系統(tǒng)的原理框圖如圖1所示:
面板上有三個控制開關(guān),分別為“復(fù)位”開關(guān)RST, “系統(tǒng)自檢”開關(guān)S1和“采集開始”開關(guān)START。RST信號為外部的手動復(fù)位,當(dāng)撥至高電平時,對系統(tǒng)所有的計數(shù)器清零;“系統(tǒng)自檢”開關(guān)閉合時采集系統(tǒng)內(nèi)部1路預(yù)知信號完成系統(tǒng)自檢功能;“采集開始”開關(guān)有效時,系統(tǒng)開始對24路模擬信號進行采集,當(dāng)“系統(tǒng)自檢”開關(guān)和“采集開始”同時有效時,對系統(tǒng)進行復(fù)位。
1. 數(shù)據(jù)采集部
該部分主要由一片高速AD芯片和一片Altera的FPGA構(gòu)成。由于本系統(tǒng)設(shè)計采樣速度最大為50M,根據(jù)采樣定理,采樣頻率至少應(yīng)該在100M以上,所以AD芯片采用的是MAXIM公司的MAX100。該芯片轉(zhuǎn)換精度8位,1.8v電源供電,低功耗,最高工作速度為250MSPS。經(jīng)過測試可以很好的滿足系統(tǒng)測試要求。
通常在低速數(shù)據(jù)采集系統(tǒng)中常使用MCU作為CPU來控制。但在高速數(shù)據(jù)采集系統(tǒng)中,往往會受到MCU的影響,而且隨著速度的提高ADC,RAM,MCU之間的時序同步問題也會顯示出來。因此本系統(tǒng)使用了高速、多I/O口的FPGA芯片來控制ADC和RAM等,從而很好的解決了采樣速度過高和時序同步的問題。
FPGA(Field Programmable Gate Array)是從PAL,GAL發(fā)展而來的陣列型高密度PLO器件,具有高密度,高速度,低功耗等特點。特別適合實現(xiàn)復(fù)雜的組合邏輯。根據(jù)系統(tǒng)要求,本系統(tǒng)中使用的FPGA芯片型號為Altera公司的EPF10K10TC144-3。它的可用門數(shù)7000個,最大用戶I/O數(shù)134,計數(shù)器的工作頻率可達200MHz。在該系統(tǒng)中FPGA實現(xiàn)的功能邏輯主要有:
(1) 完成對來自面板的工作模式控制信號的軟件消抖。
(2) 接收采集模式開關(guān)發(fā)出的開始采樣信號START,實現(xiàn)對ADC的控制,開始AD轉(zhuǎn)換;
(3) 當(dāng)FIFO存儲器半滿時,發(fā)出一個Half Flag信號,通知USB芯片可以讀數(shù),F(xiàn)IFO存儲器為空時,發(fā)出一個Empty Flag信號,提示USB芯片停止讀數(shù)。
FPGA的功能邏輯使用VHDL語言來實現(xiàn),這是一種硬件描述語言,主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。使用VHDL語言設(shè)計硬件電路時,可以使設(shè)計者免除編寫邏輯表達式或真值表的工作。這樣使硬件電路設(shè)計的難度有了大幅度的降低,從而可以提高工作效率,縮短硬件電路的設(shè)計周期。使用VHDL語言實現(xiàn)的采集系統(tǒng)FPGA內(nèi)部原理圖如圖2所示。
圖中共有兩個模塊,xd模塊主要完成對輸入信號的消抖,能使系統(tǒng)工作更穩(wěn)定。Sample模塊是本系統(tǒng)的核心部分,它主要負責(zé)各部分的邏輯控制及AD采樣數(shù)據(jù)的編禎處理。
2. 通信接口部分
通用串行總線USB是一種新型的通信標(biāo)準(zhǔn),它具有使用靈活,連接方便,通信速度快,能獨立供電等特點。目前,越來越多的計算機外圍設(shè)備開始采用USB的通信接口。由于本系統(tǒng)采集速度高數(shù)據(jù)量大,因此,也采用了USB通信接口。
目前生產(chǎn)USB芯片的廠商很多,主要的產(chǎn)品有CYPRESS公司的EZ-USB,PHIPILIPS公司的PDUSBD12,National Semiconductor公司r的USB9604等。本設(shè)計采用的是CYPRESS公司的帶8051內(nèi)核單片機的EZ-USB系列參CY7C68013。該芯片采用改進的8051內(nèi)核,與標(biāo)準(zhǔn)的8051指令完全兼容,除此之外內(nèi)部還集成了存儲器、智能USB接口引擎、USB收發(fā)模塊、串行口等。
在USB下芯片CY7C68013和EPF10K10TC144-3FPGA之間采用了FIFO(First in First out SRAM)芯片作為數(shù)據(jù)交換的緩沖連接,這樣可以使USB接口芯片和FPGA之間的最大數(shù)據(jù)交換速度超過USB總線的速度,使之不會成為數(shù)據(jù)傳輸?shù)钠款i,從而使FPGA和主機之間的數(shù)據(jù)傳輸速度只受USB協(xié)議限制。
由于CY7C68013芯片內(nèi)嵌8位8051處理器,因此使用兩片F(xiàn)IFO芯片實現(xiàn)FPGA和USB接口之間的雙向通信。FIFO芯片選用具有16K×9bits內(nèi)存的IDT7206,從FPGA傳輸?shù)臄?shù)據(jù)首先保存在FIFO中,然后再由CY7C68013帶走,這樣使數(shù)據(jù)的傳輸不會出現(xiàn)堵塞的情況。對與IDT7206只具有雙端數(shù)據(jù)總線和狀態(tài)信號,沒有地址總線,所以FPGA采用I/O譯碼的方式直接訪問FIFO。FIFO的狀態(tài)信號有空、半滿和滿,它們都是低電平有效,通過這三個信號就可以靈活的控制FIFO的讀寫。
CYPRESS公司為EZ-USB系列的芯片提供了固件程序和驅(qū)動程序模塊和例程。固件程序與驅(qū)動程序可以獨立的被調(diào)試,且調(diào)試方便,相對于其它USB芯片,可以提高開發(fā)速度。
三、 FPGA主要模塊的邏輯實現(xiàn)
FPGA系統(tǒng)的硬件設(shè)計模塊主要有消抖模塊、采集模塊兩部分。采集模塊又包括邏輯控制模塊、時鐘邏輯運算模塊、時鐘生成模塊等。下面主要就消抖和FIFO控制部分進行描述和實現(xiàn)。
1.消抖模塊設(shè)計
為了系統(tǒng)各工作狀態(tài)更穩(wěn)定,當(dāng)FPGA接受到一個工作狀態(tài)信號時,啟動一個計數(shù)器,若計數(shù)器能計到設(shè)置的最大值則認為該工作狀態(tài)信號有效,否則認為無效。消抖的FPGA具體實現(xiàn)方法如下所示
process(reset,fosc)
VARIABLE count : INTEGER range 0 to 50;
begin
if reset = ‘0’ then
count := 0;
outcheck 《= ‘0’;
elsif fosc‘event and fosc=’1‘ then
if incheck=’0‘ then
if count 《 50 then
count := count + 1;
outcheck 《= ’0‘;
else
count := count;
outcheck 《= ’1‘;
end if;
else
count := 0;
outcheck 《= ’0‘;
end if;
end if;
end process;
仿真結(jié)果如圖3所示:
由圖3可以看出通過此方法可以消除因工作狀態(tài)信號時抖動而引起的誤操作,保證了系統(tǒng)工作的穩(wěn)定性
2.FIFO控制模塊設(shè)計
系統(tǒng)首先把采集到的數(shù)據(jù)緩存到FIFO里面,當(dāng)存儲達到用戶設(shè)定的余度時,便送出一個請求信號,通知USB芯片讀取數(shù)據(jù)。FIFO余度值的大小由用戶自己設(shè)定,但此值原則上不能過于接近FIFO的深度。因為在USB芯片響應(yīng)這一請求信號,進行讀數(shù)處理的過程中,F(xiàn)PGA仍在進行數(shù)據(jù)的采集和存儲。如果余度值過于接近FIFO深度,F(xiàn)IFO容易產(chǎn)生溢出的錯誤。因此本系統(tǒng)中以FIFO芯片IDT7206的半滿作為設(shè)定的余度,當(dāng)IDT7206存儲數(shù)據(jù)達到其容量的一半時,F(xiàn)PGA就會送出一個請求USB讀取數(shù)據(jù)的信號。FIFO控制模塊的信號有:異步清零aclr;讀寫數(shù)據(jù)q/data;讀寫使能rden/wren;空/半滿標(biāo)志ef/hf。數(shù)據(jù)data在寫使能有效的情況下按照寫時鐘往FIFO里面存儲,在讀使能時,數(shù)據(jù)按照讀時鐘的速度從q數(shù)據(jù)總線上輸出。其實現(xiàn)和仿真如圖4所示:
由圖4可以看出,讀使能rden在半滿信號下降沿到來后才有效,即數(shù)據(jù)才開始被USB芯片從FIFO中讀出,在空信號下降沿到來后讀使能rden信號無效,數(shù)據(jù)停止讀取。而整個過程FPGA都在進行數(shù)據(jù)的采集。
四、結(jié) 論
本文完成高速、多通道的數(shù)據(jù)采集系統(tǒng)的FPGA設(shè)計,該系統(tǒng)具有電路簡單、體積小等優(yōu)點。利用EDA工具和語言對FPGA進行設(shè)計、仿真和驗證,這便于設(shè)計的修改和優(yōu)化,大大縮短了產(chǎn)品的開發(fā)設(shè)計周期。由FPGA具有在線編程的特點可以依據(jù)現(xiàn)場的具體情況,對FPGA的內(nèi)部邏輯配置進行修改,進一步增加了系統(tǒng)應(yīng)用的靈活性,經(jīng)測試該設(shè)計達到了滿意的效果,是一種比較理想的多通道、高速數(shù)據(jù)采集方案。
責(zé)任編輯:gt
評論
查看更多