一种基于FPGA的无线局域网接入实现 | |
无线局域网是目前通信领域研究的一个热点,其MAC层协议采用的是一种载波侦听多址接入/冲突避免(CSMA/CA)的方式。对于无线局域网的分布式系统(DS)而言,可以采用有线的方式来实现,因此无线网与有线网的互连互通显得很关键。本文将介绍一种基于现场可编程门阵列(FPGA)来实现以太网(IEEE802.3)数据与无线局域网(IEEE802.11)数据的桥接与转换,以完成有线接入与无线传输的网桥功能。 FPGA是与传统PLD不同的一类可编程ASIC,它是将门阵列的通用结构与PLD的现场可编程特性结合于一体的新型器件,最早由美国Xilinx公司于1985年推出。FPGA具有集成度高、通用性好、设计灵活、开发周期短、编程方便、产品上市快捷等特点,它的门数可达100万门以上。近年来,FPGA在通信系统的硬件设计方面应用的越来越广泛。 系统硬件平台设计及功能描述 该系统(以下称为MAC板)处于PHY层(物理层)基带处理板与客户多媒体数据接入之间,一方面要将用户数据接入系统,经过基带处理后进行无线传输;另一方面,无线端解调解码后的数据要经过该系统转送给用户。系统的硬件平台设计首先考虑采用专用ASIC芯片,对于板内、板间自定义的接口采用FPGA编程来实现,见图1。 发送方式(Ethernet To Wireless):客户端数据(模拟信号)由双绞线从RJ-45接口进入隔离变压器,隔离变压器主要功能是隔离直流等干扰;模拟信号进入PHY芯片,滤波,整形,4B/5B解码,从MII(Media Independent Interface)变为4位数据并行输出;并行信号进入FPGA实现串行MPDU(MAC Protocol Data Unit)的生成;最后从基带接口发送给后续部分,以实现无线传输。 接收方式(Wireless To Ethernet):接收是发送的逆过程。从PHY层基带处理模块来的串行MPDU数据流经FPGA处理后变成4位并行的符合IEEE802.3格式的数据帧,PHY芯片从MII接收数据,4B/5B编码,转化为MLT3(多电平传输)格式模拟信号,预整形,发送到隔离变压器;信号经隔离变压器,到RJ-45接口、双绞线到达用户端。 需要说明的是,该系统的MPDU并没有完全按照无线局域网IEEE802.11规范来设计,而是作了很大的简化,只力求把以太网的数据无线转发同时能接收进来就可以,目的是给后续的研究提供一个基础。IEEE802.3数据帧和MPDU帧格式如图2所示。把IEEE802.3帧除去Preamble之外的部分当作MPDU的数据,内部并不作处理。由于最长的以太网帧为1518字节,所以Data域实际上控制在1.5K字节左右,用12bit表示长度已经够了。 MII数据与MPDU之间的转换 根据需求和成本综合考虑,这里FPGA采用Xilinx公司的Virtex-E XCV300E器件。它具有高性能、大容量、处理速度快等优点,而且比起Virtex-Ⅱ系列的器件价格低廉。FPGA在这里实现的其实就是一个连续帧数据流的帧头处理及并/串转换。按照功能来说分为发送(Ethernet To Wireless)和接收(Wireless To Ethernet)两个相对独立的模块。 发送模块 主要负责给无线局域网PHY层提供数据流,大体描述其工作过程为:(1)从MII接收来的数据去掉Preamble后经双口RAM缓存,再经一个4位寄存器作并/串转换后输出;(2)根据MPDU的需要,在数据输出之前要先输出表示帧长的Length,它由Write计数器计数产生,经Length存储器缓存,再经一个12位寄存器作并/串转换后输出;(3)由两个状态机为核心构成控制部分,完成对整个数据流的控制。图3给出了发送功能的框图。下面将就主要模块分别简要说明。 前端同步处理:发送时10MHz以太网数据到达MII时分成4路并行,并提供2.5MHz输入时钟;接收时基带处理部分除了提供数据MPDU,还提供了6.25MHz的输入时钟。考虑到数据、使能以及时钟之间的相位关系可能会受传输路径的影响而发生错位,所以在接入时让数据和使能都先经过由该时钟触发的D触发器,使它们与时钟的相位关系重新明确,以便于后续的处理。 DLL分频模块:由于该系统的需要,FPGA的工作时钟不止一个,有的由输入提供,有的必须由本地晶振产生再经FPGA分频后得到。同时,随MPDU一起输出的6.25MHz时钟也要由本地时钟分频得到。尽量利用FPGA的DLL资源(Delay-Locked Loop)来分频,这样可以提高时钟质量。 双口RAM:发来的每一帧不一定能及时处理(有可能这一帧还没处理完,后面又来了很多帧),而且接收和发送时钟频率还不一样。双口RAM就是起到数据缓存的作用。这里收发两个双口RAM都是4bit 16K,即每个存储单元为4bit,存储深度是16K。每个RAM都是单向的,一端只负责收,另一端只负责发,收发时钟独立。实现上Xilinx ISE开发工具提供了RAM的IP Core,使用的是FPGA内的Block RAM资源。 Length存储器:每一帧的数据长度不是一定的,而是有一个范围,所以要用一个存储器把双口RAM里每一帧的长度(这里指Nibble数,每4bit称为一个Nibble)都存起来。这样一方面在读数时能与读计数器有个比较,知道什么时候这一帧读完了;另一方面也是MPUD帧格式本身的需要,MPDU帧头部分要加上12bit Length来表示帧长。 写控制状态机:写控制状态机由4个状态组成,分别为空闲状态(Idle)、判决状态(Decision)、写状态(Write)、结束状态(End)。 Idle状态:把所有计数器、寄存器清零,等待着数据帧的到来。 Decision状态:如果数据使能信号出现高电平,就跳到该状态,完成的功能就是根据帧头的Preamble来决定这一帧是接收还是丢弃。Preamble由15个1010和一个1011组成,如果连续收到8个或8个以上1010,然后再收到一个1011,那么就可以认为这一帧有效,否则就认为这一帧已经出现了严重的误码,或是使能信号置高是由于外界干扰而出现的假象,所以将这一帧丢弃,重新回到Idle状态。 Write状态:在该状态下主要完成3件事。将数据并行写入双口RAM;启动Write计数器,记录这一帧共有多少Nibble;然后把Write计数器的值存入Length存储器。 End状态:这个状态一方面完成全部使能信号的归零,另一方面如果由于前面的处理使得数据和使能信号发生了错位,在这个状态就可以调整。 读控制状态机:根据需要,笔者设计的读控制状态机分别由搜索状态(Search)、Length发送状态(Tran_Length)、读状态(Read)、结束状态(End)4个状态组成。图5给出了状态转移图。 Search状态:每15个时钟周期就检测一下双口RAM中有没有完整的帧。之所以要15个时钟周期才检测一次,而不时时刻刻都在检测,是因为笔者要求每个MPDU之间的间隔至少为15个时钟周期。如果有一个或一个以上完整的帧,而且基带部分已经准备好,那么就跳到下一个状态。 Tran_Length状态:这个状态下,12位寄存器里的值(表示的是该帧的Nibble数)转换成Byte数,再串行移位发送出去。 Read状态:这里开辟了一个控制计数器,从00到11以4个时钟为周期循环计数,每个周期内都把双口RAM里的一个Nibble装载到4位寄存器内,然后再串行移位输出,这样就完成了数据的并/串转换。同时启动Read计数器,计数的值与12位寄存器里的值比较,如果相等说明该帧已经发送完毕了,就停止读数。 End状态:跟写数时一样,这个状态主要完成使能信号归零和错位调整。 帧计数器:用来记录双口RAM里完整的帧的数量,只有当它的值大于或等于1时才能读数,这样才不至于读空。 接收模块 接收是发送的逆过程,在实现上与发送模块有很大的相似性,本文不再赘述。 系统调试验证 为了验证该系统(MAC板)能否工作正常,可以搭建这样一个实验平台。如图6所示,去掉PHY层的基带处理和无线传输部分,把两块MAC板直接相连,如果能实现两台计算机之间通信,就说明系统工作正常。 这里我们采用ping命令的方式进行验证,主要考虑到,ping命令采用的是ICMP协议,并且会要求对方及时的返回ICMP Reply包,因此可以验证该系统MAC板的双向通路连通性。验证结果表明,可以正确实现预期的功能要求。 |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |