《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 基于FPGA的數(shù)據(jù)采集分析系統(tǒng)設(shè)計

基于FPGA的數(shù)據(jù)采集分析系統(tǒng)設(shè)計

2009-06-10
作者:肖祖勝,程 明

??? 摘? 要: FPGA是一種高密度邏輯器件。與通用的MCU相比, FPGA具有并行數(shù)據(jù)處理特性。利用該特性,能夠?qū)崿F(xiàn)對高速A/D采樣控制;同樣, 使用FPGA對采樣數(shù)據(jù)進(jìn)行頻譜分析,能夠達(dá)到比DSP芯片更高的數(shù)據(jù)處理速度。?

????關(guān)鍵詞: 采樣;MCU;FPGA

?

??? 在計算機(jī)控制系統(tǒng)中,常常需要采集各種模擬量信號,并對它們進(jìn)行模數(shù)轉(zhuǎn)換,將外部輸入的模擬信號轉(zhuǎn)換成數(shù)字信號,以便計算機(jī)進(jìn)行加工處理。在很多情況下,計算機(jī)應(yīng)用系統(tǒng)中常用普通MCU(如51系列單片機(jī)或控制型DSP)完成系統(tǒng)任務(wù)。由于MCU一般均采用指令處理結(jié)構(gòu),要想達(dá)到高的處理速度相當(dāng)困難,一般速率不會超過MHz級。而FPGA具有高速并行處理的特性,采用FPGA控制數(shù)據(jù)采集可以達(dá)到很高的采樣速率。?

??? 數(shù)字信號處理的方式一般有兩種:一種是使用單片機(jī)或DSP等MCU,通過軟件編程實(shí)現(xiàn);另外一種是利用專用邏輯電路或可編程邏輯器件實(shí)現(xiàn)。用軟件編程來實(shí)現(xiàn),雖然有很大的靈活性,但受DSP或單片機(jī)性能及程序指令順序執(zhí)行的限制,難以實(shí)現(xiàn)高速、大規(guī)模運(yùn)算;而專用集成電路芯片或FPGA卻可以實(shí)現(xiàn)很高的運(yùn)算速度,非常適合高速信號處理系統(tǒng)的應(yīng)用。?

??? 鑒于此,可以采用FPGA來完成一個模擬信號的采集分析系統(tǒng)?,F(xiàn)在用FPGA做信號處理使用的大多是比較高端的片子,價格都比較貴,像ALTERA的Stratix系列、XILINIX的Virtex系列等??紤]到成本,在本設(shè)計中嘗試使用ALTERA的低端FPGA來完成設(shè)計。?

??? 盡管ALTERA提供了很多關(guān)于數(shù)字信號處理的IPCORE,但使用是需要收費(fèi)的,而且費(fèi)用較高。通過自己編程實(shí)現(xiàn)信號處理可以節(jié)省大量的成本,本設(shè)計就是采用這一方法。?

1 器件選擇?

??? 采用的FPGA是ALTERA的EP1C6T144C8,EP1C6T144C8有144個引腳,最多可使用98個I/O口,支持JTAG調(diào)試,AS、PS下載,內(nèi)有5 980個LES,總的RAM位數(shù)是92 160 bit,內(nèi)嵌有兩個鎖相環(huán),四個全局時鐘,內(nèi)核電壓為1.5 V,輸出I/O口驅(qū)動電壓為3.3 V,支持LVDS、TTL、CMOS等電平傳輸。采用的配置芯片為EPCS1。這是一款低端的FPGA芯片,具有較高的性價比。?

??? A/D采樣芯片是TLC5510,這是一款高速A/D采樣芯片,它是一種采用CMOS工藝制造的8位高阻抗并行A/D芯片,能提供的最大采樣率為20 MS/s。由于TLC5510采用了半閃速結(jié)構(gòu)及CMOS工藝,因而大大減少了器件中比較器的數(shù)量,而且在高速轉(zhuǎn)換的同時能夠保持較低的功耗。?

2 FPGA內(nèi)部電路?

??? FPGA內(nèi)部電路分為兩大模塊。?

??? (1)采樣控制:TLC5510的采樣控制引腳只有兩個,一個是時鐘端CLOCK,一個是輸出使能端(低電有效)。根據(jù)TLC5510采樣控制的時序電路,芯片CLOCLK的下降沿采樣,經(jīng)過2.5個周期的延遲后,得到采樣結(jié)果,這時如果使能端有效,則數(shù)據(jù)送到輸出端,所以控制起來比較簡單。但是要注意的是采樣時鐘和FFT時鐘之間的匹配。?

