基于Altera FPGA无操作系统的LWIP移植
要求用户在移植时需完成的头文件。
Cc.h文件主要完成协议栈内部使用的数据类型定义,用户应根据具体编译器和处理器特性定义这些数据类型的长度;此外,cc.h文件还要完成临界代码的保护、协议栈调试信息输出相关的宏和大小端的定义等。
Perf. h文件是与系统统计和测量相关的头文件,该头文件和平台的处理器密切相关,本文平台无需使用任何统计和测量功能。因此,该头文件中的两个宏直接定义为空。
最后一个头文件lwipopts.h,其包含用户对协议栈内核的参数设置,在内核的opt.h文件中,包含了内核所有参数的默认配置,当用户在lwipopts.h中配置相关参数,若用户对某个参数未配置,则内核将使用opt.h中的默认值。需注意,在移植时重新定义某些内核参数是必要的,否则协议栈可能无法正常运行。
Ethernetif. c的编写移植者应根据自身使用的网卡特性完善这一函数。LWIP源码提供者将ethernetif. c中的函数实现为一个框架形式。总体而言,在文件ethernetif. c中已有5个函数的框架,包括函数名、函数参数、函数内容等,要完成如下5个函数的编写:
![](../img/eep/emb/emb-49771onkqjjxhepj.jpg)
这5个函数中,前3个与网卡功能密切相关。low_level_init为网卡初始化函数,其主要用于完成网卡复位及参数初始化,同时根据实际网卡特性,还需设置协议栈网络接口管理结构neitif中与网卡属性相关的字段,例如网卡MAC地址长度等;low_level_output为网卡数据包发送函数,该函数的主要工作是将内核数据结构pbuf描述的数据包发送出去;low_level_input为网卡数据包接收函数;ethernetif_input的主要作用是调用网卡数据包接收函数low_level_input从网卡处读取一个数据包,然后解析该数据包的类型,最后将数据包递交给上层;ethernetif_init,是上层在管理网络接口结构netif时会调用的函数,该函数主要完成netif结构中某些字段的初始化,并最终调用low_level_init,完成网卡的初始化。到此,关于网卡驱动的移植就基本完成了。
1.5 协议栈的初始化
![](../img/eep/emb/emb-49772a5eneksrgln.jpg)
![](../img/eep/emb/emb-49773mt2o2q34522.jpg)
在使用协议栈之前,协议栈内核必须完成初始化,若要使用网卡进行通信,则网卡相关的网络接口结构也需被注册到内核中。在此用函数lwip_init_task来完成协议栈的初始化和网卡信息的注册。初始化工作主要是调用内核函数1wip_init来完成的,其依次调用各模块的初始化函数,例如内存初始化函数、数据包结构初始化函数、网络接口结构初始化函数、IP初始化函数、TCP初始化函数等。接口结构注册通过调用函数netif_add完成,该函数除了使用3个IP地址作为参数外,还需另外两个函数地址作为参数,即etherne tif_init和ethernet_input。这两个函数地址会被赋值给netif结构的相关字段,内核通过这些字段指向的函数来完成网卡的初始化以及向上层递交数据。
2 运行和测试
利用FPGA上的JTAG接口将程序烧写至串行配置芯片EPCS64中,再通过SOPC Builder中CPU的配置,将RESET VECTOR指向EPCS_FLASH_CONTROLLER,此时程序会被下载到串行配置芯片中,串行配置芯片在通电时,将运行程序拷贝到代码运行区,并从reset address启动。SOPC中的exception address指定的是系统异常处理代码的存放处。若exception address和reset address不同,则程序从reset address启动后将放在reset address处的系统异常处理代码拷贝到exception address,设置如图5所示。
![](../img/eep/emb/emb-49774nzmvdvi5nr4.jpg)
利用移植的协议栈中UDP协议,调用udpsend()函数往计算机发送数据,在计算机端,打开TCPUDP测试工具,在FPGA中模拟数据产生模块,并向上位机发送递增码,从测试工具栏中,看到上位机接收到的数据。从接收窗口中,能看到捕获的udp数据包,是正常的16进制递增码,如图6所示。
![](../img/eep/emb/emb-497751bjcfjcaqsw.jpg)
3 结束语
通过提出基于FPGA的SOPC自定义MAC IP核的设计思路,用Verilog HDL硬件语言编程,满足特殊器件的特殊要求,其从设计到实现验证,充分感受到SOPC的优势。SOPC将中央处理器和外围接口集成到一块芯片上,具有体积小、成本低、高精度的优点。而NIOS的可定制性,可根据需要添加组件,同时也可根据需要编写IP模块,具有较强的灵活性。此外,还可直接由C语言完成软件系统的开发设计,调用现成C语言算法,提高工作效率,且具有良好的便捷性和灵活性。
- 单片DSP处理器功能系统的SOPC技术设计(01-12)
- 基于DSP和SOPC数字信号发生器的设计(01-05)
- 基于Linux的SoPC应用系统设计(04-23)
- 基于DSP的实时数据处理系统浅析(02-28)
- 基于LXI总线的1553B通讯模块设计与开发(11-24)
- 双MicroBlaze软核处理器的SOPC系统设计(01-27)