NIOS在网络通信系统中的应用

2013-01-14 06:12田青峰卢泳兵刘志鹏
无线电工程 2013年5期
关键词:三态双口字节

田青峰,卢泳兵,刘志鹏

(中国电子科技集团公司第五十四研究所,河北石家庄050081)

0 引言

基于IP的数据业务已经成为很多系统的标准接口,IP数据业务接口具有接口丰富、简单和容易二次开发等优点,因此得到了广泛的应用。随着设备小型化需求的增强,嵌入式的IP处理平台研究和应用越来越广。NIOS软核和μC/OS-II以低功耗、低成本、高实时性成为应用广泛的一个开发平台,该平台软、硬件均可按照用户要求进行配置,最大程度地提高了系统的设计灵活性。

NIOS是ALTERA推出的一种软核处理器,是一种完全面向用户、高度可定制的通用精简指令架构(RISC)的32位嵌入式CPU。用户使用SOPC工具对所使用的软核进行包括CPU内部结构、指令集补充等的高级设计,并由QUARTUS工具综合生成可以运行在FPGA内部的逻辑结构。NIOS的优势在于其灵活性,其可以根据用户需要进行灵活的配置和裁剪。并且,NIOS内部所有外设通过统一的Avalon总线与CPU相连,提高了CPU对外设控制的效率。

1 平台组成

开发平台主要由FPGA与片外SRAM存储器IDT71V416、片外 FLASH 存储器 AM29LV065D、网络接口芯片LXT971A以及其他部分组成,如图1所示。

图1 系统组成

2 NIOS与SRAM及FLASH接口的实现

FPGA支持2种启动模式:从外部EPCS串行存贮器中启动和从外部并行FLASH中启动。本例中由于EPCS串行存贮器片内资源有限,所以选择使用片外FLASH作为程序存贮器,并从其中启动。NIOS的程序可以存储在片内RAM中。本文使用ALTERA的EP2C35F484芯片作为载体,而该片内RAM容量为483 840 bits,这对于移植一个标准版的μC/OS-II是远远不够的,所以使用片外SRAM作为数据存储器,用作数据存储器及堆栈,FLASH用作程序存储器,用来保存用户程序。

2.1 user_defined_interface的端口定义

SRAM与FLASH(CFI接口)是NIOS认可的标准外设,具有访问的标准读写时序。SOPC也提供了相应的HAL的实例user_defined_interface,user_defined_interface是一个标准的AVALON总线接口,可以提供读写时序、控制信号,如读写端口、数据总线和地址总线等。按照AVALON总线端口类型和位宽等分别建立端口,可以提供对 SRAM的访问[1]。建立的端口如表1所示。

表1 user_defined_interface端口类型

表1中,s_Data和s_Addr共享表示FLASH和SRAM共享数据总线和地址总线,由SOPC分配不同的地址空间来分别访问。由于FLASH和SRAM共享地址空间,需要通过三态门来分配CPU对2个空间的访问。

2.2 FLASH和SRAM的地址对齐

由于FLASH和SRAM共享数据端口,而SRAM是16位数据位宽,FLASH是8位数据位宽,二者共用数据总线就引发了地址对齐问题。不管Avalon master的端口宽度是多少,其地址线的最低位都代表字节地址,即Avalon master的地址只有一种就是字节地址。另外,Avalon三态桥出来的地址Addr也是字节地址,所以连接Avalon三态桥的8位数据宽度的器件,最低位地址与三态桥的 Addr0相连;16位数据宽度的器件,最低地址位必须和三态桥的Addr1相连,而不是Addr0。同理,连接Avalon三态桥的32位数据宽度的器件,其最低地址位必须和三态桥的 Addr2 相连[2]。

3 μC/OS-II的移植

完成NIOS和FLASH以及SRAM的连接,即完成了硬件平台的搭建,可以基于此平台移植μC/OSII。与很多嵌入式操作系统一样,μC/OS-II也不具有通用性,用户要在目标处理器上创建一个多任务的实时嵌入式系统,首先要将操作系统移植到目标处理器上,然后在移植好的操作系统平台上开发应用程序[3]。在操作系统上开发程序,主要是可以依托操作系统的API函数、线程操作等,实现一些较复杂的算法和功能。

