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

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

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

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

????關鍵詞: 采樣,;MCU;FPGA

?

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

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

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

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

1 器件選擇?

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

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

2 FPGA內部電路?

??? FPGA內部電路分為兩大模塊,。?

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

??? 根據TLC5510的采樣時序特點,在設計采樣控制模塊時可以只控制采樣時鐘,,而輸出始終使能,,就能夠完成采樣控制。?

??? 控制FPGA內部RAM的寫入時鐘,,當完成一次采樣后,,將TLC5510數據端的數據取走,這樣就完成了采樣到寫入的過程,。?

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

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

?

?

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

?

?

??? ①蝶形變換單元:在蝶形變換電路中,,最為核心的就是乘法器和加法器,可以通過對QUARTUS的宏單元的調用,,實現(xiàn)乘法運算,,也可以自己編寫乘法器,利用Verilog的for語句實現(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ā)生單元:這個單元的編寫具有一定的靈活性,,在編程過程中采用的編寫方法不同,綜合出來的電路使用寄存器數量也不一樣,。地址發(fā)生單元總共有八級地址,。第二級地址發(fā)生單元的部分原碼如下(圖4為第二級地址發(fā)生單元仿真結果):?

?

?

??? always@(posedge clk)?

??? begin?

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

??????? begin?

??????? ? a3=1′d0;//參數a3控制RAM數據和旋轉因子表數據時序配合?

??????? ? case(a2)//地址分為兩大塊塊,,分別為前后128個數,,參數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塊實現(xiàn)流水線(這里命名為RAM1,,RAM2,,RAM3)。時序開始時控制單元將采樣結果寫入RAM1,,F(xiàn)FT單元運算RAM2中數據,輸出控制單元將上一次的FFT運算結果輸出,。當整個電路完成一次采集分析后,啟動RAM選擇模塊,,三組RAM的控制單元進行輪換,采樣電路將采樣結果寫入RAM3,,F(xiàn)FT運算電路則使用RAM1,,對采樣數據進行運算,而數據輸出電路控制RAM2將FFT的結果輸出,。如此往復循環(huán),,實現(xiàn)流水線作業(yè)。下面是其中RAM選擇單元的部分代碼:?

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

??? ? begin//開始啟動信號和FFT完成信號共同控制選擇轉換參數?

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

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

??? ? else?

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

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

??? ? else?

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

??? ? end?

??? //下為控制轉換參數控制選擇?

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)),;?

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

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

??? 當整個FFT模塊數據處理完之后,,就可以逆序輸出,。?

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

??? 圖5為MATLAB仿真,,與QUARTUS仿真結果相比較,可以看到結果吻合地相當好,。?

?

?

3 速度分析?

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

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

參考文獻?

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

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

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

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