??? 根據(jù)TLC5510的采樣時序特點(diǎn),在設(shè)計采樣控制模塊時可以只控制采樣時鐘,而輸出始終使能,就能夠完成采樣控制。?

??? 控制FPGA內(nèi)部RAM的寫入時鐘,當(dāng)完成一次采樣后,將TLC5510數(shù)據(jù)端的數(shù)據(jù)取走,這樣就完成了采樣到寫入的過程。?

??? 分頻模塊將時鐘分到和系統(tǒng)時序相適合的時鐘。采樣控制電路將采樣結(jié)果由八位變?yōu)槭唬嫒隦AM中。?

??? (2)FFT模塊:設(shè)計中的FFT模塊實(shí)現(xiàn)的是256點(diǎn)的定點(diǎn)FFT運(yùn)算,采用基-2頻率抽選法,圖1為8位算法的流程示意圖,256點(diǎn)算法與其類似。?

?

?

??? FFT模塊主要包括四個單元:蝶形變換單元,地址發(fā)生單元,RAM塊選擇單元(其中包括旋轉(zhuǎn)因子表),時鐘控制單元。圖2為整體電路結(jié)構(gòu)。?

?

?

??? ①蝶形變換單元:在蝶形變換電路中,最為核心的就是乘法器和加法器,可以通過對QUARTUS的宏單元的調(diào)用,實(shí)現(xiàn)乘法運(yùn)算,也可以自己編寫乘法器,利用Verilog的for語句實(shí)現(xiàn)16×16無符號乘法器的部分原碼如下:?

??? always@(data1,data2)?

??? ? begin?

??? ? data_out=32′d0;//初始賦0?

????for(a=5′d0;a<=5′d15;a=a+5′d1)?

??????? if(data2[a]==1)?

