以太网控制器设计方案.ppt
以太网控制器设计方案,以太网的简单介绍,一般来说以太网协议是指IEEE 802.3 规范制定的局域网协议LAN(LOGICAL AREA NETWORK)中的CSMA/CD协议,当前的以太网传输媒介主要有双绞线和光纤.目前以太网可以实现4种传输速率:10M bit/s:10Base-T 以太网 100M bit/s:快速以太网 1000M bit/s:千兆位以太网 10千兆位以太网,以太网基本知识,以太网,属网络低层协议,通常在OSI模型的物理层和数据链路层操作。它是总线型协议中最常见的,数据速率为10Mbps(兆比特/秒)的同轴电缆系统。该系统相对比较便宜且容易安装,直接利用每个工作站网卡上的BNC-T型连接器,就可以将电缆从一个工作站连接到另一个工作站,完成网络传输控制任务。,以太网是由Xerox(施乐)公司创建的,在1980年由DEC、Intel和Xerox三家公司联合开发为一个标准。最开始以太网只有10Mbps的吞吐量,它所使用的是CSMACD(带有冲突检测的载波侦听多路访问)的访问控制方法,通常把这种最早期的10Mbps以太网称之为标准以太网。以太网主要有两种传输介质,那就是双绞线和同轴电缆。,所有的以太网都遵循IEEE 802.3标准,下面列出是以太网和IEEE 802.3之间的区别以及不同IEEE 802.3物理层协议之间的区别,在这些标准中前面的数字表示传输速度,单位是“Mbps”,最后的一个数字表示单段网线长度(基准单位是100m),Base表示“基带”的意思,Broad代表“带宽”。,以太网的特点,以太网具有的一般特征概述如下:共享媒体:所有网络设备依次使用同一通信媒体。广播域:需要传输的帧被发送到所有节点,但只有寻址到的节点才会接收到帧。,CSMA/CD:以太网中利用载波监听多路访问/冲突检测方法(Carrier Sense Multiple Access/Collision Detection)以防止 twp 或更多节点同时发送。MAC 地址:媒体访问控制层的所有 Ethernet 网络接口卡(NIC)都采用48位网络地址。这种地址全球唯一。,以太网的逻辑关系遵循OSI(开放式系统互联的参考模型),上层协议根据不同的需求可以选择不同的协议,如IP协议,TCP协议,HTTP协议.常用的TCP协议有:,在进行以太网的实际传输过程中,每一层协议都是运行在其下层协议基础上的,如两个计算机系统使用FTP协议传输文件时,从用户来,是2个系统基于FTP协议的直接传输,实质上是文件的传输经过了层层打包和解包的层层协议.以太网控制器芯片的功能是实现TCP/IP协议簇中分层模型中链路层的相关工作.,MAC层有3个基本的功能:决定节点何时发送数据帧 将帧发送到物理层(PHY)转换成包,然后发送到介质上 从PHY接收帧,然后上传给MAC客户,以太网的工作原理:以太网是一种基于带冲突检测的载波侦听多路访问协议(CSMA/CD)的局域(LAN),介质访问控制(MAC)子层负责执行CSMA/CD协议。以太网上所有节点都共享同一个介质以太局域网上没有中心控制设备,节点自己相互协作来保证网络操作有序。以太网MAC在发送之前必须通过载波侦听来确认载波是否空闲。只有当一个节点发送数据时载波才会存。PHY(物理层)检测到载波之后向MAC发送载波指示,载波指示表示介质正在被使用,侦听节点应该推迟当前的发送。,MAC等待最后一个正在发送的帧发送之后要等待很短的一段时间之后才能开始发送,这段时间叫做帧间隔(IPG为96比特时间)。第一帧发送完之后,局域网上的所有节点都必须要等待一个IPG之后才能发送。网络上的所有节点都必须要遵守这个规则,即使某个节点有多个帧要发送而且它还是网络上唯一有帧要发送的节点,它也必须保证每个发送帧之间的间隔至少为一个IPG时间。这就是以太网介质访问规则的CSMA部分;,在发送数据的过程中,工作站边发送边检测总线,看是否发生了冲突。若无冲突则继续发送直到发送完该数据;若发生冲突,则停止发送,之后要发送32比特的JAM信号,这样网络上所有站点都知道发生了冲突.然后,等待一个随机时间,且在总线空闲时从新发送该数据,这就是以太网介质访问规则的CD部分,简单的说:边发送边检测是否有冲突发生,CSMA/CD媒体访问方法从上面的描述可归纳为下述4步:第一步:如果媒体信道空闲,则可进行发送。第二步:如果媒体信道有载波(忙),则继续对信道进行侦听。一旦发现空闲,便立即发送。第三步:如果在发送过程中检测的碰撞,则停止自己的正常发送,转而发送一短暂的干扰信号,强化碰撞信号,使LAN上所有站都能知道出现了碰撞。第四步:发送了干扰信号后,退避一随机时间,重新尝试发送。,以太网数据帧的格式,标准IEEE 802.3规定的帧由下列域组成:先导字段(PA,Preamble),帧定界符SFD,Start of Frame Delimiter),目的地址(DA,Destination Address),源地址(SA,Source Address),帧长度(L,Length),数据单元,即LLC帧(LLC PDU),填充(PAD)和帧校 验序列(FCS,Frame Check Sequence)。格式如图2.2所示。,数据帧的发送过程:,在半双工和全双工模式下,帧的发送操作过程是不一样的。1、半双工模式 在半双工模式下,以太网MAC在传送一个帧时要进行以下步骤:一,侦听信道是否有信号正在传送,若有则表示信道繁忙(即存在载波),否则表示信道空闲(即载波消失);二,当以太网上的站点要发送一个帧时,它必须等到信道空闲;,三,信道空闲时,站点在等待一小段帧间隙时间(IPG)后并始发送帧;四,如果两个站点同时开始发送,它们将侦听到冲突信号,并重新调整帧的发送。从上面我们可以发现,MAC在发送帧时必须做两件事:确定在什么时候可以开始发送 必须能检测到冲突并对其作出响应,简单的可以将数据包发送的过程归纳如下:1.传输前侦听:2.如果电缆忙则等待:3.传输并检测冲突:4.如果冲突发生,重传前等待:5.重传或夭折:,全双工模式下MAC帧的发送工作过程如下:全双工传输时,由于没有对共享介质的竞争问题,所以不需要使用载波监听多路访问/冲突检测算法(CSMA/CD)。全双工模式下帧的发送只需要遵守以下两个规则:站点每次操作一个帧,一帧数据发送完毕后才能发送下一帧。发送时在相临两帧之间插入帧间隙时间。,数据帧的接收过程:,在半双工和全双工模式下,帧的接收操作过程是一样的。在接收端,站点监视信道以获得帧到达的指示。当发现信道变成非空闲状态时,站点开始从信道接收数据比特流,并查找标识MAC帧起始的前导码 preamble)和帧起始定界符(SDF)。站点连续接收数据比特流直到收到底层信道发出的帧结束指示。,如果收到的帧长度比一个时隙的长度小,接收方的MAC将丢弃掉该帧。这是 因为根据定义,有效帧的长度总是比时隙要长(它等于往返信道传播延时)。因此这样的帧段肯定是冲突的产物。接收方根据此原理可检测并丢弃冲突段,而不需要物理信道的冲突检测指示或无效校验和(CRC)指示。如果收到的帧满足最小长度要求,则接着进行CRC校验。如果收到帧的CRC的值不正确,就丢弃掉该帧。假设一个长度有效的帧具有正确的CRC值,接收方将检查目的地址以查看其是否是如下二者之一:,(I)站点的物理地址(单播)。(2)软件指示站点应该识别的组播地址 如果这些地址表明帧确实是以该站为目的地,MAC将把帧传递到其客户方,并返回到开头,重新等待新到达的帧.,数据帧的接收过程简述如下:第一步:游览收到的包并校验包是否成为碎片。第二步:校验目标地址。第三步:校验包的完整性。第四步:处理数据包,以太网流量控制,以太网本质上是无连接的,虽然数据帧的无错传输概率很高,但也不能保证绝对正确,在数据出错,缓冲区溢出或其他异常情况下,以太网就会简单的丢弃帧。定义MAC子层的目的是为了在全双工时对数据流的控制以及以后的功能扩展。全双工的流量控制是通过发送和接收暂停真来实现的,MAC控制帧是正规合法的以太网MAC帧。不包括前导码和起始定界符,MAC控制帧的长度恰好为MAC帧的最小长度64字节。MAC控制帧的格式如图:,流程控制的实现:操作实现了一种简单的“停一启”形式的流量控制。如果某个设备(站点或交换机)想阻止帧到来,它可以发送一个带有参数的PAUSE帧,该参数指明了全双工中的另一方在开始继续发送数据前需要等待的时间。当另一个站点接收到PAUSE帧后,将在指定的时间内停止发送数据。当这个时间超时后,该站点将继续发送帧。PAUSE帧能禁止发送数据帧,但它不影响MAC控制帧的发送(例如,从另一个方向到来的PAUSE帧)。,己发送了PAU SE指令的站,可以再发送一个时间参数为0的PAUSE帧取消剩余的暂停时间,即新收到的PAUSE帧将覆盖掉当前执行的PAUSE操作。类似地,该站点也可以在前一个PAUSE时间还未结束时,发出另一个包含非O时间参数的帧延长暂停时间。,介质无关接口,MII(介质无关接口)是一个提供和外部以太网PHY芯片相连接的接口。从功能上看它可以分为两个大部分:一个是和物理层PCS子层相连接的的接口信号,另一个是MIIM管理部分,主要功能是设置和读写物理层PHY,进行寄存器的配置设定或者从中读取数据。,介质无关接口:MII的引脚被分为4类:发送数据、接收数据、网络状态及设备管理.数据穿越Mn的速率是每个时钟周期一个半位元组。发送数据:1,发送时钟(TXCLK):2,发送数据(TXD(3:0):3,发送使能(TXEN):其时序图如下所示:,接收数据:1,接收时钟(RXCLK)2,接收数据(RXD(3:0)3,接收有效(RXDV)4,接收错误(RXER)其接收过程时序图如下:,MIIM网络状态信号:1,载频信号(CRS)由物理层给出,用于表明发送或接收介质处于活跃状态,当发送或接收介质都空闲时撤消。2,冲突信号(COLLISION)由物理层给出,用于表明介质上有冲突发生,在全双工的工作模式下不存在冲突。,四、MII管理接口信号(一),MII管理接口部分 MII管理接口信号由管理数据时钟(MDC)和管理数据输入输出(MDIO)组成,具体描述在下面的MII管理接口部分。(二)、MII管理协议 管理数据是以一定的帧格式进行读写的,且与MDC相同步地以串行方式在MDIO线上传输。表2.1给出了向PHY进行写操作和从PHY进行读操作所用的帧格式。位发送顺序是从左到右的。,下面是管理帧的格式:1,PRE 2,ST 3,OP 4,PHYAD5,PEGAD 6,TA 7,DATA,8,IDLE,本次以太网控制器设计的目标是:,执行以太网IEEE 802.3协议MAC要求的功能;自动产生和检查32 bit CRC校验;帧的产生与移除:在发送时自动填充长度小于规定的帧:监测帧过长或者过短:全双工模式:兼容10M/bps和100M/bps两种速率:,当碰到过小的帧间隔或过长的延迟时限(当模式被允许)时 自动丢弃帧:在全双工模式(IEEE 802.3 x)下控制流量并且自动产生控制帧:在半双工模式(CSMA/CD)下进行冲突检测并且在冲突时自动重传:完成对发送/接收的状态解析:,IEEE 802.3介质无关接口发送和接收帧时的异步双口FIFO和中断响应:发送帧模块:处理所有有关帧发送的操作;接收帧模块:处理所有有关帧接收的操作;控制模块:在全双上的工作模式下,处理有所有关数据流控制的操作;状态模块:要写入到缓冲描述符或其他模块要调用的不同的状态:寄存器模块:所有要在MAC层操作中用到的寄存器。,根据上述的分析:可以得到设计的总体框图如下:,以太网控制器的框图,整个MAC控制器分为的7个功能相对独立的模块:接收模块(RX-MAC):按照以太网MAC协议完成数据帧的接收和解封。发送模块(TX-MAC):按照以太网MAC协议完成数据帧的发送和封装。流量控制模块(MAC-CONTROL):完成全双工时的流量控制功能,另外它还是收发缓存与收发模块之间的接口。发送数据帧时,流量控制模块从发送缓存中取出数据传送给发送模块;,发送控制帧时,流量控制模块直接生成控制帧传送给发送模块。接收数据时,接收模块将接收的数据帧传送给流量控制模块,流量控制模块将对接收到的数据 帧进行检测,如果检测出是控制帧,控制模块将进行流量控制的操作,如果检测出是数据帧,流量控制模块就将它直接传送到接收缓存。MAC寄存器模块(MAC-REGISTERS):完成MAC工作方式的配置控制命令的发布和状态信息的存储。MII管理模块(M II MANAGE):完成对物理层的寄存器进行读写操作。,CSMA/CD可知MAC发送数据的工作过程如:主机要发送数据时,通过启动总线接口将主机存储器中的数据向发送缓存中传输。发送缓存接收到的数据达到设定值时,发送模块则进行帧间隔计时。帧间隔定时时间到时,如果此时网络介质空闲,则开始发送帧的前导码。前导码发送完毕后,发送帧起始定界符。帧起始定界符发送完毕后,开始进行帧长计数,和CRC校验。同时将数据按半位元组发送MII接口,从而最终由物理层将数据发送到网络介质上。,发送模块的设计,在发送过程中,如果该帧的帧长小于最小帧长,则进行数据填充,使帧长达到最小帧长。在发送过程中,如果发生冲突,发送模块将停止数据的发送,并发送一串阻塞信号来加强冲突。当阻塞信号发送完毕后,根据二进制指数退避算法进行延时,当延迟时间一到,发送模块重新启动该帧的发送过程。发送完毕后,保存发送状态信息,并通过中断通知主机已发送了一帧数据。在全双工时,不用检测网络介质是否空闲,发送缓存中的数据达到设定值就开始发送,发送期间也不会发生冲突。,整个发送过程的流程如下:,根据MAC原理发送过程的框图如下:,发送模块由下列四个子模块组成:CRC模块:产生32bit CRC校验码写在数据域后。Random模块:当碰到冲突(Collision),后退程序 在执行的时候需要产生随机的延时,用于SCMA/CD算法。Counters模块:在数据帧发送的时候需用用到的几个计数器模块(包括帧间隔计数器,帧长计数器,冲突计数器,延迟计数器)。,txstatem模块:发送模块的状态机转换。该模块负责数据的发送同时设置了不同的信号组,向主机和以太网PHY芯片两边分别告知相关的发送操作状态(完成、重试、忽略、错误等)。,CRC模块 工作的原理:对输入的4位数据,采用冗余的CRC算法,利用上一次计算后的CRC的值计算本次CRC的值。CRC模块:对要发送的数据计算其CRC的值,由数据产生32位的CRC,在数据发送完成以后传输,将该CRC的值附加在发送数据的末尾,目的是为了便于在接收机对要发送数据进行CRC检查。,RANDOM模块:在数据发送过程中会出现2个工作站同时发送数据的状态,在这种情况下就会产生冲突,如果工作站在冲突后立即重传,则它第二次传输也将产生冲突。因此工作站在重传前必须随机地等待一段时间。为了选择何时去进行重传,工作站实现了一个算法,此算法提供了几个使工作站可以进行重传的时间,该算法被称为“退避算法”。工作站随机地选择一个他可以使用的时间,如图所示,这降低了两个或更多个工作站同时重传的机会。,根据上述原理的描述,在传送数据的过程中如果发生了冲突,那么工作站在重发之前,就会采用一种退避的算法,使得从发的次数越多,采用的等待时间就越长。以免再次发生冲突。其基本算法是:退避时间为时间间隔的整数倍为防止不成功发送无限进行,规定了最大尝试次数 碰撞后选择的退避时延为间隔时间的r倍;,r是大于0小于2k范围间的随机整数;K是min(n,10),即为尝试次数与10中最小的一个。由此可简单写成:K=Min(尝试次数,10)r=随机数(0,2k)退避时延r.间隙时间,RANDOM 数据流程如下:,该模块实现的方法和重点:对伪随机时间长度函数random的构造。步骤如下:因为时间不能超过210,所以定义 random9:0.构造序列x9:0,初始值为0。定义反馈Feedback=!(x2 x9),在发送时钟同步下,用 Verilog语言表示为:x9:0=x8:0,Feedback。,令Random 0=x0,对于 1n9,有以下规则:判决计数器RetryCnt是否大于n。若是,则Random n=xn,反之,则Random n=0。这是因为对冲突次数和后退时间正比的关系。在状态StateJam时,Random经过发送时钟同步锁存。若Random为0,根据IEEE 802.3协议定义,只延时而不进行后退操作。当计数器ByteCnt的值等于Random,并且NibCnt统计至一个时隙表明一次后退操作完成。,COUNTER模块:计数器模块的功能是实现以下的计数功能,进行IPG计数(进行帧间隔定时),DEFER计数(延迟计数,进行延迟计数),冲突计数(COL-COUNTER)对发生冲突的次数进行计数。随机数发生器(RANDOM NUMBER)产生随机数。同时还包含一个NIBBLE 计数器,帧长计数(TX-COUNTER)对帧长进行计数。在各个状态进行计数可以用下面的框图来表示:,发送状态机模块:发送模块共包括10个不同的状态,STATE DEFER(推迟发送状态),STATE IPG(帧间隔状态),STATE PREAMBLE(前导码状态),STATE DATA0(数据状态),STATE DATA1,STATE PAD(填充状态),STATE IDLE(空闲状态),STATEFCS(效验码状态),STATE JAM(阻塞状态),STATE BACKOFF(后退状态)。它的真实目的对要发送的数据进行封装,使形成的数据格式满足MAC帧的格式。,状态机模块的状态图:,在对系统reset之后,首先触发的状态是StateDefer。在此之后状态机进入帧间隔状态StateIPG,然后再进入空闲状态StateIdle发送模块通常从该状态开始。当发送者无事,状态机就停留在idle状态等待发送请求。总线接口通过设置信号TxStartFrm触发为1表示请求发送,该信号保持两个时钟周期,同时发送数据的第一个字节,状态机就进入到StatePreamble。在前导码状态,信号 MtxEn被触发为1,通知以太网 PHY芯片开始发送帧。与之同时数据线MTxD(3:0)被设为前导码的值0 x5。在前导码之后,发送数据SFD 0 xd。,然后状态机进入到状态StateDataO,信号TxUsedData被触发为1,通知主机总线提供下一个数据字节。8位数据的低四位(LSB)被发送,然后状态机进入datal状态StateDatal,同时发送数据字节的高四位(MSB)。状态机在状态data0和状态data 1之间反复切换自到数据包发送完毕。当还有最后一个字节要发送的时候,主机总线设置信号TxEndFrm触发为1。,在数据发送完之后,发送状态中会有如下可能性:如果发送数据的长度大于等于最小帧长MINFL,而且允许CRC校验,那 么状态机就进入到StateFCS,然后状态机进入状态StateDefer。如果发送数据的长度大于等于最小帧长MIINFL,不允许进行CRC校验,状态机就自接进入到状态stateDefer。,如果发送数据的长度小于MINFL,并且允许进行扩展填充码,那么状态机就要进入到填充状态StatePAD。然后状态机进入到StateFCS,接着进入到状态stateDefer 如果发送数据的长度小于MINFL,不允许进行扩展填充码但是允许CRC校验,那么状态机就进入StateFCS。接着进入到状态StateDefer.其中Fu11D信号表示全双上模式,IPGT,和IPGR2分别是在全双上、双上模式下帧间隔的最大时间:,发送模块的仿真图,MAC控制模块的实现,该控制的功能主要是指全双工的流量控制,主要实现以下功能:一,检测控制帧 二,发送控制帧 三,提供接收缓存(RX-FIFO)与接收模块(RX-MAC)之间的接口以及发送缓存(TX-FIFO)与发送模块(TX-MAC)之间的接口 全双工时的流量控制是通过站点发送和接收控制帧实现的,发送控制帧和接收检测控制帧相互独立,所以设计了两个独立的模块进行控制,并设计了所需的计数器。控制流量 控制模块的结构框图,MAC控制模块实现全双工实时流量控制功能,控制操作符PAUSE使正在发送的站点停止发送。当接收缓冲区(Rx FIFO)快要溢出时,上层不能再接收进来的数据帧,此时就发出流量控制请求,MAC接收到请求后就会发送一个控制帧给发送站点。这个控制帧将在一个规定的时间内阻止数据帧的发送。,当MAC控制模块接收到一个控制帧以后,就会将其中的pausetime参数加载到PAUSE定时器。发送器将会在规定的暂停时间里停止发送数据帧(但是可以发送控制帧)。每隔一个时隙PAUSE定时器减1,当减到0时发送器就可以重新开始发送数据00是控制帧中一个有效的暂停时间值。一个己被暂停的站点的PAUSE定时器具有一个正值,它可以简单地通过在下一个控制帧中发送一个较小的值(包括0在内)来重载定时器。这可以用于当一个站点的链路伙伴发现该站点拥有足够的资源时使该站点可以重新发送。,控制帧的检测:具有全双工流量控制功能的MAC,必须能够对接收到的帧的各个域进行检查和语法分析,并确定何时收到了一个有效控制帧,然后执行相应的动作.下列域必须进行检查:(1)目的地址。看它是否是为PAUSE功能保留的组播地址(0 x01-80-C2-00-00-O1),或是接收端口的MAC地址。虽然目前PAUSE帧发送器不会发送 单播地址,但在接收器上做检查可使PAUSE功能将来扩展到半双工 MAC上。(2)类型域。看它的值是否为MAC控制帧的保留值0 x8808。,(3)MAC控制操作代码。这个域的值必须等于PAUSE功能的0X0001。(4)帧校验序列(FCS).这个域必须包含接收到的帧的有效CRC值。由于在读取FCS域之前,前面的域已经检查及分析过了,所以当FCS发生错误时,必须能够忽略己经接收并解码的PAUSE帧。在语法分析与解码之后,接收器必须从帧中提取pause time参数,并把它传递给接口中实现 PAUSE功能的相应模块。PAUSE帧根据配置上传给上层或直接将其丢弃。,控制帧的生成:在接收缓冲将要溢出时,就发出信号声明要对连接进行流量控制。如果这个信号产生的PAUSE帧只是像其它帧一样放入传送队列,则传送该帧会因为等待前面所有帧的发送而延迟。PAUSE帧必须具有传送优先权。因为在任何给定时刻,只能有一 个正在进行的流量控制动作,所以PAUSE帧一般不需要有专门的队列。,另外,PAUSE帧的内容是相对固定的,唯一需要随时间改变的是PAUSETIME参数。在需要时进行发送。传送PAUSE帧不能打断正在进行的数据发送。因此MAC在收到发送一个PAUSE帧的信号后,应等正在发送的帧发送完之后,等待一个帧间隔,再发送PAUSE帧。在PAUSE帧发送之后,可以以正常方式继续发送队列中的帧。,提供与MAC收发模块的接口 控制模块被连接在上层与发送器和接收器模块之间。当要发送数据帧时,控制模块从发送队列(TXFIFO)中取出数据传送给发送模块,而在要发送控制帧时,则控制模块可以直接生成控制帧送给 发送模块发送。当接收数据时,接收模块会将接收到的数据送给控制模块,对于一般的数据帧,控制模块会将它们直接送给上层,而当检测出是控制帧时,控制模块会把帧中PAUSETIME参数装载到PAUSE定时器,然后根据控制模式寄存器 的配置把帧交给上层或直接将其丢弃。当PAUSE定时器为非 时,TXFIFO不能向发送模块给出发送开始信号。,PAUSE定时器和时隙定时器 当接收到PAUSE帧以后,就将帧中的PAUSE 参数装载到16位的PAUSE 定时器中。当参数装载到PAUSE定时器后,时隙定时器就开始计时,每隔1个时隙PAUSE定时器就减少。定时器在减到之前发送模块不能发送数据帧,但是可以发送控制帧。,控制模块的连接框图:,控制模块仿真图,接收模块的设计:接收模块 的任务就是接收帧数据。外部的以太网 PHY 芯片将串行数据至 MII 模块最后成为一个个 nibble发送到到接收模块里去,同时还有“数据有效”的掩码位 MRxDV。然后发送模块就把这些 nibble 就聚集成字节 byte 的形式,再和一些表示数据开始和结束的信号一起发送到主机总线接口。接收模块还需要实现的功能包括有移除接收到的帧的前导码/帧分隔符 preamble/SFD,产生用于地址识别的信号并放入到 HASH 表内,对所有接收到的包进行 CRC 校验。,由CSMA/CD协议可得MAC接收数据的工作过程如下:物理层的硬件电路从网络介质上接收串行的数据,并装配成4位的半位元组(RXD(3:0)发送到MII接口,同时置数据有效位(RX-DV)为“1”,表示网线上有帧到达。MAC控制器检测到RX-DV有效后,开始读入数据RXD(3:0),并进行帧起始定界符检测,一旦检测到有效的帧起始定界符,就认为有效帧的开始,开始对帧长进行计数,并对接收的数据帧进行CRC校验。在接收到目的地址时,对接收到的目的地址进行验证,如与本机MAC地址不匹配,则丢弃该帧,结束此次接收。,如地址匹配将继续接收,并进行CRC校验和帧长度校验。当RX-DV信号无效时则认为帧传输完毕。接收完毕后将接收的状态信息进行保存,并通过中断通知主机已接收到一帧数据。,根据上述的接受过程的原理:,MAC 接收模块由接收状态机模块,地址匹配逻辑模块和帧校验和计数器 四个子模块组成:CRC(帧效验模块)该模块对接收到的数据帧进行CRC校验,在发送者发送数据之后,发送 4 字节该数据包的 CRC,表明该数据包超过了 4 个字节。接收者接收该数据包(包括 CRC 数据)并以此(接收到的 CRC 也被属于 CRC 计算的数据)得出新的 CRC 值。如果新的 CRC 值不等于 0,那就表明接收到的数据和发送的数据有了出入错误,用信号 CrcError 置为 1 作为标志。,以太网CRC校验码的生成过程如下:a)将帧的前32比特取补。b)把帧的n比特看成是N-1次多项式M(x)的系数(目的地址域的第一个比特对应 XN 项,数据域的最后一个比特对应X0项)。c)把M(x)乘以x32,然后除以G(X),得到一个小于32次的余数R(x)。d)R(x)的系数看作一个32比特的序列。e)这个比特序列取补的结果就得到FCS的值.,(二)接收状态机模块 状态机模块的主要作用是对接收数据进行不同的状态确定,主要有下面的几个状态:空闲状态(Idle state)。丢弃状态(Drop state)。前导码状态(Preamble state)。SFD 状态(standard frame delimiter state)。数据 0 状态(Data0 state)。数据 1 状态(Data1 state)。,接收状态机模块转换:,在reset之后,状态机(SM)进入drop状态(StateDrop)。在这之后如果MRxDV被设置为 0,则立刻进入 idle 状态(StateIdle)。只要当在 PHY 的数据线(MRxD)上有了待传的有效数据,PHY 就通过设置 MRxDV 为 1 指示接收者开始接收操作。通常接收者期望在每个帧的开头要有前导码 preamble,标准前导码是 7 字节长的 0 x55,在这之后是一个字节长的起始帧分隔符 SFD 0 xd5。捆绑在一起就采样到 0 xd555555555(接受顺序从低到高),因为以太网核同样也可以允许接收没有 7-byte 的前导码而仅仅有 SFD 的帧,因此接收者的状态机就需要等待第一个 0 x5 的 nibble 来到(该 nibble 是否是属于 preamble 或者是 SFD 本身并不重要)。如果接收到的 nibble 并不是期待的 0 x5,状态机就进入 preamble 状态(StatePreamble)并且保持该状态直到 0 x5 nibble 被接收到。一旦 0 x5 被接收到,状态机就进入 SFD 状态(StateSFD),并 且继续等待 nibble 0 xd 的到来。,信号 IFGCounterEq24 被用于检测在两个连续的接收帧之间的间隔。下列两个状态变化依赖于 IFGCounterEq24。如果该信号被置位,那么状态机进入到 data0 状态,在此处数据的低位 nibble 被接收,然后状态机转到 data1 状态,在此处数据的高位 nibble 被接收,然后重新回到 data0 状态机持续在 StateData0 和 StateData1 状态之间反复转换,直到整个数据包被接收并且被检测到 MRxDV 信号被清零。那么状态机就进入到 idle 状态(StateIdle),开始一个新的接收;.,如果 IFGCounterEq24被清零,那么状态机直接进入 drop 状态(StateDrop)并且保持该状态直到有效数据的结束传来(PHY 清除了 MRxDV 信号)。然后状态机进入 idle 状态,并开始新的接收,接收计数器模块:计数器模块的主要功能是对接收的数据进行计数,然后产生BYTECOUNTER(对接收数据的字节进行计数),IPGCOUNTER(对2个数据包之间的间隔进行计数),和DLYCRCCNT(当延迟DLYCRCEN使能时进行计数)三种计数输出.,地址识别模块:该模块的主要功能是对接收到的数据帧的目的地址进行检测.接收一个数据帧的时候是否接受。MAC 层的设计思路是开始接受所有的帧而后判断接收帧的目的地址,将在该子模块里面被检查.无论待接收的帧的目的地址是否匹配,包接收都会先开始进行。一旦接收到目的地址之后,就要检查,如果发现条件并不满足的话,那么接收的整个包都将被抛弃,信号 RxAbort 被置位为 1。,接收模块的仿真图,介质无关接口模块:IEEE802.3在物理层和MAC层之间定义了一个介质无关接口Media Independent Interface(MII)。介质无关接口(MII)是MAC子层与不同物理层之间的电气接口,它为MAC子层提供了一种数字逻辑信号。介质无关接口的信号如下:发送接口信号,接收接口信号,网络状态信号,MII管理接口信号;,接收数据时,物理层从介质上接收串行的数据,然后组成四位的半位元组通过MII接口送给MAC,MAC再将两个半位元组组成一个完整的字节传输给主机。发送数据时,MAC先从主机取一个字节,然后拆分成两个半位元组通过MII接口送给PHY,PHY再串行地发送到网络介质上。,介质无关接口的原理框图如下:,MIIM接口模块把从 MAC 子层过来的发送帧数据 TXD3:0发送至 PHY,从PHY 过来的接收数据 RXD3:0收至 MAC 层。同时 MII 接口收到从 PHY 传来的信号 COL、CRS 转为信号 CarrierSense 和 CollisionDetect 给 MAC 子层提供信号用于载波监听和冲突检测,以及发送和接收时的时钟、使能(Tx_en、Rx_dv)、错误位信号(Rx_er)的转化成 PHY 和 MAC 层相应信号,用以 MAC 层数据传送/接收的控制,而且能够支持半双工和全双工模式。,介质无关管理模块:MIIM介质无关管理模块,负责操作控制。还有以下几个子模块,移位寄存器模块,输出控制模块,MII 管理是在主机和外部 PHY 设备之间的一个双向接口,配置或者读取物理层设备的状态.在读/写操作期间,数据在 MDIO 上移位输入/输出。在 MDC 的上升沿,移位寄存器左移一位,新的值就在 MDIO 上出现。双向 MDIO 信号有时分为输入信号 Mdi、输出信号 Mdo,还需要使能信号 MdoEn 配合。,该模块主要实现的操作:(一)写控制字 写控制数据。主机通过 WCTRLDATA 信号来判断是否对写操作进行初始化。该信号同样可以判断主机数据 CTLD15:0、PHY 地址 FIAD4:0以及PHY 寄存器地址 RGAD4:0是否有效。当主机设定了 WCTRLDATA 有效后,MII 管理模块就设定 BUSY 信号。MODEN 信号置 1 允许 MDO 向 PHY 输出。模块通过时钟 MDC 的上升沿驱动 MIIM 帧输出到 PHY。写操作结束之后,BUSY 被置为无效。,(二)读状态操作 和写操作类似。不同的是初始化读操作是通过触发 RSTAT 信号。然后通过输入信号 MDI 读取从 PHY 过来的请求的数据或者状态。MDOEN 信号清零使 MDI 正常工作。PHY 通过 PRSD15:0发送数据或者状态回至 MIIM 模块。读操作结束后,使 BUSY 信号为 0,数据存在 RSD 里.,输出控制模块:该模块主要承担有以下两个任务:产生 MII 模块的串行输出信号(Mdo);产生对 Mdo 的使能信号(MdoEn)。在写控制数据(Control Data)操作期间,MDIO 在 MIIM 模块作为一个输出操作,该信号用以从 MIIM 模块到 PHY 发送数据。在读状态(Read Status)操作期间,MDIO 首先作为一个输出操作(给 PHY 以及 PHY 内部寄存器设地址),然后再作为 MIIM 模块的输入操作(读取状态数据),移位寄存器模块:MII 管理模块有两个移位寄存器,该模块的功能是:在写数据控制操作期间,移位输出数据到 PHY。在读状态操作期间,移位输入数据。在所有的操作期间,移位输出 FIAD4:0和 RGAD4:0的地址。,实现串/并数据转换。最后一个读状态操作期间,状态移位寄存器保持数据锁存。信号 LinkFail 状态和状态无效信号 NVALID 在状态移位寄存器 Status Shift 分开锁存。当请求一个查看操作时,PRSD15:0的状态和 MIILF 通常都由被选择的PHY 寄存器更新。NVALID 被用来验证 PRSD15:0 和 MII 信号的有效性。这些信号直到第一次查看状态的操作结束后才从无效变为有效,时钟分频模块:该模块的功能为:产生 MII 的时钟信号(Mdc)。通常在 10Mbps 和 100Mbps 速率下,时钟的频率为 2.5MHz 和 25MHz。产生 MdcEn 信号。该信号是一个使能信号,使用 MdcEn 信号可以降低频率达到 Mdc 时钟所要求的频率输出。,主机接口模块的设计:根据WISHBONE总线接口协议。在对WISHBONE总线技术规范分析的基础上,自主设计了WISHOBONE总线接口的系统结构。根据以太网MAC控制器在WISHBONE总线操作中所处的地位和功能,将MAC控制器的WISHBONE总线接口设计成具有主从两种功能的控制器,设计了相应的状态机来实现WISHBONE总线信号的控制。其中详细描述了ISHBONE总线接口与以太网MAC控制器的接口信号以及相互间的协调工作。,以太网控制器与主机的接口框图:,Wishbone 总线的介绍Wishbone 总线最先是由 Silicore 公司提出,现在已被移交给 OpenCores 组 织维护,它通过在 IP 核之间建立一个通用接口完成互连。可以用于在软核固核以及硬核之间进行互联。WISHBONE总线是一种主从接口架构的总线技术,如果具有有效的仲裁机制,WISHBONE总线的可配置性主要体现在支持点到点、共享总线、数据流、交叉互连型的互连方式;WISHBONE总线协议既包含了一种容易使用、可靠性高、易测试、所有总线事务都可以在一个时钟周期内协同的同步传输协议,也包含了标准时钟周期的异步传输协议;,支持流行的单字读写、块读写、读-修改-写的总线协议;可调整的总线和操作数位宽;支持大端(big endian)和小端(1ittle endian)两种数据表示方法;握手协议能够控制数据传输速率;支持单周期数据传输;从接口的部分地址解码;系统包含多个MASTER接口时,用户可以自定义总线仲裁方式与算法。,Wishbone在aster和Slave之间使用的握手协议如图所示。,当准备好传输数据时,aster使STB_O信号有效,STB_O状态将一直保持到lave的结束信号ack_o、err_o 或 rty_o,