高速實(shí)際據采集智能控制器的設計與實(shí)現
摘要:文章以嵌入式和數據采集技術(shù)為基礎,研究設計并實(shí)現了基于ARM+FPGA體系架構面向高速實(shí)時(shí)數據采集應用的一種實(shí)用新型智能控制器。本文闡述了主處理器ARM最小系統、協(xié)處理器FPGA最小系統和ARM與FPGA通信接口等硬件系統技術(shù)的實(shí)現,以及Linux FPGA字符設備驅動(dòng)程序開(kāi)發(fā)、協(xié)處理器FPGA控制程序和主處理器ARM應用程序設計。智能控制器運用FPGA并行運算處理結構的優(yōu)勢,控制ADC進(jìn)行高速數據采集。FPGA還可配置成軟核處理器-Nios II嵌入式處理器,與ARM構成雙核處理器系統。智能控制器通過(guò)ARM實(shí)現對FPGA的管理控制、實(shí)時(shí)數據采集和豐富外圍接口的通信。
本文引用地址:http://dyxdggzs.com/article/201610/306781.htm0 引言
自上世紀七十年代初以來(lái),微處理器的誕生促進(jìn)了計算機信息技術(shù)的迅速發(fā)展和應用。數據采集與處理是集智能傳感器系統、信號采集調理與轉換、計算機信息等技術(shù)的綜合,是獲取信息的重要手段。隨著(zhù)微處理器的普及,數據采集技術(shù)在工業(yè)領(lǐng)域中發(fā)揮著(zhù)越來(lái)越重要的作用。
傳統的數據采集設備控制器主要是以單片機和PC機為主。前者處理數據運算能力有限、實(shí)時(shí)性較差;后者成本較高、靈活性差。ARM微處理器具有體積小、成本低,功能豐富等優(yōu)點(diǎn)。FPGA并行運算結構,I/O資源豐富,在高速實(shí)時(shí)數據處理方面優(yōu)勢明顯。采用ARM+FPGA的系統架構,可以綜合兩者優(yōu)勢,實(shí)現數據高速實(shí)時(shí)采集與處理。
ARM與FPGA工作方式為主從模式。主處理器ARM選用美國ATMEL公司的AT91SAM9260,主頻工作在180MHz時(shí)可達200MIPS的處理性能。協(xié)處理
器選用的FPGA是Altera Cyclone系列EP1C6Q240I8NFPGA。FPGA工作時(shí)鐘是50MHZ,可以通過(guò)設置內部鎖相環(huán)使工作時(shí)鐘倍頻。
1 系統總體方案
智能控制器主要由ADC數據采集電路、FPGA最小系統、ARM最小系統三個(gè)部分構成。ADC選用單電源供電的14位的AD9240,采樣率可達10 MSPS。它采用高速、低成本的CMOS工藝,分辨率和速度均達到現有混合方案的水平,而功耗與成本卻低得多。協(xié)處理器選用ALTERA公司的EP1C6O240I8N芯片,通過(guò)外接兩片32KB SRAM存儲器、4Mbit串行配置芯片EPCS4、標準AS編程接口、JTAG調試接口構成FPGA最小系統。ARM最小系統由AT91SAM9260微處理器、運行和存儲程序的1片64MBytes的SDRAM和1片256 MBytes的NandFlash、1個(gè)RS232接口和1個(gè)10/100-Base-T以太網(wǎng)接口構成。

