摘要:文章以嵌入式和数据收集技能为根底,研讨规划并完结了根据ARM+FPGA体系架构面向高速实时数据收集运用的一种实用新型智能操控器。本文论说了主处理器ARM最小体系、协处理器FPGA最小体系和ARM与FPGA通讯接口等硬件体系技能的完结,以及Linux FPGA字符设备驱动程序开发、协处理器FPGA操控程序和主处理器ARM运用程序规划。智能操控器运用FPGA并行运算处理结构的优势,操控ADC进行高速数据收集。FPGA还可装备成软核处理器-Nios II嵌入式处理器,与ARM构成双核处理器体系。智能操控器经过ARM完结对FPGA的办理操控、实时数据收集和丰厚外围接口的通讯。
0 导言
自上世纪七十年代初以来,微处理器的诞生促进了计算机信息技能的迅速发展和运用。数据收集与处理是集智能传感器体系、信号收集调度与转化、计算机信息等技能的归纳,是获取信息的重要手法。跟着微处理器的遍及,数据收集技能在工业范畴中发挥着越来越重要的效果。
传统的数据收集设备操控器首要是以单片机和PC机为主。前者处理数据运算才能有限、实时性较差;后者本钱较高、灵活性差。ARM微处理器具有体积小、本钱低,功用丰厚等长处。FPGA并行运算结构,I/O资源丰厚,在高速实时数据处理方面优势显着。选用ARM+FPGA的体系架构,能够归纳两者优势,完结数据高速实时收集与处理。
ARM与FPGA作业方法为主从形式。主处理器ARM选用美国ATMEL公司的AT91SAM9260,主频作业在180MHz时可达200MIPS的处理功能。协处理
器选用的FPGA是Altera Cyclone系列EP1C6Q240I8NFPGA。FPGA作业时钟是50MHZ,能够经过设置内部锁相环使作业时钟倍频。
1 体系总体计划
智能操控器首要由ADC数据收集电路、FPGA最小体系、ARM最小体系三个部分构成。ADC选用单电源供电的14位的AD9240,采样率可达10 MSPS。它选用高速、低本钱的CMOS工艺,分辨率和速度均到达现有混合计划的水平,而功耗与本钱却低得多。协处理器选用ALTERA公司的EP1C6O240I8N芯片,经过外接两片32KB SRAM存储器、4Mbit串行装备芯片EPCS4、规范AS编程接口、JTAG调试接口构成FPGA最小体系。ARM最小体系由AT91SAM9260微处理器、运转和存储程序的1片64MBytes的SDRAM和1片256 MBytes的NandFlash、1个RS232接口和1个10/100-Base-T以太网接口构成。
体系作业原理是:首要将信号收集调度电路过来的两路信号别离送入两个ADC同步采样,ADC把模拟信号转化为14bit精度的数字信号;然后FPGA对两个通道的ADC转化后的数字信号进行预处理,选用多点采样求均匀办法滤除50Hz工频搅扰;最终把两个ADC采样数据存储到两片SRAM缓存中。ARM与FPGA通讯选用数据总线方法,经过在Linux操作体系下开发字符型FPGA设备驱动程序,然后编译或许加载到Linux内核中,ARM能够在运用层程序读取FPGA预处理后的数据,此刻FPGA内部直接把ARM的总线衔接到SRAM的总线上来读取FPGA预处理后的数据。ARM能够经过以太网和RS232接口与上位机通讯。
2 ARM和FPGA通讯接口规划
主处理器ARM地点的中心板担任整个体系的操控与办理。智能操控器与上位机的通讯接口串口、以太网、CAN由此板引出。中心板与扩展板协处理器FPGA的通讯选用总线方法。这种通讯方法的实质是FPGA作为ARM的外设SRAM,ARM拜访存储器,进行读和写操作。衔接如图2所示。
ARM与FPGA经过总线相连,ARM的数据线D0:D15、地址线A1:A14和片选NCS4、NCS5与FPGA相连,别的2片SRAM直接与FPGA相连。NCS4操控读写FPGA内部状况寄存器和指令寄存器。NCS5操控FPGA读写两片SRAM中寄存的数据。一切数据信息都经过DATA[0:15]双向数据总线传输。
NCS4片选有用对应ARM的地址映射为0X5000 0000-0X5000 8000,NCS5片选有用地址对应ARM的地址映射为0x60000000-0x6000 8000,FPGA此刻实质上相当于ARM炔看娲⑵鳌T诘刂贩段内恣意选取地址作为ARM与FPGA通讯的FPGA内部寄存器地址。这些寄存器有ARM向FPGA内部写寄存器,也有ARM从FPGA内部读寄存器。
主处理器ARM要想从0X6000 0000-0x6000 8000地址范围内直接读出两片SRAM中存储的ADC采样预处理后的的数据,需求有协处理器FPGA的帮忙合作。
这样就清晰了协处理器FPGA在与主处理器ARM通讯时需求完结的使命:1)解析主处理器ARM写FPGA寄存器的指令,履行相应操作;2)将履行操作后的一些状况信息写入相应的FPGA内部寄存器供主处理器查询操作成果:3)帮忙合作主处理器ARM读取两片SRAM中存储的ADC收集预处理后的数据。
3 体系软件规划
智能操控器软件包含Linux FPGA字符型设备驱动程序、主处理器ARM运用程序、FPGA数据集及预处理存储程序。软件体系结构框图如图3所示。
3.1 FPGA设备驱动程序
Linux设备驱动被分为三类:字符设备、块设备和网络设备。字符设备是以字符为单位输入输出数据的设备。FPGA设备驱动程序为字符型设备驱动程序,其根本框架为:1)界说一个结构体static structfile operations变量,其榷ㄒ逡恍┥璞傅拇蚩、封闭、读、写、操控函数;2)在结构体外别离完结结构体中界说的这些函数;3)向内核中注册或删去驱动模块。Linux内核中一个字符设备用cdev数据结构来描绘和办理设备文件。智能操控器的协处理器FPGA用作主处理器ARM外部静态存储器SRAM。因而,主处理器ARM能够经过静态存储操控器(SMC)发生信号操控外部存储设备或许外围接口设备来进行读写操作。FPGA字符型设备驱动程序能够完结操控FPGA模块,完结数据收集,最为要害的是初始化FPGA模块,装备主处理器ARM的SMC来完结FPGA总线驱动。可参照ARM静态存储操控器读、写时序。
由上图可知首要是装备静态存储操控器SMC_SETUP、SMC_PULSE、SMC_CYCLE、SMC_MODE四个参数。装备是经过函数static inline void at91_sys write(unsigned intreg_effset,unsigned long value)完结,详细装备如下:
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字符设备驱动程序初始化最为要害的装备。剩余的是在file operation结构下编写驱动函数,结构中的每个成员除了owner有必要指向驱动中的函数。其间最为重要的内核态函数是staticssize_t fpga_arm_read(struct file*filp,char_user*buf,size_tsize,loff_ t*ppos),它对应运用层的函数read。驱动程序从FPGA读取数据运用readw函数,完结从内存映射的I/O空间读取16位数据。copy_to_user(buf, (void*)(read_mem),size)仿制数据从内核空间到用户空间。FPGA字符设备驱动程序根本完结了操控和办理FPGA读取状况信息和两路ADC收集的数据。
3.2 协处理器FPGA操控程序
协处理器FPGA操控程序分为三个部分:操控ADC数据收集模块、操控读写SRAM模块和FPGA与ARM总线通讯模块。其间FPGA与ARM总线通讯模块坐落顶层模块,操控ADC数据收集模块、操控读写SRAM模块的是底层模块。顶层模块首要是例化底层模块,然后进行数字信号归纳处理。
操控ADC数据收集模块,操控并行ADC比较简单,正常作业需求时钟驱动ADC CLK,在编写ADC采样程序时最为要害的是留意在ADC CLK上升沿读取收集的数据才是安稳牢靠的。FPGA会对两路ADC收集的数据进行多点求均匀的预处理,首要是滤除50Hz的工频搅扰,然后写入SRAM存储。
操控读写SRAM模块,FPGA写SRAM与读SRAM操作是十分相似的,SRAM类型是CY7C1021DV33,作业时片选信号CE要拉低。读操作时留意OE信号先拉低再拉高,在其上升沿,读取数据。写操作时留意WE信号先拉低再拉高,在其上升沿,写入数据。FPGA读SRAM时需求重视sram_cs(片选)、sram_oe(读操控)、sram_addr(地址线)和sram1_data(16bit数据线),将sram_cs、sram_oe一起拉低,一起给地址线sram_addr赋值,一个时钟后数据端口sram_data的数据就有用了。
FPGA与ARM通讯模块较为杂乱,首要,是ARM向FPGA发操控指令。ARM写FPGA内部寄存器时比较重要的信号有:NCS4(片选)、at9260_wr(写信号)、at9260_addr(地址线)、at9260_data(数据线),当NCS4=0at9260_wr=0时,意味着ARM9260正在写FPGA寄存器,详细写哪个寄存器由地址信号at9260_addr决议,这样能够将at9260_data写入到相应地址处对应的寄存器。
其次,ARM读FPGA内部状况寄存器,与ARM写FPGA寄存器是十分相似的,当NCS4=0 at9260_rd=0时,意味着ARM9260正在读FPGA寄存器,这时咱们将寄存器的值赋给at9260_data即可,at9260_data是双向IO,在不读时需求置为高阻态。
最终,ARM获取两片SRAM存储的预处理后的数据,ARM的操控信号是NCS5、at9260_rd、at9260_addr、A14,FPGA将这些信号转化为FPGA读SRAM的信号,然后将FPGA读到的数据传给ARM,这儿FPGA起到数据中转的效果。
3.3 主处理器ARM运用程序
主处理器ARM的运用程序是整个软件体系的操控中心。运用程序由两个线程构成:main主线程和data_recv线程。main主线程首要是创立线程,向FPGA发送操控指令;data_recv线程接纳FPGA状况信息和FPGA预处理后ADC收集的数据。运用程序是经过文件描绘符fd_fpga来操控和办理协处理器FPGA设备。由于在主处理器ARM移植了操作体系Linux,内核版别为Kernel 2.6.30,所以运用程序的开发是在Linux操作体系Ubuntul2.04 LTS版别下,运用开发软件是Eclipse C/C++。设置Eclipse运用穿插编译器arm-none-linux-gnueabi-gcc和Release装备生成二进制可履行文件。然后能够经过Tftp服务下载到方针板上。
4 结束语
本文论说了根据ARM+FPGA体系架构的高速实时数据收集智能操控器的规划与完结。其结合ARM和FPGA两者的优势,具有更好的运算处理功能,丰厚的外围规范接口。体系采样率达10MSPS,满意高速实时性的要求。具有很高的运用价值。