基于EP2S30 FPGA芯片实现MAC接收控制器的设计

李勇 唐贵林 黄 发表于 2020-08-05 17:00:01 收藏 已收藏
赞(0) •  评论(0
400万+工程师在用
400万+工程师在用

基于EP2S30 FPGA芯片实现MAC接收控制器的设计

李勇 唐贵林 黄 发表于 2020-08-05 17:00:01
+关注

1、引言

传统的测控网是将具有各种功能的仪器通过诸如VXI、CAN等专用总线连接起来构成一套完整的测控系统。现在看来,传统的测控网主要具有四个方面的不足:一、数据传输速率有限;二、传输距离有限;三、设备数量有限;四、成本高昂。传统的测控网已经很难满足人们对大数据量,远距离和低成本的要求。随着Internet技术的发展和普及,通过将仪器接入Internet,仪器将测量的数据封装成IP包的形式进行传输,不仅能够解决传统测控网的不足,而且可以共享网络技术发展带来的便利,跨越地域的限制,实现测量数据的共享。本文主要讨论多路千兆以太网信号中IP数据收发的设计与实现,详细介绍了MAC接收控制器的设计,为仪器接入网络,组建高速的网络化测控系统提供了一种经济高效的测试数据传输手段。

2、系统功能及介绍

系统框图如图1所示:

基于EP2S30 FPGA芯片实现MAC接收控制器的设计

本系统主要采用Altera公司的StratixII系列FPGA芯片EP2S30为主处理芯片,通过Vitesse公司的PHY芯片VSC8224及相关的外围电路组成,实现了8路千兆以太网电信号中IP数据收发的功能。VSC8224主要实现物理层上的比特流和链路层上的数据相互转换。IP数据接收和输出部分由EP2S30通过VHDL程序来实现。EP2S30在整个系统中起着核心作用,它将2片VSC8224送来的数据进行重组,将MAC帧中的IP数据提取出来,保存在缓冲存储器中,最后将8路数据依次从IP通道输出给另外的设备,同时EP2S30也接收其它设备送来的IP数据,然后封装成MAC帧通过VSC8224发送到以太网上。EP2S30也控制LED阵列来指示当前各个网口的连接状态及系统工作状态。

3、系统硬件设计

EP2S30是Altera公司推出的StratixII系列FPGA中的一款,它具有非常丰富的I/O资源,支持多种电平标准,它内部资源丰富,可以实现复杂的应用,特别是它内部集成了M512/M4K/MRAM三种片上RAM,而且数量众多,可以将它们配置成单口/双口/FIFO等多种存储器,特别适合大数据量的存储转发。

VSC8224是Vitesse公司推出的具有4个口的低功耗、支持10/100/1000BASE-T和1000BASE-X的高性能以太网PHY芯片。VSC8224支持最新的RGMII V2.0标准,这为PCB板设计提供了极大的便利,无须考虑非常严格的延时要求。图1中2片VSC8224与FPGA之间的连接就是采用的RGMII接口的方式。VSC8224有3种配置方式可供选择,这里使用EEPROM(AT24C16)对它进行配置,先将配置内容通过编程器固化到EEPROM中,VSC8224在上电或者复位之后自动从EEPROM中读取出配置数据来自己进行配置。FPGA通过2线的SMI串行管理接口对VSC8224内部的状态寄存器进行访问,读出VSC8224的工作状态,以确定进一步的操作。FPGA通过VSC8244的2线的串行LED状态输出口来读出4个端口的状态,然后通过驱动器驱动发光二极管发光,这为设计提供了极大的灵活性,可以控制发光二极管显示多种状态。

4、 MAC控制器的VHDL实现

本系统采用VHDL实现MAC控制器和IP数据的接收与输出。MAC帧的格式如图2所示:

从MAC帧格式,可以看出,在接收的过程中只要我们找到了先导码和分界符后就可以根据MAC帧格式得到整个MAC帧,进而根据长度/类型来判断此MAC帧的内容,从而获得MAC帧中的IP数据。发送IP数据的过程是接收IP数据的逆过程,只要按照MAC帧的格式将IP数据封装在一个MAC帧中,再通过PHY芯片依次发送出去就能实现IP数据的传输。

FPGA主要实现MAC帧的收发、MAC帧的组装和分解、IP数据的收发功能,利用VHDL模块化设计的优点,只要实现1路的功能,另外7路就能很容易实现了。本文主要介绍MAC接收控制器的设计,这里利用VHDL设计如图3所示的MAC接收控制器。

如图3所示,根据RGMII接口规范,RXCLK为VSC8224从接收数据中提取的125MHz接收时钟,RXD[3:0]和RXCTL在RXCLK的上下沿都有效,RxSt为RXCTL在RXCLK上下沿的与,RXD数据相当于一个4bit×125MHz的DDR信号,为了便于后期处理,将数据组合成一个8bit×125MHz的信号。这一部分由图3中的数据组合模块组成。

为了实现MAC巨帧的处理,充分利用FPGA资源,实现异步数据的同步输出,为每一路千兆以太网都生成了一个16K字节的双口RAM作为缓冲器,双口RAM的输入是8比特,输出为16比特的数据,同时输入时钟是各路提取的125MHz的时钟,输出为同源时钟产生的160MHz时钟,这样能够实现了异步信号的同步输出。

IP数据的提取和存储由接收控制器来实现,IP数据的输出由输出控制器来实现。下面就分别介绍这两种控制器。

4.1 接收控制器

接收控制器主要是由一个写地址控制器和一个有限状态机组成。

写地址控制器主要控制3个信号,一个是14bit的写地址寄存器WrAddr,一个是14bit的写起始地址寄存器Haddr和一个写使能WrEnable信号。在每次写一帧数据之前都将写起始地址寄存器的值赋给写地址寄存器。在每帧数据CRC校验正确之后,修改Haddr的值为当前WrAddr的值加1,如果CRC校验有误则不修改Haddr的值,则下一帧从原来的地址开始,覆盖上一帧接收错误的数据。由于双口RAM的输入是8bit,输出为16bit,而且IP数据总长度可能为奇数也可能为偶数,为了便于后面的数据输出,Haddr的值始终应该为偶数,当CRC校验无误后,如果IP数据包的长度为奇数,应将Haddr自动加上1变为偶数,作为下一次写地址的起始地址。WrAddr在达到0x3FFF之后自动回到0x0000继续递增。

根据MAC帧格式,接收状态机分别设置了9个状态:idle, preamble, sfd, destaddr, souaddr, typ_len, payload, padding, fcs。当RxSt为0时,接收状态机始终处于idle状态。当RxSt为1时,接收状态机开始监视RxData上的数据,如果为0x55,则由idle态进入preamble态,如果满足7个连续的0x55,则进入sfd状态,否则返回idle状态。在sfd状态下,如果此时RxData上的数据为0xD5,则进入下一个状态,否则返回到idle状态。在destaddr和souaddr状态下,接收控制器可以获得目的MAC地址和源MAC地址。在typ_len状态下,接收控制器可以获得该MAC帧的类型或长度,由于该系统主要是处理IP数据,所以只关心类型为0x0800的IP数据和类型为0x0806的Arp请求帧。如果接收的类型不是0x0800或0x0806则放弃这次接收,返回到idle状态。如果为Arp请求帧,在接收完后帧校验无误则使能ArpEnable信号,使能Arp应答模块发送Arp应答帧。如果为IP数据包帧,在payload状态下,如果destaddr状态获得的目的MAC地址与自身的MAC地址一致则继续进行接收,否则放弃这次接收。在数据接收完之后,如果总长度大于46字节,则进入fcs状态,以获得帧校验结果;如果长度小于46字节,则还要进入padding状态,之后才能进入fcs状态。在fcs状态之后,将获得的帧校验结果和CRC32模块计算获得的结果进行比较,以保证传输的正确性。

4.2 输出控制器

与接收控制器一样,输出控制器也是由一个读地址控制器和一个有限状态机组成。

读地址控制器有一个13bit的读地址信号RdAddr,这个读地址信号与写控制器输出的写起始地址信号Haddr的高13bit进行比较,如果相等则表明当前双口RAM中无新的IP数据,如果不相等则表明RAM中至少有一帧新的数据。此时输出一个DatAvailable信号给顶层模块,顶层模块根据各路情况,输出一个RdEnable信号给下层模块,下层模块将RdAddr信号递增以读出RAM中的数据,当达到0x1FFF时自动回到0x0000进行递增。

由于保存在RAM中的数据包括MAC帧的目的地址、源地址、类型/长度和数据部分,所以输出状态机设置了5个状态:Ridle,Rdestaddr,Rsouaddr,Rtyp_len,Rdat。在RdEnable信号无效时,状态机始终处于Ridle状态,当RdEnable信号有效时,由Ridle状态依次进入Rdestaddr、Rsouaddr和Rtyp_len状态。IPvalid用于指示IP数据有效,IPhead指示IP包的第一个字节,IPtail指示IP包的最后一个字节,HalfB用于指示在IP数据包为奇数时,IP包输出的最后一个16bit数据的高8bit为有效的IP数据。IPCLK为160MHz的时钟,是由外部输入的50MHz时钟经过FPGA内部的锁相环得到。

4.3 顶层模块设计

顶层模块主要是协调与控制8路模块的工作。顶层模块依次对每一路进行轮询,由于下层模块的RAM中一旦有新的IP数据就会输出一个DatAvailable信号,从第一路到第8路依次查询各路的DatAvailable信号,如果有效则输出一个RdEnable信号给该模块,读出一帧IP数据包。当一帧IP数据包输出后继续进行下一路的查询,而不管这一路是否还有新的IP数据没有读出,如果还有数据没有读出,在下次轮询的时候再读出,这样将减小因为某一路一直占用IP数据输出通道而其他路无法输出IP数据而发生双口RAM溢出的可能。

5 、结论

本文所设计的千兆以太网IP数据传输设备通过在现场的调试,运行良好,状况稳定,误码率低,而且支持IP数据包长达8K字节的巨帧,提高了网络利用率,达到了高速测控数据传输的要求。该系统的研制为仪器接入网络,利用网络来收发测试数据成为可能,为网络化仪器和网络化测控系统的发展提供了经济可行的高速数据传输手段。

本文作者创新点:利用FPGA片上RAM为每一路千兆以太网设计了一个数据缓冲器及一个MAC接收控制器,解决了多路IP数据收发和异步数据同步输出的问题。

责任编辑:gt

打开APP阅读更多精彩内容

收藏

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉

相关话题

评论(0)

加载更多评论

分享到

QQ空间 QQ好友 微博
取消