Spartan 6上嵌入式网络服务系统设计实现
件系统搭建完毕,在Xilinx XPS硬件系统设计工具中修改相应的ucf约束文件,即可通过Hardware->Generate Bitstream产生比特流文件供后续软件系统设计的调用。 软件系统的设计 本文的软件系统主要分为三部分:文件系统的建立、FTP远程传输文件设计以及HTTP(超文本传输协议)服务[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 Xilkernel系统使用多线程通信的方法,通过调用相应的线程来实现对应的功能,如下述建立初始线程,访问network_thread()函数: sys_thread_new("NW_THREAD", network_thread, NULL,THREAD_STACKSIZE, DEFAULT_THREAD_PRIO); 通过下述线程调用HTTP WEB功能,实现功能的选择调用,提高资源的利用率: sys_thread_new("httpd", web_application_thread, 0, THREAD_STACKSIZE,DEFAULT_THREAD_PRIO); 文件系统建立 下面介绍下本文文件系统的建立步骤: 首先,使用Xilinx ISE集成工具中的Xilinx Bash Shell,切换到原始文件所在的文件夹,使用命令: mfsgen -cvbf ../image.mfs 2048 css images js yui generate-mfs index.html,产生所需要的文件系统镜像; 其次,通过在库文件Xilmfs中设置文件镜像的存储访问地址等信息,如下xilmfs库文件的设置: BEGIN LIBRARY 最后,在xmd下执行 dow -data F:/EDK_lab/Ethernet13_2AXI/SDK/memfs/image.mfs 0xc4000000命令,下载文件系统镜像到指定地址上,在软件程序中调用xilmfs库文件中定义的mfs_init_fs(),mfs_exists_file()等库函数即可确定文件系统是否成功建立,同时文件系统也可供后续FTP设计中的文件上传和下载作存储器使用。 FTP文件传输设计 本文主要是通过以太网上传和下载文件到MCB_DDR2上的文件系统中,通过调用文件系统中的mfs_file_open(),mfs_file_read(),mfs_file_write()以及mfs_file_close()等库函数进行文件系统的访问。 以下是对lwip130库文件的设置: BEGIN LIBRARY 由以上的设置可以看出本文是基于Xilkernel内核系统的Socket API编程来实现以太网通信,设置MCB_DDR2作为文件存储系统的存储器进行文件的存储和调用。 case TFTP_RRQ://读文件 tftp_extract_filename(fname, args->request);printf("TFTP RRQ (read request): %s\r\n", fname); 上述TFTP上传和下载程序就是采用Socket API编程,调用lwip130库中的库函数编程来实现文件传输。 HTTP WEB服务器设计 首先使用HTML设计动态网页[7]index.html,程序中通过Socket API编程以及线程调入执行HTTP,HTTP设计主要是通过查找FPGA上MCB_DDR2中文件系统中的index.html网页文件,如存在则显示网页信息,通过网页文件可以动态控制Atlys FPGA上LED灯的亮灭以及显示Dip_Switches开关的状态,若不存在则打印访问错误网页,可以通过TFTP上传index.html,再次验证,图2是HTTP WEB服务器软件设计流程。
PARAMETER PTHREAD_STACK_SIZE = 8192
PARAMETER CONFIG_PTHREAD_MUTEX = true
PARAMETER CONFIG_TIME = true
PARAMETER CONFIG_SEMA = true
PARAMETER MAX_SEM = 50
PARAMETER MAX_SEM_WAITQ = 20
PARAMETER ENHANCED_FEATURES = true
PARAMETER CONFIG_YIELD = true
PARAMETER STATIC_PTHREAD_TABLE = ((run_kerl,1))//系统访问入口函数run_kerl()
PARAMETER LIBRARY_NAME = xilmfs
PARAMETER LIBRARY_VER = 1.00.a
PARAMETER PROC_INSTANCE = microblaze_0
PARAMETER NUMBYTES = 400000
PARAMETER BASE_ADDRESS = 0xC4000000
PARAMETER INIT_TYPE = MFSINIT_IMAGE
PARAMETER NEED_UTILS = true
END
PARAMETER LIBRARY_NAME = lwip130
PARAMETER LIBRARY_VER = 3.01.a
PARAMETER PROC_INSTANCE = microblaze_0
PARAMETER API_MODE = SOCKET_API
END
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);
tftp_process_write(sd, &args->from, fname);break;
FPGA 总线AXI4 lwip 以太网 实时控制 201309 相关文章:
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 基于FPGA的快速并行FFT及其在空间太阳望远镜图像锁定系统中的应用(06-21)
- 3DES算法的FPGA高速实现(06-21)
- 用FPGA实现FFT算法(06-21)
- FPGA的DSP性能揭秘(06-16)