系統工作原理是:首先將信號采集調理電路過(guò)來(lái)的兩路信號分別送入兩個(gè)ADC同步采樣,ADC把模擬信號轉化為14bit精度的數字信號;然后FPGA對兩個(gè)通道的ADC轉換后的數字信號進(jìn)行預處理,采用多點(diǎn)采樣求平均方法濾除50Hz工頻干擾;最后把兩個(gè)ADC采樣數據存儲到兩片SRAM緩存中。ARM與FPGA通信采用數據總線(xiàn)方式,通過(guò)在Linux操作系統下開(kāi)發(fā)字符型FPGA設備驅動(dòng)程序,然后編譯或者加載到Linux內核中,ARM可以在應用層程序讀取FPGA預處理后的數據,此時(shí)FPGA內部直接把ARM的總線(xiàn)連接到SRAM的總線(xiàn)上來(lái)讀取FPGA預處理后的數據。ARM可以通過(guò)以太網(wǎng)和RS232接口與上位機通信。
2 ARM和FPGA通信接口設計
主處理器ARM所在的核心板負責整個(gè)系統的控制與管理。智能控制器與上位機的通信接口串口、以太網(wǎng)、CAN由此板引出。核心板與擴展板協(xié)處理器FPGA的通信采用總線(xiàn)方式。這種通信方式的本質(zhì)是FPGA作為ARM的外設SRAM,ARM訪(fǎng)問(wèn)存儲器,進(jìn)行讀和寫(xiě)操作。連接如圖2所示。

ARM與FPGA通過(guò)總線(xiàn)相連,ARM的數據線(xiàn)D0:D15、地址線(xiàn)A1:A14和片選NCS4、NCS5與FPGA相連,另外2片SRAM直接與FPGA相連。NCS4控制讀寫(xiě)FPGA內部狀態(tài)寄存器和命令寄存器。NCS5控制FPGA讀寫(xiě)兩片SRAM中存放的數據。所有數據信息都通過(guò)DATA[0:15]雙向數據總線(xiàn)傳輸。
NCS4片選有效對應ARM的地址映射為0X5000 0000-0X5000 8000,NCS5片選有效地址對應ARM的地址映射為0x60000000-0x6000 8000,FPGA此時(shí)實(shí)質(zhì)上相當于A(yíng)RM炔看媧⑵鰲T詰刂販段內任意選取地址作為ARM與FPGA通信的FPGA內部寄存器地址。這些寄存器有ARM向FPGA內部寫(xiě)寄存器,也有ARM從FPGA內部讀寄存器。
主處理器ARM要想從0X6000 0000-0x6000 8000地址范圍內直接讀出兩片SRAM中存儲的ADC采樣預處理后的的數據,需要有協(xié)處理器FPGA的協(xié)助配合。
這樣就明確了協(xié)處理器FPGA在與主處理器ARM通信時(shí)需要完成的任務(wù):1)解析主處理器ARM寫(xiě)FPGA寄存器的命令,執行相應操作;2)將執行操作后的一些狀態(tài)信息寫(xiě)入相應的FPGA內部寄存器供主處理器查詢(xún)操作結果:3)協(xié)助配合主處理器ARM讀取兩片SRAM中存儲的ADC采集預處理后的數據。
3 系統軟件設計
智能控制器軟件包括Linux FPGA字符型設備驅動(dòng)程序、主處理器ARM應用程序、FPGA數據集及預處理存儲程序。軟件系統結構框圖如圖3所示。

3.1 FPGA設備驅動(dòng)程序
Linux設備驅動(dòng)被分為三類(lèi):字符設備、塊設備和網(wǎng)絡(luò )設備。字符設備是以字符為單位輸入輸出數據的設備。FPGA設備驅動(dòng)程序為字符型設備驅動(dòng)程序,其基本框架為:1)定義一個(gè)結構體static structfile operations變量,其榷ㄒ逡恍┥璞傅拇蚩、關(guān)閉、讀、寫(xiě)、控制函數;2)在結構體外分別實(shí)現結構體中定義的這些函數;3)向內核中注冊或刪除驅動(dòng)模塊。Linux內核中一個(gè)字符設備用cdev數據結構來(lái)描述和管理設備文件。智能控制器的協(xié)處理器FPGA用作主處理器ARM外部靜態(tài)存儲器SRAM。因此,主處理器ARM可以通過(guò)靜態(tài)存儲控制器(SMC)產(chǎn)生信號控制外部存儲設備或者外圍接口設備來(lái)進(jìn)行讀寫(xiě)操作。FPGA字符型設備驅動(dòng)程序能夠完成控制FPGA模塊,完成數據采集,最為關(guān)鍵的是初始化FPGA模塊,配置主處理器ARM的SMC來(lái)實(shí)現FPGA總線(xiàn)驅動(dòng)??蓞⒄誂RM靜態(tài)存儲控制器讀、寫(xiě)時(shí)序。


