以太网MAC层协议

以太⽹MAC层协议
  MAC发送模块可将上层协议提供的数据封装之后通过MII接⼝发送给PHY。发送模块可接收主机接⼝模块的数据帧开始和数据帧结束标志,并通过 主机接⼝从外部存储器中读取要发送的数据,然后对数据进⾏封装,然后通过PHY提供的载波侦听和冲突检测信号,在信道空闲时通过MII接⼝将数据以4位的 宽度发送给PHY,最后由PHY将数据发送到⽹络上。
  发送模块由CRC⽣成模块(crc_gen)、随机数⽣成模块(random_gen)、发送计数模块(tx_cnt) 和发送状态机(tx_statem_模块等四个⼦模块组成。
CRC⽣成模块(crc_gen)
  该模块⽤于计算发送数据的CRC值,并将CRC值添加到数据帧的帧校验序列字段(FCS)内。为了提⾼效率,并考虑到MAC与PHY的数据通道 为4位,设计时可采⽤4位并⾏CRC计算⽅法,算法中可使⽤⼀个次态函数,并通过循环迭代来模拟移位操作。这样,发送模块就可以在边发送数据到PHY的同 时,⼀边计算CRC,这样当数据发送完时,CRC值也计算完成了。
随机数⽣成模块(random_gen)
  如在发送过程中检测到冲突,发送模块就先发送拥塞码(jam),随后停⽌发送。在下次重新发送之前,发送模块会先执⾏⼀个后退(backoff)操作,即发送模块等待⼀个半随机(⽣成的随机数有范围限制)的时间之后再开始发送。该随机数就是由随机数⽣成模块产⽣的,它采⽤经典的 截断⼆元指数后退算法,后退的时间是⼀个与发⽣冲突次数有关的随机数,随着冲突的次数增多,⽤于⽣成该随机数的范同也将逐渐增⼤,以减少冲突的概率。
发送计数模块(tx_cnt)
  发送计数模块由半字节计数器(nibcnt)、字节计数器和重试次数计数器(retrycnt)三个计数器组成。其中重试次数计数器 (retrycnt)可对发送某个帧时产⽣冲突次数进⾏计数。当计数器的值达到最⼤重试次数时,它将放弃重试,并丢弃发送缓冲器内的数据。同时,重试计数器的值还被随机数⽣成模块⽤于计算下次重试之前需要后退(backoff)的时隙的个数。
  半字节计数器和字节计数器分别⽤于对发送过程中的半字节(bibble)和字节进⾏计数。
  信道忙时,发送模块会⼀直等待,半字节计算器⼀直计数。当计数到额定等待时间时(最⼤帧长度的两倍,即3036字节时间),系统会根据设置放弃 发送或是⼀直等待(可选功能)。⼀旦信道空闲再进⼊帧
间间隙周期(≥96个⽐特时间),南半字节计数器从零开始计数。帧间间隙分为两个部分,在前2/3个 周期中,如果检测到信道忙信号,则半字节计数器复位,发送模块重新开始等待;在后l/3周期中,即使检测到信道忙信号,半字节计数器也不会复位,⽽是继续 计数,以保证每个站点公平的竞争信道。⽽当半字节计数器的值达到帧问间隙周期时,此时如果有数据等待发送,发送模块就开始发送数据。此外,半字节计算器还 ⽤于前序码的⽣成和短帧的判断,在数据帧的长度⼩于最⼩帧时,发送模块必须根据系统设置进⾏填充或不填充。
  字节计算器还可⽤于滞后冲突(late collision)和超长帧的判断。当滞后冲突发⽣时,正在发送的数据将被丢弃。超长帧的判断则是从对帧内容(包括FCS)进⾏字节计数,如果字节计数 器的值⼤于最⼤有效帧的长度(1518个字节),发送模块就根据系统设置(是否⽀持超长帧)丢弃或发送。
发送状态机模块(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状态,并放弃重试。t载体
  在全双⼯模式中发送帧时,不会进⾏延迟(defer),发送的过程中也不会产⽣冲突。此时,发送模块将忽略PHY的载波侦听和冲突检测信号。当 然,帧与帧之间仍然需遵守帧间间隙的规则。因此,全双⼯模式下的发送状态机没有Jam_State、。BackOff_State、
Defer_State三个状态。
MAC接收模块
五方通话系统  MAC接收模块负责数据帧的接收。当外部PHY将通信信道的串⾏数据转换为半字节长的并⾏数据并发送给接收模块后,接收模块会将这些半字节数据 转换为字节数据,然后经过地址识别、CRC校验、长度判断等操作后,再通过主机接⼝写⼊外部存储器,并在主机接⼝模块的接收队列中记录帧的相关信息。此 外,接收模块还负责前序码和CRC的移除。
  接收模块由CRC校验模块、地址识别模块、接收计数器模块和接收状态机模块等四部分组成。
  接收模块中的CRC校验模块可通过检查输⼊帧的CRC值来验证帧的正确性。其算法与CRC⽣成模块相同。
  地址识别模块⽤于决定是否接收收到的帧,接收模块⾸先接收输⼊帧⽽不管⽬的地址,随后由地址识别模块检查帧中的⽬的地址。若MAC被设置为混杂模式(Promiscuous mode)且⽬的地址为⼴播地址,同时允许接收⼴播帧,帧则被接收。否则,帧被丢弃。
9547900  接收计数器模块由字节计数器(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等六个状态组成。
  系统复位后,状态机处于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。
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处于输⼊状态时,移位寄存器将数据线上的串⾏数据转换为并⾏数据。
主机接⼝模块
  主机接⼝是运⾏以太⽹的上层协议(如TCP/IP协议)与MAC控制器的接⼝。通过该接⼝,上层协议可以设置MAC的⼯作模式并读取MAC的状态信息。该接⼝还可⽤于上层协议与MAC之间的数据交换。
  主机接⼝模块内有⼀组寄存器,可⽤于存储上层协议对MAC设置的参数以及MAC的状态信息。上层协议对MAC设置的参数包括接收超短帧的使能、 添加填充码使能、持发送超长帧的使能、添加CRC校验值使能、全双⼯模式或半双⼯模式、持超长延迟(Defer)使能、混杂模式 (Promiscuous)、接收⼴播帧使能、发送和接收使能、中断源和中断使能、帧间间隙的长度、最⼤帧和最⼩帧的长度、重试限制和冲突时间窗、MII 地址和MII控制命令、接收和发送队列的长度以及本机MAC地址等。
  上层协议通过MAC发送和接收数据的操作主要由主机接⼝模块内的两个队列来进⾏管理,这两个队列⽤于对等待发送的多个帧和接收到的多个帧进⾏排队。
  发送队列主要记录等待发送的帧的相关信息、发送该帧时对MAC的设置以及该帧发送完之后产⽣的状态信息。帧的相关信息包括帧的长度、帧在外部存 储器中的地址、该帧是否准备好发送以及队列中是否还有其它帧等待发送;对MAC的设置则包括中断使能、填充使能、CRC使能;产⽣的状态信息包括成功发送 之前的重试次数、由于达到重试限制⽽放弃发送、发送时产⽣的滞后冲突以及成功发送之前发⽣过的延迟。
  接收队列主要对接收到的数据帧进⾏排队并记录每个接收到的帧信息。这些信息包括帧的长度、是
控制帧还是普通数据帧、帧中包含⽆效符号、接收到的 帧太长或太短、发⽣CRC错误、接收的过程中发⽣滞后冲突、帧是否接收完、队列中是否还有其它已接收到的帧以及帧存储在外部存储器中的地址等。该位同时队 列中还有针对每个帧的设置位,⽤来设置是否在接收到帧时产⽣中断。
  发送队列和接收队列的长度都可以在控制寄存器中进⾏设置。

本文发布于:2024-09-21 22:34:33,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/233560.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:发送   模块   接收
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议