基于FPGA的WEB服务器设计Word文件下载.docx
- 文档编号:18759183
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:22
- 大小:830.03KB
基于FPGA的WEB服务器设计Word文件下载.docx
《基于FPGA的WEB服务器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的WEB服务器设计Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
1.1选题背景
随着Internet的发展,各种设备与Internet相结合已成为了一种发展趋势。
嵌入式Web服务器可以提供丰富的用户界面,并进行进一步的开发丰富嵌入式功能。
具有成本低、体积小、高可靠、微功耗、环境适应能力强等诸多优势,在通信和工业控制等领域正得到日益广泛的应用。
本文设计的的Web服务器是基于FPGA和SOPC技术的NiosII软核处理器。
SOPC是基于大规模FPGA的单片机系统。
SOPC将尽可能大而完整的电子系统,包括嵌入式处理器系统、接口系统、硬件协处理器或加速系统、DSP系统、数字通信系统、存储电路以及普通数字系统等,在单一FPGA中嵌入实现。
NiosII是一个用户可定制的CPU,用户可以增加新的外设、新的指令,分配外设的地址等。
用户可以在客户端通过IE浏览器对服务器进行访问,浏览存储在Flash芯片中的网页。
1.2设计要求
Web服务器也称为WWW(WORLDWIDEWEB)服务器,主要功能是提供网上信息浏览服务。
Web服务器是可以向发出请求的浏览器提供文档的程序。
服务器是一种被动程序:
只有当Internet上运行在其他计算机中的浏览器发出请求时,服务器才会响应。
Internet上的服务器也称为Web服务器,是一台在Internet上具有独立IP地址的计算机,可以向Internet上的客户机提供WWW、Email和FTP等各种Internet服务。
Web服务器是指驻留于因特网上某种类型计算机的程序。
当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。
服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流。
本设计是基于NiosII处理器的HTTP网页服务器,它藉由MicroC/OS-II操作系统上的NicheStackTCP/IP协议栈来实现,网页内容存放开发板的Flash芯片中。
网页服务器可以处理基本的一些网络请求,包括HTML,JPEG,GIF,PNG,JS,CSS,SWF,ICO等文件,并通过在网页上进行相应设置对开发板的相应模块进行操作。
系统的整体架构图
1.3实现方法
1.3.1硬件法
根据已有的TCP/IP芯片直接作为以太网口。
该方法的优点是可靠性高,执行速度快,但硬件电路复杂,价格昂贵,硬件成本高。
1.3.2软件法
将TCP/IP协议以软件的方式写入系统的ROM中。
但是TCP/IP协议栈比较庞大,在嵌入式系统中很难完整地支持TCP/IP协议栈,因此需要精简TCP/IP协议,保留与需要相关的部分,减少对系统资源的占用。
通过对上述方法的比较,本设计采用第二种方法。
使用Altera公司的NiosII软核处理器与NicheStackTCP/IP协议栈相结合的方法来实现该Web服务器的功能。
第二章设计方案概述
2.1硬件设计
系统需要使用的硬件器件有:
(1)FPGA芯片
(2)以太网PHY芯片
(3)LED灯
(4)LCD显示屏
(5)七段数码管
(6)SSRAM芯片
(7)Flash芯片
四位显示数码管图片
LED灯
LCD显示屏
需要系统搭建的组件:
(1)NiosIICPU
(2)JTAGUART接口
(3)片内存储器
(4)Avalon三态总线桥
(5)SSRAM接口
(6)Flash接口
(7)并行输入/输出模块(PIO)
(8)定时器
(9)三速以太网接口
(10)DMA总线控制器
硬件的主要设计步骤为:
(1)在SOPCBuilder中构建SOPC系统。
包括NiosII软核CPU、存储器接口(SDRAM、SRAM、Flash等)、以太网接口等。
创建SOPC系统的系统描述文件和原理图模型;
(2)通过原理图将生成的SOPC系统模块添加到工程中,并在原理图中继续为电路添加输入、输出、双向引脚及PLL等其他组件;
(3)为工程分配引脚并编译,将编译的工程下载至开发板,运行并调试;
2.2软件设计
软件开发的部分分为两个部分:
客户端部分在NiosIIIDE环境中的开发,服务器部分在C++Builder环境中的开发。
基于NiosII的应用程序开发需要使用μC/OS-II实时操作系统和NicheStackTCP/IP协议栈两个组件的支持。
软件设计主要完成的任务如下:
(1)初始化以太网设备,μC/OS-II实时操作系和NicheStackTCP/IP协议栈;
(2)将缓存的数据分割为小包发送出去;
(3)处理PC端服务器返回的信息,根据返回信息对象对缓存中的数据进行清除或重新发送;
PC上的C++Builder程序开发主要完成的任务如下:
(1)接受来自以太网的数据,存储并显示;
(2)判断丢失的数据并通知重发;
(3)如无数据丢失,定时通知对方已收到内容;
(4)配合对端进行传输速率的控制;
第三章相关原理
3.1三速以太网设计
媒体访问层(MAC)作为以太网接口芯片的主要部分,主要完成以太帧的检错和提供可靠的数据通路的功能,以太网的物理层(PHY)负责建立传输介质和MAC层的链接,将数据进行信号转换。
MAC需要配置PHY的寄存器信息,设定PHY的工作频率、接口传输介质选择及工作模式选择。
MDIO接口是用来传输MAC对PHY器件控制管理的模块
通过Marvell88E1111以太网PHY芯片为用户提供网络界面。
88E1111芯片支持10/100/1000Mbps传输速率,支持的MAC层传输界面有GMII/MII/RGMII/TBI等。
在Altera三速以太网控制器的设计界面中,以选择其MAC界面为MII或者RGMII。
MII(MediaIndependentInterface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准。
它包括一个数据接口,以及一个MAC和PHY之间的管理接口,MII支持10兆和100兆的操作。
RMII是简化的MII接口,在数据的收发上它比MII接口少了一倍的信号线,一般要求是50兆的总线时钟,和MII一样,RMII支持10兆和100兆的总线接口速度。
GMII是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口。
在MAC选项标签页面,用户应该给以太网控制器设置合适的值。
控制器须包含MDIO模块,它用于给PHY芯片生成2.5MHz的MDC时钟,这个频率从控制器主时钟分频而得。
3.2实时操作系统
实时操作系统是指如果逻辑和时序出现偏差将会引起严重后果的系统,由系统硬件(包括处理器芯片、存储芯片等),固化在存储芯片的用户软件及操作系统组成。
有两种类型的实时系统:
软实时系统和硬实时系统。
软实时系统中,系统的各个任务运行不限定完成时间,速度越快越好;
硬实时系统中,各任务的执行不仅要无误还需准时。
现在较为流行的实时操作系统有:
μC/OS-II、eCOS、RTLinux、RTAI、RTEMS等。
μC/OS-II系统是一个完整地、可移植、可固化、可裁减、抢占式的实时多任务内核,稳定性可靠性高,允许嵌套多大255层的中断嵌套,符合本课题的要求。
3.3μC/OS-II在NiosII中的移植
移植指的是一个实时内核能在其他的微处理器或微控制器上运行。
μC/OS-II的绝大部分代码是C语言编写,仅部分与使用的处理器相关的代码需要重新编写。
μC/OS-II的正常运行需要满足一下条件:
(1)处理器的C编译器能产生课重入型代码;
(2)处理器支持中断,并能产生实时中断;
(3)C语言可开/关中断;
(4)处理器支持一定数量的数据存储硬件堆栈;
(5)处理器有将堆栈指针及其他CPU寄存器内容读出并存储到堆栈或内存中的指令;
3.4TCP/IP协议栈
TCP/IP协议全称传输控制协议/网际协议。
TCP/IP协议模型与OSI参考模型一样采用了分层结构,但是侧重于互连设备之间的数据传输,而不是严格的功能层次划分。
该模型分为四层:
数据链路层、网络层、传输层、应用层。
数据链路层管理网络的连接并提供网络上的报文输入/输出。
主要包括ARP地址解析协议和RARP逆地址解析协议,以太网接口芯片及其驱动程序。
网络层处理报文的路由管理,根据接收保温的信息决定报文的去向。
包含了TCP/IP协议族里的IP协议、ICMP协议、IGMP协议。
传输层的作用是管理源和目的之间的报文传输。
这一层包含了两个协议:
有连接的TCP协议、无连接的UDP协议。
应用层包括一些与用户相关的认证、数据处理、压缩等服务。
主要包括FTP协议、SMTP协议、SNMP协议、Telnet协议等。
传统的TCP/IP协议的实现过于复杂,需要占用大量的系统资源。
而嵌入式应用的系统资源往往很有限,所以传统的TCP/IP并不适合本课题。
因此需要把传统的TCP/IP在不违背协议标准的情况下进行改进,以提高其实时性能,减少占用的系统资源,从而满足本课题的应用要求。
这种用于嵌入式系统的实时、简单、灵活的TCP/IP协议称为嵌入式TCP/IP协议。
目前,常用的TCP/IP协议栈有:
BSDTCP/IP协议栈、μC/IP协议栈、LwIp协议栈、μIP协议栈、OpenTCP协议栈、NicheStack协议栈等。
NicheStack是针对于嵌入式系统的通讯协议,全部采用ANSIC书写,占用极少的内存资源。
如内存的需求在ARM32位CPU上最小的TCP/IP只有12.8K,而全功能的TCP/IP也只有42.4K。
NicheStackTCP/IP协议栈在业内被誉为灵活的最佳联网堆栈。
NicheStackTCP/IP协议栈具有代码小、移植行和兼容性高等优点,包含ANSIC代码、一个SocketAPI和全部技术文档。
NicheStack的IP层软件可以造成一个标准的客户机、一个IP路由器活一个多主机服务器。
NicheStack支持地址解析协议(APP)、Internet协议(IP)、Internet协议(ICMP)、域名服务(DNS)、用户数据报协议(UDP)、传输控制协议(TCP)、自引导协议(BOOTP)等协议和服务。
3.5NicheStackTCP/IP协议栈的移植
在QuartusII软件中,用户可以在NiosIIIDE的图形用户界面下对NicheStackTCP/IP协议栈进行配置来以题目设计的要求。
NiosII进行NicheStack的移植需要满足以下条件:
(1)硬件系统必须包含支持中断的以太网接口
(2)系统程序必库必须基于μC/OS-II实时操作系统
(3)μC/OS-II必须提供时钟控制机制和时钟节拍
(4)系统时钟由专用定时器提供
NicheStack的配置过程如下:
(1)在IDE界面的工程栏中,右键待配置工程,选择SystemLibraryProperties,进入系统库的属性对话框。
(2)选择SystemLibrary,显示系统库选项。
(3)在SoftwareComponent下选择NicheStackTCP/IPStack,进入配置对话框。
(4)配置NicheStack的通用选项、IP选项、TCP选项。
(5)完成配置
第四章系统设计
4.1硬件系统设计
4.1.1NiosII处理器系统构建
由以上分析,本设计的NiosII处理器系统如下图:
启动QuartusII,建立新工程,选择QuartusII中的Tools菜单,选中SOPCBuilder项,进入SOPC开发工具SOPCBuilder,界面如下图。
在弹出的CreateNewSystem对话框中输入模块名称,选择生成代码类型。
1、添加CPU模块
选择SOPCBuilder选择栏中的NiosIIProcessor,打开NiosIIProcessor对话框(如下图),并进行配置。
系统提供了三种类型的软核:
NiosII/e占用资源最少600-800LEs,功能也最简单,速度最慢。
NiosII/s占资源比前者多一些,功能也多了,速度也忚一些NiosII/f占资源最多,功能也最多,速度快,具有NiosIICPU的所有功能,包括一些高级功能需要的LE数目最多。
ResetVector是复位后启动的Memory类型和偏移量,ExceptionVector是异常情况时Memory类型和偏移量,需要SDRAM和FLASH设置好以后才能修改。
2、添加JTAGUART
在组件选择栏中选择InterfaceProtocols,选择Serial,进入JTAGUART。
JTAG通用异步接收器/收发器(UART)核是PC和FPGA上SOPCBuilder系统间进行串行通信的一种实现方式。
此外,JTAGUART也可用于NiosII系统的仿真调试。
3、添加片内存储器
在组件中选择MemoriesandMemoryControllers,选择OnChip,On-ChipMemory,进入片内存储器设置的对话框。
添加片内存储器:
紧耦合指令存储器、紧耦合数据存储器、描述符存储器、普通片内RAM。
4、添加Avalon三态总线桥
SSRAM和Flash的数据总线是三态的,NiosIICPU与SSRAM、Flash相连时需要用到Avalon三态桥。
在组件选择栏中选择BridgeandAdapters,选择MemoryMapped,进入Avalon-MMTristateBridge,进行设置。
5、添加SSRAM
通过Avalon三态总线桥,外部的SSRAM和Flash就可以接入NiosII系统中,SSRAM的作用类似于PC机中的内存,用于存放正在运行的程序和数据。
正对于不同型号的SSRAM创建SSRAM接口组件。
只需要定义好SSRAM与Avalon总线的接口即可。
具体步骤如下:
(1)在组件选择栏中选择Createnewcomponent,打开新建组件编辑器对话框。
(2)选择Signals标签,将SSRAM的信号映射到有效的Avalon信号类型。
(3)选择Interface标签,为组件配置Avalon接口的属性。
(4)选择ComponentWizard标签,设置组件的向导界面。
6、添加Flash
在组件选择栏中选择MemoriesandMemoryControllers,选择Flash,进入FlashMemory(CFI),打开Flash设置对话框,分别设置Attributes(属性)标签和Timing(时序)标签。
具有Avalon接口的通用Flash接口控制器核(CFI)和容易与SOPCBuilder系统外的符合CFI参照要求的外部Flash相连。
CFI控制器是SOPCBuilder内如集成,可轻松集成到SOPCBuilder创建的系统中去。
Flash用于保存数据和程序,并在掉电时保持数据。
7、添加PIO
并行输入/输出(PIO)模块在Avalon从端口和通用I/O端口之间提供了一个存储器映像接口。
I/O端口与片上用户逻辑或者FPGA的I/O引脚相连,I/O引脚连接片外设备。
在组件选择栏中选择Peripherals,选择MicrocontrollerPeripherals,进入PIO,添加组件,用作LED和七段数码管。
8、添加定时器
系统中共需要两个定时器,一个为μC/OS-II实时操作系统提供周期的时钟节拍。
Timeoutperiod设置为10ms,另一个作为NiosII系统的时间截定定时器,Timeoutperiod设置为10ns。
9、添加三速以太网
在组件选择栏中选择InterfaceProtocols,选择Ethernet,进入Triple-speedEthernet。
分别设置CoreConfiguration标签和FIFOOptions标签。
CoreConfiguration中Corevariation设置为10/100/1000MBEthernetMAC,interface设置为MII/GII。
10、添加DMA总线控制器
添加两个DMA控制器,分别为三速以太网提供数据包的发送和接收通道。
在组件选择栏中选择MemoriesandMemoryController,进入Scatter-GatherDMAController,添加两个DMA控制器sg_rx、sg_tx,分别配置如下:
(1)、sg_rx:
设置Transfermode选项为StreamToMemory设置SinkerrorWidth选项为6;
(2)、sg_tx:
设置Transfermode选项为MemoryToStream设置SourceerrorWidth选项为1;
4.1.2设置基地址和中断
SOPCBuilder为系统中的每个IP模块制定默认的32位地址,用户可以手动改变这些默认地址,也可自动分配。
(1)、设置地址
选择System,进入Auto-AssignBaseAddress,自动分配基地址。
(2)、设置中断
为jtag_uartz、sg_rx、sg_tx分别设置中断号。
4.1.3配置NiosII系统
双击SOPC系统中已经添加的CPU核,设定复位地址和异常处理地址。
将复位地址定位于Flash存储器,异常处理地址定位在on-chipmemory。
4.1.4生成NiosII系统
完成NiosII系统模块的设置后,需要生成用于QuartusII编译的文件,同时生成原理图模块,以及软甲开发工具包,使NiosII系统成为QuartusII工程的一部分。
各部分的连接图如下:
点击SOPCBuilder窗口下的Generate按钮,生成NiosII系统。
生成的原理图模块如下图:
4.2软件系统设计
4.2.1μC/OS-II移植过程
作为NiosII开发系统的一部分,μC/OS-II构建在安全线程HAL系统库上。
HAL为μC/OS-II实时操作系统在NiosII微处理器上的运行提供了驱动。
配置过程如下:
(1)在IDE环境的工程栏中,右键待配置的工程,选择SystemLibraryProperities,进入系统库的属性对话框;
(2)在RTOS下选择MicroC/OS-II(即μC/OS-II),打开RTOSOptions对话框;
(3)配置μC/OS-II的一下选项:
通用选项、事件标志选项、互斥选项、、信号量选项、邮箱选项、队列选项、存储器管理选项、任务管理选项、时间管理选项、杂项选项;
(4)完成配置
4.2.2NicheStack的初始化
初始化NicheStack之前,需要提供两个函数:
get_mac_addr()和get_ip_addr(),为系统库中的以太网设备的初始化提供MAC和IP地址。
(1)、get_ip_addr()
该函数的的原型是
intget_mac_addr(NETnet,unsignedcharmac_addr[6]);
函数实现的流程如下图:
(2)get_ip_addr()
函数原型为:
intget_ip_addr(alt_iniche_dev*p_dev,
ip_addr*ipaddr,
ip_addr*netmask,
ip_addr*gw,
int*use_dhcp);
初始化NicheStack是需要调用两个系统提供的初始化函数:
alt_iniche_init()和netmain()。
NicheStack初始化完成后,全局变量iniche_net_ready自动置为非0值,调用两个NicheStack的初始化函数后,需要等待iniche_net_ready非0后才能启动用户应用程序。
整体效果图:
4.2.3WEB网页界面设计
4.3调试运行
(1)运行QauartusII,下载硬件配置到FPGA
(2)运行NiosIIIDE,进入工作目录
(3)将网页信息文件下载到Flash
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA WEB 服务器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)