3.1 与编译器有关的部分移植

因为不同的处理器有不同的字长,为了保证μC/OS-II的可移植性,就必须定义μC/OS-II认可的数据格式,而标准C中的short、int和long等数据类型是编译器相关的,是不被μC/OS-II认可的。μC/OS-II的数据类型关键字包括 BOOLEAN、INT8U、INT8S和 INT16U等,在移植 μC/OS-II到NIOS之前,需要将OS_CPU.H中数据类型定义的部分进行更改,以适应NIOS中GCC编译器的数据类型。

3.2 与硬件相关的部分移植

μC/OS-II是建立在硬件平台上的内核,当然需要对底层硬件进行操作。μC/OS-II的移植需要用户编写4个与硬件平台相关的函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和 OSTickISR()[4]。

3.3 μC/OS-II多任务的实现

μC/OS-II为占先式的实时内核,支持多任务操作,并且每个任务都有自己的堆栈,这样就清晰了各任务之间的界限,增强了系统的稳定性。μC/OS-II还提供了很多的系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请和释放、时间函数等,并且还支持多达255层的中断嵌套。利用这些系统服务就能完成复杂逻辑的要求。

首先在主函数中调用OSInit()函数初始化系统,然后建立用户任务,最后调用 OSStart()函数启动多任务。当然,在建立主函数之前必须定义各个任务的堆栈,系统的全局变量和相关宏[5]。

有关μC/OS-II的移植,任务实现及其他相关操作请参见文献[1]。

4 网络协议的实现

LXT971A是Intel公司生产的单端口10/100 Mbps以太网收发器。该模块集成了IEEE802.3协议,提供MII(Media Independent Interface)接口,可以支持物理层数据处理。

LXT971A通过一个变换器(Transformer)与外部线路相连,实现内外电路电平转换。在发端,编解码器将MAC层数据并串变换,编解码为曼彻斯特码并发送给变换器。在收端则是一个相反的过程。CPU从LXT971A收到的数据中读取到该数据帧的源地址以及目的地址,得到外部设备的地址以及数据发送的目的地址。经过NIOS的处理,生成相应的发送数据。

4.1 μC/OS-II与LXT971A的数据交换

μC/OS-II是多任务操作系统,在系统内部建立专门的读写任务,通过AVALON总线对外部双口RAM进行读写,实现与LXT971A的数据交换。

在数据发送时,AVALON总线将以太网数据包写入双口RAM中,发模块(NET_T)负责将双口RAM中的以太网包由 MII接口写入 LXT971A[6]。由于NIOS组帧是按字节处理的,而MII接口是半字节,因此,在双口RAM与发模块之间需要进行字节到半字节的转换(D8TO4)。在数据接收时,将MII的半字节转换成字节(D4TO8),再写入双口RAM,由指示NIOS进行读取。数据交换以双口RAM为缓存介质,全部以硬件独立完成,不需要软件的干预,这样实现的一个好处就是实现了 NIOS和LXT971A的硬隔离,在NIOS里不需要对LXT971A的时序进行控制,而专心处理数据信息,提高了信息的处理速度[7]。

4.2 μC/OS-II中简单IP协议的移植

CPU通过LXT971接口与外部网络进行数据交换。TCP/IP协议栈就是CPU与外部接口的协议。基于TCP/IP协议栈实现ARP协议和IP协议等,在IP协议基础上实现ICMP协议等,以实现CPU与外部的网络接口。

TCP/IP协议栈的工作即是解析与封装网络接口包,当接收到以太网帧时即解析,根据以太网帧头部将数据包分配给IP协议处理模块和ARP模块等;如果是发送数据,即对需要发送的数据按照协议进行封装,然后发送至以太网。

在嵌入式系统中,由于资源有限,一般对TCP/IP协议栈进行裁剪,只需要实现基本的ARP、ICMP等即足以满足CPU与外部交换数据的需求[8]。

4.3 ARP协议的实现

地址解析协议(Address Resolution Protocol,ARP)主要工作是将网络地址(IP地址)转换成物理地址(MAC)地址。

