0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用FPGA控制逻辑实现以太网控制器的设计方法

电子设计 来源:郭婷 作者:电子设计 2019-08-16 08:05 次阅读

目前,以太网802.3协议和TCP/IP协议是现今嵌入式系统接入Internet的首选协议。而以太网(Ethernet)的核心思想是多用户使用共享的公共传输信道,它通过带冲突检测的载波侦听多路访问协议(CSMA/CD)来控制对介质的访问。

本文给出了完全用FPGA的控制逻辑来实现嵌入式系统Internet接人中的底层以太网控制器的设计方法。并最终设计出符合IEEE 802.3标准的控制器,从而实现了10 Mbps和100 Mbps两种传输速率以及半双工和全双工两种工作模式,并可通过IEEE802.3标准定义的介质独立接口(MII)与以太网物理层芯片相连接。

1 总体设计方案

以太网控制器的FPGA设计工作包括以太网MAC子层的FPGA设计、MAC子层与上层协议的接口设计以及MAC与物理层(PHY)的MII接口设计。

该以太网控制器的总体结构设计框图如图1所示。整个系统分为发送模块、接收模块、MAC状态模块、MAC控制模块、MII管理模块和主机接口模块六部分。发送模块和接收模块主要提供MAC帧的发送和接收功能,其主要操作有MAC帧的封装与解包以及错误检测,它直接提供了到外部物理层芯片(PHY)的并行数据接口(MII)。MAC控制模块则用于执行全双工模式中的流量控制功能。MAC状态模块可用来监视MAC的操作过程的各种状态信息,并作修改。MII管理模块提供了标准的IEEE 802.3介质独立接口(MII),可用于连接以太网的链路层与物理层(PHY)。主机接口则提供有以太网控制器与上层协议(如TCP/IP协议)之间的接口,以用于数据的发送、接收以及对控制器内各种寄存器(控制、状态和命令寄存器)的设置。

2 MAC发送模块

MAC发送模块可将上层协议提供的数据封装之后通过MII接口发送给PHY。发送模块可接收主机接口模块的数据帧开始和数据帧结束标志,并通过主机接口从外部存储器中读取要发送的数据,然后对数据进行封装,然后通过PHY提供的载波侦听和冲突检测信号,在信道空闲时通过MII接口将数据以4位的宽度发送给PHY,最后由PHY将数据发送到网络上。

利用FPGA控制逻辑实现以太网控制器的设计方法

