随着无线局域网WLAN(wireless local area network)应用的普及,设计具有自主知识产权的WLAN网卡显得更加迫切。网卡中内嵌的通信协议的复杂性很高,当前工业界主要采取基于微处理器、微控制器或DSP嵌入式系统的形式。MicroBlaze 是Xilinx公司推出的高性能32位RISC处理器,是当前工业界快的MPU软核,尤其在Virtex II Pro系列的FPGA设计中得到广泛的应用。与通常片上总线设计流程相似,WLAN中MAC(media access control)协议的实现需要设计基于MicroBlaze片上总线和运行于其上的嵌入式软件。基于MicroBlaze的 FPGA软件开发通常使用C/C++或汇编语言,但是考虑到协议的复杂性,设计者用功能规格描述语言 SDL(specification and description language)来设计WLAN的MAC协议。SDL是一种抽象的形式语言,适于开发移动通信中的复杂软件如MAC层协议。SDL用图形的方式来描述系统的结构、行为和协议各个模块间的通信,它可以在设计的早期快速实现系统的原型。系统软件原型经过性能仿真后可以进行软硬件划分,其中由SDL描述的软件部分可以在带有SDL的编译器、调试器以及带有仿真和验证的开发环境下进一步开发调试,自动转换为C/C++源代码,并和一些嵌入式操作系统(如Vxworks,psos等) 实现集成。终的C/C++源代码可以在不同目标硬件平台的编译器上进行编译,这样能在其硬件平台上产生可执行代码。
本文所涉及的无线局域网网卡实现受到国家863 项目的支持,利用MicroBlaze进行片上总线设计,用SDL语言实现无线局域网的MAC协议层,并在 Telelogic Tau工具的帮助下将SDL描述转换成的C源代码。这样的设计方法具有普遍意义。
2 MAC控制器的硬件结构
无线网卡包括射频功率放大器、射频/中频转换器、中频调制解调器、基带处理器和MAC控制器几个部分,它们分别处理从射频到MAC帧转换过程中的各种信号流。本文主要涉及MAC控制器的设计是基于32位MicroBlaze软核,MicroBlaze总线是哈佛结构,分为连接外设的OPB(on_chip peripheral bus)总线和读写片内双端口RAM的片内总线LMB(local memory bus)。本项目,完成了各种接口模块和从MAC中划分为硬件的模块设计, 并根据相关的总线规范将各硬件模块和MicroBlaze
除软核外,我们用Verilog HDL设计了WEP(wireless equivalent protocol)、PLDI(physical layer data interface)、PLCI(physical layer control interface)和一些通用模块,这些模块的功能描述如下:
(1)物理层数据接口(PLDI):接收基带处理器的数据,并将其传递到MAC控制器处理,反之,将从MAC控制器来的数据发送到基带处理器中;
(2)物理层控制接口(PLCI):向基带处理器和射频收发器发送命令或读取其中的状态;
(3)WEP模块:对数据进行加密和解密以防止窃听,为标准推荐的加密算法;
(4)PCMCIA接口:提供了主机和无线网卡之间的数据接口,还配备了相应的驱动程序。
在上述结构中,PLDI和PLCI提供网络体系中的物理层和MAC层的接口,而PCMCIA接口提供在MAC层和LLC以上各层的接口。WEP模块用硬件实现可以当作协处理器,它可以加速数据的处理,减轻MicroBlaze的负担。
除了上述的自定义模块外,我们还使用了Xilinx提供的可直接使用的IP,如定时器,UART,MMC等。其中的定时器还支持RTOS时钟,并为 Microblaze提供定时功能;中断控制器对不同硬件的中断进行仲裁。本设计中,Xilinx提供的IP和用 Verilog自定义的IP可以在EDK和ISE等工具下生成网表文件,导入到Virtex II系列的xc2v3000FPGA中,实现整个WLAN的MAC控制器。
3 基于SDL的MAC控制软件开发
无线网卡的软件框架 。它由与硬件无关的SDL描述的MAC协议和运行在嵌入式MicroBlaze上的对硬件操作的片内驱动程序和中断服务程序两个部分组成。无线局域网的MAC协议是用SDL描述、仿真和验证的。它本身不包含任何嵌入式操作系统和硬件平台的特征,它使用环境函数为接口,作为与实际物理平台交互。环境函数作为SDL设计和运行的中间媒介,它调用驱动程序和中断服务程序以控制硬件,使设计者能手动处理SDL系统和物理环境之间的信号。有了环境函数这样的中间层,在不同平台上的上层协议的移植就变得异常方便。在环境函数下面的驱动和中断服务使整个系统在相应的硬件平台上正常地工作。
3.1 无线局域网MAC层协议的SDL实现
MAC层协议栈的实现是整个软件框架中重要的部分。利用SDL,我们可以获得从初的功能需求到协议实现的无缝衔接。SDL框架允许将整个复杂系统分成若干个块,而块又可以分为相应的子块,直到规模的叶子块(不能再分割的子块)为止,层的叶子块由进程和服务描述。各个部分通过信号实现进程间通信和进程与环境之间的通信。进程中的SDL行为用扩展有限状态机描述,它由一系列的状态、输入信号和定时器信号组成。外部的输入信号和进程内的定时器都可以导致进程中的状态转移,在此过程中可能产生输出信号,从而触发其他进程中的事件。
整个无线局域网MAC协议设计分为7个模块,与硬件无关的软件部分。在早期协议非常抽象的层次描述就能建立系统的快速原型,主要模块如下:
(1)MAC数据服务 和 MAC管理服务:分别完成从LLC层和MAC层之间的数据包和管理信息的传递,实现二者间的接口;
(2)LME_STA:对管理信息进行分类处理,诸如授权、关联、再关联等服务;
(3)MPDU生成:把从LLC来的数据和管理按PDU分段,并实现节能状态下MAC帧排队;
(4)协议控制:处理无线局域网的特殊服务
如DCF,轮询以及数据帧的发送接收控制调度;(5)发送模块:提供时间标签、延时等功能,把MAC帧发送到物理层上;
(6)接收模块:接收从物理层来的数据,并进行验证、解密、解复用等功能。
完成这些模块的描述,就可以在抽象的层次上仿真数据通路和管理层通路。当在PLDI上检测到数据时,可将其封装成信号的参数,通过相应的信号发送到接收模块,在接收模块上判断它是数据帧或是控制帧。数据帧走数据通道,通过协议控制模块到MAC服务模块,终到上层的LLC模块;管理帧走管理通道,通过Mlme_sta模块到上层的管理模块。从LLC层下发到物理层的数据帧和管理帧将分别沿着上面所述的相反的路径传送。由于仿真在早期完成,隐藏低层次的信息,并尽早地进行逻辑仿真,以便将错误消灭在初的阶段。随着设计实现的深化,将细化每个模块,直到的进程实现。细化前将使用TTCN和MSC工具进行较高抽象层次的仿真和验证,以确保现阶段传递到下一阶段的设计是完全正确的。
3.2 SDL到C代码的转换
在SDL描述的协议经过终的验证后,就可以用Cadvanced或Cmicro的C语言编译器将SDL描述转换成C源代码。SDL描述的系统和物理环境(包括操作系统、文件系统和硬件)的衔接是由根据具体的硬件和操作系统所定义的环境函数来完成的。环境函数通过驱动程序或者中断服务程序的调用,从硬件或者操作系统中读取相应的数据,对这些数据分类处理并将它们封装成SDL信号所携带的参数,封装后以SDL信号的形式传到SDL所描述的系统[1]。在外界信号的驱动下,SDL系统可以完成相应的动作,从而执行WLAN的协议功能。反过来,也可以对SDL系统到环境中的信号进行分析,将其转换为实际的数据,通过驱动程序或者操作系统的调用等将其写到硬件中,从而对其实际工作的物理环境产生相应的控制。除此之外,环境函数还可以完成整个网卡系统的初始化,以使系统在正确的状态下工作。
3.3 与实时操作系统(RTOS)的集成
在使用Cadvanced将SDL转换为C代码时,需要通过操作系统的集成,以使它能够适应相应的平台。目前的开发工具,如Telelogic等提供了松散集成、紧密集成和线程松散集成三种[4],主要区别体现在将SDL描述中的进程映射到操作系统中的系统任务。松散集成中,整个SDL的设计将以操作系统中的一个任务的形式出现。而SDL系统中进程间的调度是通过标准内核完成的,在一个时间内实现一个状态的跳变。SDL系统和外部环境之间的通信是通过用户自己定义的xInEnv()和xOutEnv()两个C函数来完成的。这两个函数是我们在3.2中所描述的环境函数中的一个部分。
在紧密集成中,SDL每个进程映射为操作系统调度的任务,并由操作系统任务调度机制来完成进程的调度,进程的通信是由操作系统自身的消息队列完成的。在该集成中,可以给SDL的进程设置优先级。此外,由于该集成完全利用了相应的操作系统,因此环境函数是不需要的。
我们的设计是Cadvance的生成C代码和基于 UC/OS II嵌入式操作系统的松集成。使用的Telelogic Tau工具并不支持对UC/OS II操作系统的集成。但是,利用松集成将整个MAC协议映射为一个进程,该进程作为UC/OS-II中的一个主任务。而UC/OS II操作系统又可以移植到Microblaze上面的,这样MAC协议就可以运行在拥有MicroBlaze 软核的FPGA上。终的代码大小和执行时间完全满足初所设计的实现无线局域网网卡的功能需求。
4 软硬件协同设计开发流程
设计中,我们使用EDK工具包进行软硬件协同设计和协同仿真。EDK自身也携带了一些设计工具和很多标准的外设IP如UART,GPIO等,采用基于平台设计的思想。其嵌入式处理器是MicroBlaze-Xilinx公司提供的快的工业软核。整个系统的设计流程,包括软、硬件的设计 。
这里采用基于平台设计的方法构建硬件平台。该平台涉及到各种外设、MicroBlaze总线接口和系统的互联,其中外设是Xilinx提供的IP核和用户用 Verilog HDL描述的定制IP,它用MHS文件描述系统中各个部分的互联。该系统经过EDK中平台生成器编译后,会伴随着生成MSS文件(进行平台软件配置的文件)。在该文件中我们可以定义标准的输入输出设备、中断服务程序以及其他共同的软件特征。
基于SDL的无线通信的协议实现和具体的运行平台无关,所以在进行硬件平台设计的同时可以并行进行协议栈的实现。既然SDL的开发工具可以把SDL实现自动映射为C代码,故对于不便用SDL描述的功能可直接用C语言,以外部函数的形式实现,SDL模型再对这些函数进行调用。此外,为了让SDL系统设计在一定的平台上工作,还要设计其环境函数,包含SDL特征的运行库(run-time library)。该库中包含了诸如类型定义、进程执行的调度等等。驱动程
序是用来驱动硬件,包括EDK自带的IP和用户自定制的IP。驱动EDK自带的IP有现成的驱动,用户可以在环境函数中直接调用相关的驱动程序。用户自定制IP的驱动需要用户针对相关的硬件自己开发。上述文件连同EDK中的库可以编译并连接,生成可执行的映像。它可以和并行设计的硬件平台在EDK上针对进行协同仿真。在仿真和测试中将检测到一些错误,我们修改源代码。若仿真验证的结果完全正确,就可以把生成的映像转换为bit流,并到FPGA中。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。