ARP工作时,请求主机首先广播一个含有希望到达的IP地址的数据包,网络中所有的主机在收到这个ARP请求后,检查数据包中的目的IP是否和自己的IP地址一致。如果不一致即忽略此数据包,如果一致,则将本机的MAC地址添入一个ARP响应数据包,返回给网络。

ARP的协议类型字为0x0806,ARP请求操作字为0x01,ARP应答操作字为0x02,ARP协议的以太网包主要字段如图2所示。在响应ARP请求时,如果主机检测到ARP地址请求目的地址与本机地址相同,则将以太网包内目的地址换为发起主起地址,源地址换为本机地址,将ARP操作字置为0x02,即可完成ARP请求的响应[9]。

图2 ARP协议的以太网包格式

4.4 ICMP协议的实现

网际控制报文协议 (Internet Control Message Protocol,ICMP)是网络层的差错和控制报文协议。ICMP协议可以通过PING和TRACERT命令网络网络。PING用于检测网络的可达性,本文主要讨论了PING命令的实现。

由于ICMP命令是基于IP的,所以其协议字为0x0800(IP协议)。PING请求命令的ICMP协议字为0x08,PING响应命令的ICMP协议字为0x00。在PING协议的以太网帧格式主要字段如图3所示。在响应PING命令时,只需要将目的地址与源地址,源IP地址与源目的地址进行交换,不可改变IP数据字段部分,即可完成 PING 命令的响应[10,11]。这样,省略了对校验字段的计算,大大加快了PING命令响应的速度。

图3 PING协议的以太网包格式

在响应PING命令时,只需要在IP层将目的IP地址与源IP地址调换,目的MAC地址与源MAC地址进行调换,再将ICMP协议置位即可。

5 结束语

硬件方面,通过双口RAM以信号灯为指示灵活的在操作系统软件和网络接口芯片之间进行数据交换,保证了信息的实时、快速的传输,为网络数据的处理提供了通道;软件方面,NIOS和μC/OS-II的结合,从以前的基于硬件的编程提升到基于操作系统的编程,大大提高了系统设计的灵活性。在μC/OS-II操作系统上完成简单网络协议栈的移植,实现IP、ARP等协议的处理,完成了网络终端的设计。

[1] Altera Corporation.SOPC Builder User Guide[M].USA:Altera Corporation,2012:59-66.

[2] Altera Corporation.Nios II Processor Reference Handbook V5.1[M].USA:Altera Corporation,2008:42-43.

[3] LABROSSE J J.嵌入式实时操作系统μC/OS II[M].邵贝贝,译.北京:北京航空航天大学出版社,2003:2-4.

[4] 胡 珏.基于μC/OS-II的实时多任务应用研究[J].计算技术与自动化,2008,27(1):115-119.

[5] 吕小纳,徐力平.μC/OS-Ⅱ在51单片机上的移植[J].电子设计工程,2012(6):52-54.

[6] Intel Corporation.Intel LXT971A Single-Port 10/100 Mbps PHY Transceiver Datasheet[M].USA:Intel Corp,2005:50-51.

[7] 赵 研,屈 超,岳新宇.千兆以太网SOPC系统的实现[J].无线电工程,2006,36(12):10-12.

[8] 王 珊,程志洪,李 光,等.同步数据转以太网的接口设计[J].无线电工程,2009,39(3):53-55.

[9] 陈 勇,王 群.TCP/IP网络中IP地址原理及IP子网的划分[J].无线电通信技术,2000,26(2):57-61.

[10]周兆清,陈立军.TCP/IP协议在卫星链路上的应用研究[J].无线电工程,2006,36(1):47-50.

[11]李士东.开源Linux中IP协议栈的移植方法[J].无线电工程,2012,42(6):5-7.

猜你喜欢
三态双口字节
No.8 字节跳动将推出独立出口电商APP
双口RAM在航天伺服系统中的应用
No.10 “字节跳动手机”要来了?
直线上空间非齐次三态量子游荡的平稳测度
Matching mechanism analysis on an adaptive cycle engine
简谈MC7字节码
群文阅读理念支撑下的课堂形态
心律失常有“三态” 自我监测要“三看”
高效的双CPU系统安全数据交互机制的应用
基于FPGA的三态总线设计