发送模块由CRC生成模块(crc_gen)、随机数生成模块(random_gen)、发送计数模块(tx_cnt) 和发送状态机(tx_statem_模块等四个子模块组成。

利用FPGA控制逻辑实现以太网控制器的设计方法

2.1 CRC生成模块(crc_gen)

该模块用于计算发送数据的CRC值,并将CRC值添加到数据帧的帧校验序列字段(FCS)内。为了提高效率,并考虑到MAC与PHY的数据通道为4位,设计时可采用4位并行CRC计算方法,算法中可使用一个次态函数,并通过循环迭代来模拟移位操作。这样,发送模块就可以在边发送数据到PHY的同时,一边计算CRC,这样当数据发送完时,CRC值也计算完成了。

2.2 随机数生成模块(random_gen)

如在发送过程中检测到冲突,发送模块就先发送拥塞码(jam),随后停止发送。在下次重新发送之前,发送模块会先执行一个后退(backoff)操作,即发送模块等待一个半随机(生成的随机数有范围限制)的时间之后再开始发送。该随机数就是由随机数生成模块产生的,它采用经典的截断二元指数后退算法,后退的时间是一个与发生冲突次数有关的随机数,随着冲突的次数增多,用于生成该随机数的范同也将逐渐增大,以减少冲突的概率。

2.3 发送计数模块(tx_cnt)

发送计数模块由半字节计数器(nibcnt)、字节计数器和重试次数计数器(retrycnt)三个计数器组成。其中重试次数计数器(retrycnt)可对发送某个帧时产生冲突次数进行计数。当计数器的值达到最大重试次数时,它将放弃重试,并丢弃发送缓冲器内的数据。同时,重试计数器的值还被随机数生成模块用于计算下次重试之前需要后退(backoff)的时隙的个数。

半字节计数器和字节计数器分别用于对发送过程中的半字节(bibble)和字节进行计数。

信道忙时,发送模块会一直等待,半字节计算器一直计数。当计数到额定等待时间时(最大帧长度的两倍,即3036字节时间),系统会根据设置放弃发送或是一直等待(可选功能)。一旦信道空闲再进入帧间间隙周期(≥96个比特时间),南半字节计数器从零开始计数。帧间间隙分为两个部分,在前2/3个周期中,如果检测到信道忙信号,则半字节计数器复位,发送模块重新开始等待;在后l/3周期中,即使检测到信道忙信号,半字节计数器也不会复位,而是继续计数,以保证每个站点公平的竞争信道。而当半字节计数器的值达到帧问间隙周期时,此时如果有数据等待发送,发送模块就开始发送数据。此外,半字节计算器还用于前序码的生成和短帧的判断,在数据帧的长度小于最小帧时,发送模块必须根据系统设置进行填充或不填充。

字节计算器还可用于滞后冲突(late collision)和超长帧的判断。当滞后冲突发生时,正在发送的数据将被丢弃。超长帧的判断则是从对帧内容(包括FCS)进行字节计数,如果字节计数器的值大于最大有效帧的长度(1518个字节),发送模块就根据系统设置(是否支持超长帧)丢弃或发送。

2.4 发送状态机模块(tx_statem)

发送状态机模块是整个发送模块的核心,主要用于控制整个发送过程。发送状态机由I-die_State、Preamble_State、 Data0_State、 Da-tal_State、 PAD_State、 FCS_State、 IPG_State、Jam_State、BackOff_State、Defer_State等十个状态组成。

系统复位后,发送模块即进入Defer_State状态,并一直检测载波侦听(CarrierSense)信号。当载波侦听信号变成无效(表示信道空闲)时,状态机进人IPG_State状态。尔后,在等待一个帧间间隙之后,状态机则进入Idle_State状态。如果在帧间间隙的前2/3个周期检测到信道忙信号,状态机将重新回到Defer_State状态。

状态机进入Idle_State状态之后,发送模块将检测载波侦听信号和主机接口的发送请求。若主机模块请求发送,状态机将进入Preamble_State状态,发送模块即通知PHY发送开始,同时开始发送前序码(7个0x5),然后发送帧起始定界符(SFD,0xd)。状态机进入Data0_State后,发送模块将发送一个数据字节的低4位(LSB nibble),将当其进入Data1_State状态后,发送模块则发送数据字节的高4位(MSB nibble)。随后,状态机一直在data0和data1之间循环,直到数据发送完毕。当还剩一个字节时,主机模块将通过发送帧结束信号来通知发送模块。如果数据帧的长度大于最小帧并且小于最大帧,状态机就进入FCS_State状态,此时发送模块则将CRC生成模块生成的CRC值添加到帧的FCS字段中并发送给PHY。帧发送完之后,状态机进入Defer_State状态,之后是IPG_State和Idle_State状态。此后状态机又回到初始状态,以重新等待新的发送请求。

如果数据帧的长度小于最短帧,状态机就进入PAD_State状态,发送模块根据系统设置是否在数据之后来添加填充码。然后,状态机进入FCS_State状态。如果数据帧的长度大于最大帧,而系统设置又支持发送超长帧,那么,状态机就进入FCS_State状态;如果不支持发送超长帧,发送模块将放弃发送,状态机直接进入Defer状态,然后是IPG状态,最后回到Idle状态。

在发送数据的过程中,发送模块会一直检查冲突检测信号(collision detected)。如果发现冲突且状态机正处于Preamble_State,状态机将在发送完前序码和SFD之后进入Jam_State,并发送拥塞码,然后进入BackOff状态,以等待重试。之后,状态机经过Defer和IPG回到Idle状态。如果此时重试次数计数器的值没有达到额定值,发送模块将重新开始发送刚才的帧,并将重试次数计数器的值加1;如果发现冲突且状态机处于data0、da-tal或FCS状态,而且没有超过冲突时间窗,那么状态机将马上进入Jam状态发送拥塞码,之后经过BackOff、Defer、IPG、回到Idle,并根据重试计数器的值决定是否重新发送刚才的数据帧;如果检测到发生冲突的时间超过了冲突时间窗,状态机将进入Defer状态,然后经过IPG到IDLE状态,并放弃重试。

利用FPGA控制逻辑实现以太网控制器的设计方法

在全双工模式中发送帧时,不会进行延迟(defer),发送的过程中也不会产生冲突。此时,发送模块将忽略PHY的载波侦听和冲突检测信号。当然,帧与帧之间仍然需遵守帧间间隙的规则。因此,全双工模式下的发送状态机没有Jam_State、。BackOff_State、Defer_State三个状态。

3 MAC接收模块

MAC接收模块负责数据帧的接收。当外部PHY将通信信道的串行数据转换为半字节长的并行数据并发送给接收模块后,接收模块会将这些半字节数据转换为字节数据,然后经过地址识别、CRC校验、长度判断等操作后,再通过主机接口写入外部存储器,并在主机接口模块的接收队列中记录帧的相关信息。此外,接收模块还负责前序码和CRC的移除。

接收模块由CRC校验模块、地址识别模块、接收计数器模块和接收状态机模块等四部分组成。

利用FPGA控制逻辑实现以太网控制器的设计方法

接收模块中的CRC校验模块可通过检查输入帧的CRC值来验证帧的正确性。其算法与CRC生成模块相同。

地址识别模块用于决定是否接收收到的帧,接收模块首先接收输入帧而不管目的地址,随后由地址识别模块检查帧中的目的地址。若MAC被设置为混杂模式(Promiscuous mode)且目的地址为广播地址,同时允许接收广播帧,帧则被接收。否则,帧被丢弃。

接收计数器模块由字节计数器(Bytecnt)和帧间间隙计数器(IFGcnt)组成。字节计数器在接收帧过程中将对字节进行计数,以用于识别帧中的各个字段(前序码、目的地址字段、数据、FCS等)以及判断超长帧。帧间间隙计数器则对两帧之间的间隔时间进行计数,以用于判断下一帧数据的开始。IEEE 802.3规定,两帧之间的间隔至少必须为96个比特时间(10 Mbps中为9 600ns,100 Mbps中为960 ns)。如果两帧之间的间隔小于要求,帧将被丢弃。

接收状态机为接收模块的核心,用于控制整个接收过程。接收状态机由Idle_State、Drop_State、Preamble_State、 SFD_State、 Da-ta0_State、Data1_State等六个状态组成。

利用FPGA控制逻辑实现以太网控制器的设计方法

系统复位后,状态机处于Drop_State。如果此时MII的数据有效信号(MRxDV)无效,状态机马上进入Idle_State状态,并一直处于Idle等待接收输入帧。

当接收模块检测到数据有效信号之后,状态机将进入Preamble_State,并开始接收前序码。此后再状态机进入SFD_State,接收一个字节的帧起始定界符,之后,根据IFGcnt计数器的值进入不同的状态。如果,IFGcnt所确定的时间大于96个比特时间,状态机将进入Data0状态以接收字节的低4位,然后是Data1状态,并接收字节的高4位,之后又回到Data0状态。状态机就一直在这两个状态之间循环,直到数据接收完毕(PHY清除MRxDV信号)后进入Idle,以重新等待接收新的数据;如果接收到帧起始定界符时,IFGcnt计数器所确定的时间小于96个比特时间,那么状态机将进入Drop_State状态,并一直维持该状态直到数据有效信号结束(PHY清除MRxDV信号)。之后,状态机再同到Idle等待接收新的数据。

如果在接收前序码、帧起始定界符和数据期间,数据有效信号被清除,那么,状态机将回到Idle。

4 MAC的其它模块

4.1 MAC状态模块

在接收过程的状态信息中,接收错误表明PHY在接收过程中检测到了错误;接收到无效符号则表明接收到的帧中包括无效(PHY无法识别)的符号;滞后冲突表明接收帧时检测到滞后冲突信号;超短帧表明接收到的帧小于最短有效的长度;超长帧表明接收到的帧大于最大有效帧的长度;半字节对齐错误表明接收到的半字节不是偶数(即帧的长度不是字节的整数倍);接收溢出则表明接收模块来不及处理接收到的数据而导致接收FIFO溢出。

在发送过程的状态信息中,超过重试限制表示由于冲突导致的重试次数超过了额定值;滞后冲突表示发送帧的过程中检测到的冲突信号超过了规定的冲突时间窗;延迟,表明在发送帧之前检测到信道忙。

4.2 MAC控制模块

MAC控制模块提供有全双工操作中的流量控制功能,流量控制可通过发送和接收PAUSE的MAC控制帧来实现。当接收站点的接收缓冲区(Rx FIFO)快溢出而主机接口义来不及取走数据时,系统就会发出流量控制请求。MAC在接收到流量控制请求之后,即发送PAUSE控制帧,以使数据发送站点在指定的时间内暂停发送数据。

数据发送站点接收到PAUSE控制帧后,便可根据帧中的参数设置PAUSE定时器。PAUSE定时器在减到0之前,发送模块将暂停发送数据(PAUSE控制帧除外)。PAUSE定时器减到0之后,发送模块将恢复发送数据。

4.3 MII管理模块

MII管理模块用于控制MAC与外部PHY之间的接口,以用于对PHY进行配置并读取其状态信息。该接口由时钟信号MDC和双向数据信号MDIO组成。MII管理模块则由时钟生成模块、移位寄存器模块和输出控制模块三部分组成。

时钟生成模块可以根据系统时钟和系统设置中的分频系数来产生MII管理模块的时钟信号MDC(10 Mbps速率时为2.5 MHz,100 Mbps速率时为25 MHz)。

移位寄存器模块既可用于对PHY的控制数据进行写入操作,也可用于对PHY的状态信息进行读出操作。写控制数据时,移位寄存器根据其他模块的控制信号将并行控制数据转换为串行数据;而在读状态信息时,移位寄存器则将PHY的串行数据转换为并行数据,MAC中的其他模块可将该并行数据写入适当的寄存器。

由于MDIO是双向信号,因此,输出控制模块就用来决定MDIO是处于输入状态还是输出状态。当MDIO处于输出状态时,移位寄存器输出的串行控制数据在经过时钟同步后发送到PHY;当MDIO处于输入状态时,移位寄存器将数据线上的串行数据转换为并行数据。

4.4 主机接口模块

主机接口是运行以太网的上层协议(如TCP/IP协议)与MAC控制器的接口。通过该接口,上层协议可以设置MAC的工作模式并读取MAC的状态信息。该接口还可用于上层协议与MAC之间的数据交换。

主机接口模块内有一组寄存器,可用于存储上层协议对MAC设置的参数以及MAC的状态信息。上层协议对MAC设置的参数包括接收超短帧的使能、添加填充码使能、持发送超长帧的使能、添加CRC校验值使能、全双工模式或半双工模式、持超长延迟(Defer)使能、混杂模式(Promiscuous)、接收广播帧使能、发送和接收使能、中断源和中断使能、帧间间隙的长度、最大帧和最小帧的长度、重试限制和冲突时间窗、MII地址和MII控制命令、接收和发送队列的长度以及本机MAC地址等。

上层协议通过MAC发送和接收数据的操作主要由主机接口模块内的两个队列来进行管理,这两个队列用于对等待发送的多个帧和接收到的多个帧进行排队。

发送队列主要记录等待发送的帧的相关信息、发送该帧时对MAC的设置以及该帧发送完之后产生的状态信息。帧的相关信息包括帧的长度、帧在外部存储器中的地址、该帧是否准备好发送以及队列中是否还有其它帧等待发送;对MAC的设置则包括中断使能、填充使能、CRC使能;产生的状态信息包括成功发送之前的重试次数、由于达到重试限制而放弃发送、发送时产生的滞后冲突以及成功发送之前发生过的延迟。

接收队列主要对接收到的数据帧进行排队并记录每个接收到的帧信息。这些信息包括帧的长度、是控制帧还是普通数据帧、帧中包含无效符号、接收到的帧太长或太短、发生CRC错误、接收的过程中发生滞后冲突、帧是否接收完、队列中是否还有其它已接收到的帧以及帧存储在外部存储器中的地址等。该位同时队列中还有针对每个帧的设置位,用来设置是否在接收到帧时产生中断。

发送队列和接收队列的长度都可以在控制寄存器中进行设置。

5 综合结果

本设计采用Verilog语言描述,FPGA芯片使用Altera公司的Stratix-6,整个设计经Synplicity公司的Synplify Pro 8.1综合后,可在Altera公司的Quartus II 4.2下布局布线,最后用Mentor Graphics公司的ModelSim软件进行仿真。表1所列是Syn-plify Pro 8.1综合结果。

利用FPGA控制逻辑实现以太网控制器的设计方法

该以太网控制器使用的逻辑单元为2273,占用的存储器资源为9 216 bits,最终的时钟频率可达到101.16 MHz,因此,能够满足100 Mbit/s的速率要求。

利用FPGA控制逻辑实现以太网控制器的设计方法

6 结束语

本文给出了完全用FPGA实现嵌入式以太网控制器的设计方法,该方法只需要外接物理层芯片(PHY)和集成有TCP/IP协议的单芯片(即硬协议)或在嵌入式操作系统中运行TCP/IP协议(即软协议)就可以实现嵌入式系统的高速互联网接入。从而有效地降低成本,减小版面积和布线复杂度,提高整个系统的集成度。因此,该方法具有一定的实际意义。


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

    关注

    112

    文章

    16402

    浏览量

    178587
  • 嵌入式
    +关注

    关注

    5087

    文章

    19148

    浏览量

    306171
  • 以太网
    +关注

    关注

    40

    文章

    5441

    浏览量

    172034
收藏 人收藏

    评论

    相关推荐

    基于Xilinx FPGA的千兆以太网控制器的开发

    千兆以太网利用了原以太网标准所规定的全部技术规范,其中包括CSMA/CD协议、以太网帧、全双工、流量控制以及IEEE 802.3标准中所定义
    发表于 01-23 11:13 3w次阅读
    基于Xilinx <b class='flag-5'>FPGA</b>的千兆<b class='flag-5'>以太网</b><b class='flag-5'>控制器</b>的开发

    基于FPGA的万兆以太网接口的设计与实现

    基于FPGA的万兆以太网接口的设计与实现标准中万兆以太网物理层及媒质接入控制子层的相关协议以 应用物理环境为例,阐述了万兆
    发表于 08-11 15:48

    以太网控制器(MAC)的基本框架怎么搭建

    以太网控制器(MAC)实现以太网标准的第二层协议——MAC(媒体访问控制)协议,完全符合 IEEE 802.3 和 IEEE 802.3u
    发表于 12-28 17:30

    以太网控制器如何工作

    我正在开一个新帖子,因为我认为旧的已经完成了工作,并且指出了以太网控制器的方向。我熟悉UART通信,并在几个pic微控制器实现它。我有几个关于以太
    发表于 04-30 10:39

    8位单片机与以太网控制器

    以CPLD 为器件,采用VHDL 语言,设计了51 单片机与32 位PCI 总线以太网控制器RTL8029 之间的接口逻辑实现了8 位单片机与32 位
    发表于 04-15 08:48 36次下载

    基于以太网的指纹门禁控制器设计与实现

    设计了基于以太网和指纹识别的智能网络型门禁控制器。在ARM9 和Linux 操作系统(S3C2410)上采用FPS200 指纹传感实现指纹图像的采集,以及采用
    发表于 12-19 16:35 41次下载

    以太网控制器芯片的设计及实现

    以太网控制器芯片的设计及实现 网络控制器芯片的功能与设计实现IEEE 802.3协议是针对以太网
    发表于 07-26 22:34 1548次阅读
    <b class='flag-5'>以太网</b><b class='flag-5'>控制器</b>芯片的设计及<b class='flag-5'>实现</b>

    以太网接口的数据采集控制器

    以太网接口的数据采集控制器 LabJack UE9--以太网接口的数据采集控制器。LabJack UE9 具有 USB ( 2.0 全速)和以太网
    发表于 09-09 08:24 932次阅读

    基于FPGA以太网MAC控制器的设计与实现

    介绍了基于FPGA以太网MAC控制器的设计,主要实现了半双工模式下CSMA/CD协议、全双工模式下Pause帧的收发,以及对物理层芯片中寄存
    发表于 11-15 11:38 280次下载
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>以太网</b>MAC<b class='flag-5'>控制器</b>的设计与<b class='flag-5'>实现</b>

    以太网控制器_以太网控制器2012完整版

    控制器万能驱动是一款针对以太网控制器的驱动大全,支持国内主流的以太网设备,完全免费哦 以太网
    发表于 09-21 14:39 0次下载
    <b class='flag-5'>以太网</b><b class='flag-5'>控制器</b>_<b class='flag-5'>以太网</b><b class='flag-5'>控制器</b>2012完整版

    如何通过MAX5969B和MAX5971B用电设备控制器实现以太网供电系统

    本视频中,Darragh演示利用MAX5969B用电设备(PD)控制器和MAX5971B供电设备(PSE)控制器实现以太网供电(PoE)系
    的头像 发表于 10-11 10:55 4856次阅读

    如何使用51单片机控制RTL8019AS实现以太网通讯

    介绍以太网的帧协议和以太网控制芯片RTL8019AS的结构特性;介绍51单片机控制RTL8019AS实现以太网通讯的硬件设计方案;采用C51
    发表于 07-19 17:37 12次下载
    如何使用51单片机<b class='flag-5'>控制</b>RTL8019AS<b class='flag-5'>实现以太网</b>通讯

    AT89C52单片机实现以太网接口的控制设计

    随着互联网的迅速发展,网络用户飞速增长,在使用计算机进行网络互联的同时,各种家电设备、仪表设备及工业中数据采集与控制设备也在逐步走向网络化,基于此结合专用的以太网控制芯片RTL8019学习了
    发表于 03-03 11:17 2838次阅读
    AT89C52单片机<b class='flag-5'>实现以太网</b>接口的<b class='flag-5'>控制</b>设计

    基于RTL8019AS以太网控制器实现以太网通讯的应用方案

    互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。在电子设备日趋网络化的背景下,利用廉价的51单片机来
    的头像 发表于 06-15 16:50 3548次阅读
    基于RTL8019AS<b class='flag-5'>以太网</b><b class='flag-5'>控制器</b><b class='flag-5'>实现以太网</b>通讯的应用方案

    利用TSN以太网特性改善工业以太网控制器的时序

    电子发烧友网站提供《利用TSN以太网特性改善工业以太网控制器的时序.pdf》资料免费下载
    发表于 08-30 10:53 0次下载
    <b class='flag-5'>利用</b>TSN<b class='flag-5'>以太网</b>特性改善工业<b class='flag-5'>以太网</b><b class='flag-5'>控制器</b>的时序