Spartan 6上嵌入式网络服务系统设计实现
2013-04-29杨定定施慧彬钱巨李依桐
杨定定 施慧彬 钱巨 李依桐
摘要:随着FPGA在嵌入式领域的快速发展和网络技术的日益成熟,基于FPGA的网络开发成为嵌入式系统研究的重要分支。本文系统地研究了FPGA网络通信,并成功运用Xilinx开发平台EDK构建一个基于总线AXI4的嵌入式网络服务系统。系统包括硬件系统设计和软件程序设计,即采用MicroBlaze微处理器软核,Xilkernel嵌入式操作系统和lwip以太网协议,实现了通过Web浏览器对开发板的实时控制和网络数据回传的实时显示。这一设计在Spartan 6 Atlys开发平台上得以实现和验证,为需要使用该系列开发板进行的网络通信设计提供了很好的指导作用。本文网络版地址:http://www.eepw.com.cn/article/164385.htm
关键词:FPGA;总线AXI4;lwip以太网;实时控制
DOI: 10.3969/j.issn.1005-5517.2013.9.006
*基金项目:国家自然科学基金项目(NSFC60903026)
引言
随着嵌入式系统的发展和Internet的普及,越来越多的嵌入式系统引进Web Server和远程等概念。以太网以其速度快、成本低,成为嵌入式Web Server和远程文件传输接入网络的主要方式。因此,实现基于以太网的嵌入式Web Server和远程文件传输具有十分重要的实际意义。
本设计采用Spartan 6 XCSLX45芯片Atlys FPGA开发板,其具有容量大、资源多、性价比适中等特点,此外Atlys配备了各种高端接口,包括千兆以太网、HDMI视频输入输出、128MByte DDR2存储阵列、AC97 Codec及USB接口,其采用的是Marvell公司的千兆以太网(GbE)PHY收发器88E1111,支持GMII接口,GMII接口支持三种速度模式10/100/1000Mbit,这为本文的以太网通信提供了网络通信条件。同时,AXI总线是ARM高级微控制器总线结构的一部分,拥有高产率、高灵活、广泛IP可用性等优势[1]。本文采用AXI4总线结合Atlys上的GMII接口,设计并实现了lwip以太网通信,为今后在嵌入式通信领域的进一步研究奠定了基础。
系统的设计
本文将会从系统硬软件两方面的设计和实现进行阐述,本设计是基于Spartan 6 Atlys硬件开发平台,利用Xilinx ISE 13.2软件开发平台进行硬软件的设计,由于EDK集成的XPS(Xilinx Platform Studio)硬件设计平台和SDK(Xilinx Software Development Kit)软件设计平台,本文的lwip以太网通信嵌入式系统的设计将会分成硬软系统设计两部分进行详细地介绍。
系统间的数据交互是通过千兆以太网实现的[2],下面对关键IP核:AXI_DMA、Ethernet IP核[3]进行简要的介绍。
E T H E R N E T _ d m a即A X I _ DMA(AXI直接内存访问),是Xilinx嵌入式开发套件(EDK)中自带的IP软核,它为内存和AXI流型目标外围设备提供高带宽的直接内存访问,它通过从CPU上卸载数据移动任务来体现分散/收集功能,如AXI以太网之间提供高速数据移动。
Ethernet核通过32位的AXI4-Lite接口子集为内部寄存器提供了一个控制接口,AXI4-Lite接口支持单拍读和写的数据传输(无突发传输)。发送和接收数据接口都是通过AXI4-Stream接口。AXI Ethernet通过AXI4-Lite总线接口连接到MicroBlaze处理器内核上,允许访问寄存器,同时32位AXI4-Stream总线可供以太网数据在AXI Ethernet上发送和接收。在硬件没有负载条件下,该AXI4-Stream总线提供TCP/UDP的部分校验和。
由于本设计中使用Spartan 6 Atlys系列,本文为该系列的网络通信研究提供的方法:使用Soft Ethernet IP核,设置使用GMII模式,该IP核是soft TEMAC需要特定的license,可在官方网站上下载。Ethernet核可以计算发送TCP/UDP校验和以及验证发送TCP/UDP校验和,使用此逻辑可以显著地提高最大以太网总线数据传输率,同时降低处理器对以太网任务的利用率。系统的MicroBlaze微处理器通过AXILITE总线接口访问AXI DMA,分散/收集引擎从MCB_DDR2中查找缓冲区描述符,然后协调AXI Ethernet和MCB_DDR2之间的主要数据传输。例如MCB_DDR2中的参数设置:
P A R A M E T E R C _ I N T E R C O N N E C T _ S 0 _ A X I _ MASTERS = microblaze_0.M_AXI_ DC & microblaze_0.M_AXI_IC & ETHERNET_dma.M_AXI_SG & ETHERNET_dma.M_AXI_MM2S & ETHERNET_dma.M_AXI_S2MM
以及Ethernet中的接口设置:
BUS_INTERFACE AXI_STR_ TXD = ETHERNET_dma_txd
BUS_INTERFACE AXI_STR_TXC= ETHERNET_dma_txc
BUS_INTERFACE AXI_STR_RXS= ETHERNET_dma_rxs
BUS_INTERFACE AXI_STR_ RXD = ETHERNET_dma_rxd
通过上述设置和IP核的加入,一个基于AXI4总线lwip以太网嵌入式硬件系统搭建完毕,在Xilinx XPS硬件系统设计工具中修改相应的ucf约束文件,即可通过Hardware->Generate Bitstream产生比特流文件供后续软件系统设计的调用。
软件系统的设计
本文的软件系统主要分为三部分:文件系统的建立、FTP远程传输文件设计以及HTP(超文本传输协议)服务[4]利用网页对Atlys开发板进行远程显示及实时控制的设计,从而使传统控制设备转变为具备了以TCP/ IP为底层通信协议,Web技术为核心[5]的Internet控制设备。软件系统采用Xilinx ISE集成的Xilkernel系统内核,通过设置选择相应的库文件,如本文所需要的lwip130(用于轻量级以太网的通信,TCP/IP协议的一种,并且了解了轻量级TCP/IP协议栈和一般操作系统的TCP/IP协议栈的区别[6])和xilmfs(用于文件存储系统)的库文件,设计程序时调用所配置系统的库文件、系统头文件以及自定义的一些程序文件,从而设计出完整的lwip以太网通信系统。
以下先介绍Xilkernel系统内核主要参数的设置以及多线程的调用方式:
PARAMETER OS_NAME = xilkernel
PAR AMETER PTHRE AD_ STACK_SIZE = 8192
PA R A M E T E R C O N F I G _ PTHREAD_MUTEX = true
PARAMETER CONFIG_TIME = true
PARAMETER CONFIG_SEMA = true
PARMETER MAX_SEM = 50
PARMETER MAX_SEM_WAITQ= 20
PARAMETER ENHANCED_ FEATURES = true
PARAMETER CONFIG_YIELD = true
P A R A M E T E R S TA T I C _ PTHREAD_TABLE = ((run_kerl,1))//系统访问入口函数run_kerl()
Xilkernel系统使用多线程通信的方法,通过调用相应的线程来实现对应的功能,如下述建立初始线程,访问network_thread()函数:
PARAMETER PROC_INSTANCE= microblaze_0
PARAMETER NUMBYTES = 400000
PARAMETER BASE_ADDRESS = 0xC4000000
PARAMETER INIT_TYPE = MFSINIT_IMAGE
PARAMETER NEED_UTILS = true
END
最后,在xmd下执行
d o w - d a t a F : / E D K _ l a b / Ethernet13_2AXI/SDK/memfs/image. mfs 0xc4000000命令,下载文件系统镜像到指定地址上,在软件程序中调用xilmfs库文件中定义的mfs_init_ fs(),mfs_exists_fle()等库函数即可确定文件系统是否成功建立,同时文件系统也可供后续FTP设计中的文件上传和下载作存储器使用。
FTP文件传输设计
本文主要是通过以太网上传和下载文件到MCB_DDR2上的文件系统中,通过调用文件系统中的mfs_file_ open(),mfs_file_read(),mfs_file_ write()以及mfs_fle_close()等库函数进行文件系统的访问。
以下是对lwip130库文件的设置:BEGIN LIBRRY
PARAMETER LIBRARY_NAME = lwip130
PARAMETER LIBRARY_VER = 3.01.a
PARAMETER PROC_INSTANCE= microblaze_0
PARAMETER API_MODE = SOCKET_API
END
由以上的设置可以看出本文是基于Xilkernel内核系统的Socket API编程来实现以太网通信,设置MCB_DDR2作为文件存储系统的存储器进行文件的存储和调用。
case TFTP_RRQ://读文件
tftp_extract_filename(fname, args->request);printf("TFTP RRQ (read request): %s\r\n", fname);
tftp_process_read(sd, &args->from, fname);break;
case TFTP_WRQ://写文件
tftp_extract_filename(fname, args->request);printf("TFTP WRQ (write request): %s\r\n", fname);
tfp_process_write(sd, &args->from, fname);break;
上述TFTP上传和下载程序就是采用Socket API编程,调用lwip130库中的库函数编程来实现文件传输。
系统的实现与验证
将主机的I P地址设置为1 9 2 . 1 6 8 . 1 . 1,子网掩码为255.255.255.0,网关为192.168.1.1,将Atlys FPGA上的以太网口与主机电脑的以太网口使用网线连接,以便进行tftp文件上传下载操作以及网页对开发板的远程动态显示,同时将开发板上的串口与主机的串口使用串口线进行连接,可以进行串口通信,也可以将相应的操作结果显示到主机屏幕上,图3为命令操作界面,图4为超级终端显示指示信息和操作反馈信息,通过本机上的浏览器访问192.168.1.10,如图5为访问显示结果。
系统的验证分成两部分:运用网口通信的验证和串口通信的验证。
结束语
本文详细介绍了利用Atlys开发平台使用AXI总线设计lwip以太网通信的嵌入式系统,以及在Xilkernel系统上设置lwip130协议栈以及xilmfs文件系统协议栈开发嵌入式FTP以及web服务器的过程,开发的FTP具有远程传输的功能,Web服务器具有远程动态控制FPGA开发板LED灯亮灭以及动态显示拨码开关的状态的功能,正是由于网络在嵌入式领域的引入,因此实现基于以太网的嵌入式Web Server和远程文件传输具有十分重要的实际意义,本设计为今后更深入的嵌入式系统远程监控、远程传输以及控制的研究做准备,也为即将进行的网络远程重构的实现提供网络通信条件,是其中的关键技术之一。
参考文献:
[1] 杨定定,施慧彬.基于AXI总线的MicroBlaze双核SoPC系统设计[J].电子产品世界,2012,19,(1)
[2] 王长清,陈栋.基于FPGA的千兆以太网通信板的设计与实现[J].河南师范大学学报:自然科学版,2011,39,(1)
[3] Xilinx[Z/OL].Xilinx, http://www.xilinx.com/support/ documentation/ip_documentation/axi_dma_ds781.pdf
[4] 杨俊,吕建平,徐峰柳.基于uC/OS-II和Lwip的嵌入式Web服务器实现[J].电气自动化:嵌入式系统,2011,33,(3)
[5] 李磊,杨柏林,胡维华.嵌入式Web服务器软件的设计和实现[J].计算机工程与设计,2003,24,(10)
[6] 李庆江.基于Lwip协议栈的嵌入式Web服务器的设计及实现[J].山东轻工业学院学报,2008,22,(4)
[7] 张亚魁.基于LWIP的嵌入式WEB服务器的研究与实现[D].合肥工业大学硕士论文,2009:32-39
[8] Xilinx[Z/OL].Xilinx, http://www.xilinx.com/support/ documentation/ip_documentation/ds759_axi_ethernet.pdf