1、引言
近来,随着嵌入式Internet技术的飞速发展,当今社会逐渐步入网络时代。嵌入式Web服务器技术在远程监控和生产过程控制系统中得到了广泛的应用,该技术允许任意地点的用户通过Web浏览器接入网络,访问Web服务器发布的各类信息,通过Web可以实现最为亲切的信息互动。
基于SOPC(可编程片上系统)技术的嵌入式Web服务器采用嵌入式软核处理器技术,使用嵌入式实时操作系统,内嵌网络接口和网络通信协议,可直接接入以太网。由于嵌入式Web服务器具有成本低、体积小、高可靠、微功耗、环境适应能力强等诸多优势,在通信和工业控制等领域正得到日益广泛的应用。
2、Web服务器概述
本设计介绍的嵌入式Web服务器采用基于FPGA的Nios II 软核处理器,具有灵活性高、而成本低的特点,充分体现了可编程片上系统的优势。客户端通过IE浏览器对该服务器进行访问,实时地获得服务器发布的各类信息,以便执行相应的操作。这样就要求服务器提供WWW服务,即实现HTTP协议。它应被所有浏览器支持,以保证任何地方的用户都可以通过浏览器下达命令。在网络接口上,本设计选择以太网为其运行的网络环境。如图1所示为HTTP设计模型[1]。首先,客户端的浏览器与Web服务器使用一个或多个TCP连接,通过80号端口进行通信,浏览器通过HTTP协议浏览存储在FLASH中的网页,通过该网页传递浏览、控制命令到网络服务器,然后服务器对命令进行解析,调用相应的功能,充分实现客户端与浏览器之间的信息互动。根据Web服务器的原理,本设计实现了以下协议:DHCP、HTTP、TCP、IP、ICMP、ARP。
3、硬件结构设计
3.1、FPGA芯片
服务器的整体硬件方案采用1 片规模较大的FPGA 完成大部分功能,该款FPGA采用Altera公司的低价格、高性能的Cyclone系列,根据系统逻辑规模的预判,选EP1C20F400C7不胜数FPGA。此型FPGA含有以下可编程逻辑资源:20 060个逻辑单元;64个M4K RAM块,多达294 912位RAM;内嵌2个PLL(锁相环),可作为全局时钟;最大用户I/O引脚301个;且该芯片还支持用Altera公司的SOPC Builder工具嵌入Nios II的内核。
图1 HTTP设计模型
3.2、Nios II 软核处理器
Nios II[2]是在Altera公司的FPGA上实现的一款嵌入式处理器。Nios II系列嵌入式处理器是一款用户可配置的通用的32/16位RISC(精简指令集)结构的CPU ,它定位于广泛的嵌入式应用。使用业界领先的设计软件Altera 公司的Quartus II软件以及SOPC Builder 工具。
3.2、Nios II 软核处理器的实现与应用
系统采用32 位嵌入式Nios II软核,它可以提供灵活丰富的接口,针对该系统的需求配置合适的外围设备。在Altera 公司提供的SOPC软件中对该软核进行配置时,我们选用了NIOSCPU、内部定时器、JTAG异步串行接口、SDRAM 控制器、Flash 存储器接口、以太网接口、LCD接口、片内存储器和EPCS4串行配置器件控制器接口。其框图如图2所示。
图2 SOPC系统硬件实现框图
在SOPC芯片中,所有部件都由Altera 公司或第三方以IP 核的方式提供,可方便复用,用户也可在FPGA 中自定义用户模块,并生成自定义IP(知识产权)核。系统部件及其功能见表1。CPU 和所有部件通过Avalon 总线连接在一起,构成基于Avalon 总线的SOPC 系统架构。
Avalon总线是Altera 公司开发的片上总线,是一种简单的总线体系结构,用来将处理器和周边设备集成到SOPC 中,并规定了主设备和从设备的端口连接方式和时序关系。主设备和从设备的交互采用“从端仲裁”技术。在多个主设备试图访问同一个从设备时,用于决定哪个主设备获得访问权。在本文的系统设计中,CPU 是主设备,其他部件均为从设备。
表1 SoPC 中的系统部件
4、SOPC的构建方法
SoPC 系统的设计基于EDA 工具的可编程逻辑器件设计流程,是一个软/ 硬件协同设计的过程[3]。采用Altera 公司SOPC Builder 设计工具,可以极大提高系统得设计效率,开创了嵌入式系统设计的新理念。
硬件开发流程:用 SOPC Builder 系统综合软件来选取合适的CPU、存储器以及外围器件,并定制它们的功能。使用Quartus II 软件来选取具体的Altera 可编程器件系列,并对SOPC Builder 生成的HDL 设计文件进行布局布线;在使用Quartus II 软件完成管脚的分配。最后生成配置文件,下载到开发板上。软件开发流程:在用SOPC Builder 进行硬件设计的同时,就可以开始编写独立于器件的C/C++软件,用户可以使用现成的软件库和开放的操作系统内核来加快开发进程。在NiosII IDE 中建立新的软件工程时,IDE 会根据SOPC Builder 对系统的硬件配置自动生成一个定制HAL(硬件抽象层)系统库。这个库能为程序和底层硬件的通信提供接口驱动程序,之后进行编译、调试、下载软件到开发板上。
5、软件实现
软件设计主要包括嵌入式操作系统的移植、网络协议栈的实现、应用级代码编写等部分。软件结构框图如3所示。
图3 SOPC系统软件结构框图
5.1、uC/OS-II 操作系统的应用
根据Web服务器的特点,设计必须满足实时性和并发性的要求,以便更好地支持TCP/IP运行时的多任务环境的调度,所以应用软件应该基于嵌入式实时操作系统。目前比较流行的嵌入式操作系统主要有VxWorks、Windows CE、uCLinux、uC/OS-II 等。考虑到uC/OS-II的规模较小、实时性和可靠性较高,Nios II IDE 开发环境对uC/OS-II的良好支持,故操作系统选择uC/OS-II[4]。它是一种可移植、可固化、可裁减、占先式的多任务实时操作系统内核。它通过为每个任务分配单独的任务堆栈来保存任务工作环境,提供任务管理与调度,任务间的同步、互斥与通信,时间和中断管理、内存的动态分配等多种系统服务。在程序设计时,将网络协议栈在其中一个任务中运行,而用户程序在另外的任务中运行。通过调用协议栈提供的API函数进行通信。
在本设计中uC/OS-II主要完成任务的管理与调度,在网络协议栈初始化后,使用标准套接字API创建新任务访问网络协议栈。在本设计中使用函数sys_thread_new()创建DHCP超时任务dhcp_timeout_task()来动态分配IP地址,创建HTTP任务http_task()管理HTTP连接并调用相关的子程序来为HTTP请求服务。这里使用的sys_thread_new()位于LwIP的操作系统封装层,实际上是调用uC/OS-II的OSTaskCteate()函数。通过创建消息邮箱、信号量实现任务与任务之间、任务与中断服务程序之间的同步与互斥,以保证它们协调运行。
5.2、LwIP网络协议栈的实现
LwIP(轻量级网络协议)是TCP/IP协议栈的一个实现。LwIP是一种专门针对嵌入式系统应用而设计的网络通信协议,由于LwIP实现的关键在于削减代码大小和内存消耗,但可以完成传统的TCP/IP协议的大部分功能,通常只需要大约40K的ROM和数十K的RAM即可运行。在保持协议分层体系结构的前提下,通过采用“零拷贝”技术提高实时性。
Nios II支持LwIP使用如下的3个基本任务[2]。这些任务在程序创建时添加后连续运行:首先,被协议栈使用的主任务。这个任务用来接收包,任务模块的主函数用于等待消息邮箱。当一个新的包到来时,产生一个中断请求,中断服务程序清除IRQ并且向消息邮箱发送一个消息。其次,新的消息激活接收任务。这一设计可以使中断服务程序尽可能快的执行,从而减少系统延时的影响。最后,实时器任务在于周期性地调用各种任务所需的时间。上述这些任务将在初始化成功后自动运行。系统初始化后,进入主程序部分。主程序包括两大部分:对接收到的以太网数据帧进行解包和对欲发送的数据进行封装并发送。图4为Web服务器软件框图。
图4 软件框架图
6、结语
经测试,本设计可以正常工作,达到了预期的效果。基于SOPC的嵌入式Web服务器,其功能可根据需要定制,非常灵活。该Web服务器不仅可以广泛应用于工业控制领域,实现小型工业监测系统网络化,具有良好的应用前景。
作者创新点:本文介绍了基于软核处理器的Web服务器实现方法,使设计变得灵活,嵌入式操作系统的引入,满足了设计对实时性的要求。