??????? data_out=data_out+(data1<

??? ? end?

??? 蝶形變換的輸出寫入RAM作為下一級變換的輸入。?

??? 圖3為蝶形變換單元電路。?

?

?

圖3? 蝶形變換單元電路圖

?

??? ②地址發(fā)生單元:這個單元的編寫具有一定的靈活性,在編程過程中采用的編寫方法不同,綜合出來的電路使用寄存器數(shù)量也不一樣。地址發(fā)生單元總共有八級地址。第二級地址發(fā)生單元的部分原碼如下(圖4為第二級地址發(fā)生單元仿真結(jié)果):?

?

?

??? always@(posedge clk)?

??? begin?

? ? ??if(a3==1′d1)?

??????? begin?

??????? ? a3=1′d0;//參數(shù)a3控制RAM數(shù)據(jù)和旋轉(zhuǎn)因子表數(shù)據(jù)時序配合?

??????? ? case(a2)//地址分為兩大塊塊,分別為前后128個數(shù),參數(shù)a2控制這兩塊的啟動?

??????? ? 1′d0:begin?

??????????? if(a1==8′d63)?

??????????? begin a1=8′d128;a2=a2+1′d1;addr1=a1;addr2=7′d0;end?

??????????? else?

??????????? ? begin a1=a1+8′d1;addr1=a1;addr2=addr2+7′d2;end?

??????????? end?

??????? ? 1′d1:begin?

??????????? if(a1==8′d191)?

??????????? ? begin a1=8′d0;a2=1′d0;addr1=8′d0;addr2=7′d0;end?

??????????? ? else?

??????????? ? begin a1=a1+8′d1;addr1=a1;addr2=addr2+7′d2;end?

??????? ??? end?

??????? ??endcase?

??? ? ? ??end?

??? else?

??? ? begin a3=a3+1′d1;addr1=addr1+8′d64;end?

??? end?

??? ③RAM塊選擇單元:FPGA上含有4KB RAM塊,可以使用三組RAM塊實(shí)現(xiàn)流水線(這里命名為RAM1,RAM2,RAM3)。時序開始時控制單元將采樣結(jié)果寫入RAM1,F(xiàn)FT單元運(yùn)算RAM2中數(shù)據(jù),輸出控制單元將上一次的FFT運(yùn)算結(jié)果輸出。當(dāng)整個電路完成一次采集分析后,啟動RAM選擇模塊,三組RAM的控制單元進(jìn)行輪換,采樣電路將采樣結(jié)果寫入RAM3,F(xiàn)FT運(yùn)算電路則使用RAM1,對采樣數(shù)據(jù)進(jìn)行運(yùn)算,而數(shù)據(jù)輸出電路控制RAM2將FFT的結(jié)果輸出。如此往復(fù)循環(huán),實(shí)現(xiàn)流水線作業(yè)。下面是其中RAM選擇單元的部分代碼:?

??? always@(posedge f or posedge star)//f上升沿表示一次FFT完成?

??? ? begin//開始啟動信號和FFT完成信號共同控制選擇轉(zhuǎn)換參數(shù)?

??????? if(star)?

??????? a2=2′d1;?

??? ? else?

??????? if(a2==2′d2)?

??????? a2=2′d0;?

??? ? else?

??????? a2=a2+2′d1;?

??? ? end?

??? //下為控制轉(zhuǎn)換參數(shù)控制選擇?

assign data_out1=(a2==2′d0)?data1:((a2==2′d1)?17′d0:((a2==2′d2)?data3:17′d0));?

assign data_out2=(a2==2′d0)?17′d0:((a2==2′d1)?data3:((a2==2′d2)?data1:17′d0));?

assign data_out3=(a2==2′'d0)?data3:((a2==2′d1)?data1:((a2==2′d2)?17′d0:17′d0));?

assign q_out1=(a2==2′d0)?q1:((a2==2′d1)?q3:((a2==2′d2)?q2:17′d0));?

assign q_out2=(a2==2′d0)?q2:((a2==2′d1)?q1:((a2==2′d2)?q3:17′d0));?

??? ④時鐘控制單元:這個單元主要是一些時鐘分頻電路,控制整個電路的時序,不同模塊單元之間啟動的時序不一樣,時鐘頻率也不相同。在編寫時鐘控制單元時,最主要是實(shí)現(xiàn)各模塊時序配合,以防止出現(xiàn)競爭冒險。?

??? 除了上述幾個主要的模塊單元外,還需要生成一個旋轉(zhuǎn)因子表。旋轉(zhuǎn)因子表可以有多種生成方法,考慮到芯片資源,本設(shè)計選擇使用MATLAB生成旋轉(zhuǎn)因子表,通過調(diào)用兆函數(shù),將生成的旋轉(zhuǎn)因子表固化到FPGA的ROM中。?

??? 當(dāng)整個FFT模塊數(shù)據(jù)處理完之后,就可以逆序輸出。?

??? 設(shè)計完成后,可以在RAM塊中初始化數(shù)據(jù)得到仿真結(jié)果,對設(shè)計進(jìn)行初步檢驗,圖4(b)是在RAM中初始化一個數(shù)據(jù)表后的FFT模塊仿真結(jié)果(q1實(shí)部,q2虛部)。?

??? 圖5為MATLAB仿真,與QUARTUS仿真結(jié)果相比較,可以看到結(jié)果吻合地相當(dāng)好。?

?

?

3 速度分析?

??? 系統(tǒng)采用單乘法器結(jié)構(gòu),使用鎖相環(huán)倍頻時鐘作為總時鐘輸出,當(dāng)總時鐘為200 MHz時,完成一次FFT處理的時間為21.4 μs,4 278個時鐘信號,在流水線作業(yè)下,可以完成A/D采樣速率高達(dá)12 MHz的數(shù)據(jù)處理。?

??? 本設(shè)計使用芯片邏輯資源的的77%,近4 600個邏輯單元,還使用了約39 000 bit的RAM。實(shí)驗證明,用低端的FPGA產(chǎn)品實(shí)現(xiàn)高速采樣控制和FFT處理是可行的。在實(shí)現(xiàn)過程中只要采用較好的設(shè)計思路,控制好寄存器的數(shù)目,便可以在芯片允許的資源范圍內(nèi)達(dá)到所需要的信號處理目的,實(shí)現(xiàn)設(shè)計要求。?

參考文獻(xiàn)?

[1] 吳繼華.Altera FPGA/CPLD設(shè)計(高級篇).北京:人民郵電出版社,2005.?

[2] 程佩青.數(shù)字信號處理教程[M].北京:清華大學(xué)出版社,2001.?

[3] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程.北京:北京航空航天大學(xué)出版社,2003.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。