由上圖可知主要是配置靜態(tài)存儲控制器SMC_SETUP、SMC_PULSE、SMC_CYCLE、SMC_MODE四個(gè)參數。配置是通過(guò)函數static inline void at91_sys write(unsigned intreg_effset,unsigned long value)實(shí)現,詳細配置如下:
at91_sys_write(AT91_SMC_SETUP(5),AT91_SMC_NWESETUP(0x02)|AT91_SMC_NCS_WRSETUP_(0x00)|AT91_SMC_NRDSETUP_(0x00)|AT91_SMC
_NCS_RDSETUP_(0X00));
at91_sys_write(AT91_SMC_PULSE(5),AT91_SMC_NWEPULSE_(0x06)|AT91_SMC_NCS_WRPULSE(0x0A)|AT91_SMC_NRDPULSE(0x0A)|AT91_SMC_ NCS_RDPULSE_(0x0A));
at91_sys_write(AT91_SMC_CYCLE(5),AT91_SMC_NWECYCLE_(0X0A)|AT91_SMC_NRDCYCLE_(0X0A));
at91_sys_write(AT91_SMC_MODE(5),AT91_SMC_READMODE|AT91_SMC_WRITEMODE|AT91_SMC_EXNWMODE_DISABLE|AT91_SMC_DBW_16|AT91_ SMC_TDF_(1));
申請I/O內存:
request_mem_region((unsigned long)sram_buf_1,SRAM_BUFSIZE,“fpga_arm”);
request_mem_region((unsigned long)sram_buf_2,SRAM_BUFSIZE,“fpga_arm”);
FPGA寄存器地址映射:
sram_buf_1=(unsigned char*)ioremap(0x60000000,SRAM_BUFSIZE);
sram_buf_2=(unsigned char*)ioremap(0x60004000,SRAM_BUFSIZE);
以上為FPGA字符設備驅動(dòng)程序初始化最為關(guān)鍵的配置。剩下的是在file operation結構下編寫(xiě)驅動(dòng)函數,結構中的每個(gè)成員除了owner必須指向驅動(dòng)中的函數。其中最為重要的內核態(tài)函數是staticssize_t fpga_arm_read(struct file*filp,char_user*buf,size_tsize,loff_ t*ppos),它對應應用層的函數read。驅動(dòng)程序從FPGA讀取數據使用readw函數,完成從內存映射的I/O空間讀取16位數據。copy_to_user(buf, (void*)(read_mem),size)復制數據從內核空間到用戶(hù)空間。FPGA字符設備驅動(dòng)程序基本實(shí)現了控制和管理FPGA讀取狀態(tài)信息和兩路ADC采集的數據。
3.2 協(xié)處理器FPGA控制程序
協(xié)處理器FPGA控制程序分為三個(gè)部分:控制ADC數據采集模塊、控制讀寫(xiě)SRAM模塊和FPGA與ARM總線(xiàn)通信模塊。其中FPGA與ARM總線(xiàn)通信模塊位于頂層模塊,控制ADC數據采集模塊、控制讀寫(xiě)SRAM模塊的是底層模塊。頂層模塊主要是例化底層模塊,然后進(jìn)行數字信號綜合處理。
控制ADC數據采集模塊,控制并行ADC比較簡(jiǎn)單,正常工作需要時(shí)鐘驅動(dòng)ADC CLK,在編寫(xiě)ADC采樣程序時(shí)最為關(guān)鍵的是注意在A(yíng)DC CLK上升沿讀取采集的數據才是穩定可靠的。FPGA會(huì )對兩路ADC采集的數據進(jìn)行多點(diǎn)求平均的預處理,主要是濾除50Hz的工頻干擾,然后寫(xiě)入SRAM存儲。
控制讀寫(xiě)SRAM模塊,FPGA寫(xiě)SRAM與讀SRAM操作是非常相似的,SRAM型號是CY7C1021DV33,工作時(shí)片選信號CE要拉低。讀操作時(shí)注意OE信號先拉低再拉高,在其上升沿,讀取數據。寫(xiě)操作時(shí)注意WE信號先拉低再拉高,在其上升沿,寫(xiě)入數據。FPGA讀SRAM時(shí)需要關(guān)注sram_cs(片選)、sram_oe(讀控制)、sram_addr(地址線(xiàn))和sram1_data(16bit數據線(xiàn)),將sram_cs、sram_oe同時(shí)拉低,同時(shí)給地址線(xiàn)sram_addr賦值,一個(gè)時(shí)鐘后數據端口sram_data的數據就有效了。
FPGA與ARM通信模塊較為復雜,首先,是ARM向FPGA發(fā)控制命令。ARM寫(xiě)FPGA內部寄存器時(shí)比較重要的信號有:NCS4(片選)、at9260_wr(寫(xiě)信號)、at9260_addr(地址線(xiàn))、at9260_data(數據線(xiàn)),當NCS4=0at9260_wr=0時(shí),意味著(zhù)ARM9260正在寫(xiě)FPGA寄存器,具體寫(xiě)哪個(gè)寄存器由地址信號at9260_addr決定,這樣可以將at9260_data寫(xiě)入到相應地址處對應的寄存器。
其次,ARM讀FPGA內部狀態(tài)寄存器,與ARM寫(xiě)FPGA寄存器是非常類(lèi)似的,當NCS4=0 at9260_rd=0時(shí),意味著(zhù)ARM9260正在讀FPGA寄存器,這時(shí)我們將寄存器的值賦給at9260_data即可,at9260_data是雙向IO,在不讀時(shí)需要置為高阻態(tài)。
最后,ARM獲取兩片SRAM存儲的預處理后的數據,ARM的控制信號是NCS5、at9260_rd、at9260_addr、A14,FPGA將這些信號轉換為FPGA讀SRAM的信號,然后將FPGA讀到的數據傳給ARM,這里FPGA起到數據中轉的作用。
3.3 主處理器ARM應用程序
主處理器ARM的應用程序是整個(gè)軟件系統的控制核心。應用程序由兩個(gè)線(xiàn)程構成:main主線(xiàn)程和data_recv線(xiàn)程。main主線(xiàn)程主要是創(chuàng )建線(xiàn)程,向FPGA發(fā)送控制命令;data_recv線(xiàn)程接收FPGA狀態(tài)信息和FPGA預處理后ADC采集的數據。應用程序是通過(guò)文件描述符fd_fpga來(lái)控制和管理協(xié)處理器FPGA設備。因為在主處理器ARM移植了操作系統Linux,內核版本為Kernel 2.6.30,所以應用程序的開(kāi)發(fā)是在Linux操作系統Ubuntul2.04 LTS版本下,使用開(kāi)發(fā)軟件是Eclipse C/C++。設置Eclipse使用交叉編譯器arm-none-linux-gnueabi-gcc和Release配置生成二進(jìn)制可執行文件。然后可以通過(guò)Tftp服務(wù)下載到目標板上。

4 結束語(yǔ)
本文論述了基于A(yíng)RM+FPGA體系架構的高速實(shí)時(shí)數據采集智能控制器的設計與實(shí)現。其結合ARM和FPGA兩者的優(yōu)勢,具有更好的運算處理性能,豐富的外圍標準接口。系統采樣率達10MSPS,滿(mǎn)足高速實(shí)時(shí)性的要求。具有很高的應用價(jià)值。
評論