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状况,并抛弃重试。
在全双工形式中发送帧时,不会进行推迟(defer),发送的进程中也不会发生抵触。此刻,发送模块将疏忽PHY的载波侦听和抵触检测信号。当 然,帧与帧之间依然需恪守帧间空隙的规矩。因而,全双工形式下的发送状况机没有Jam_State、。BackOff_State、 Defer_State三个状况。
MAC接纳模块
MAC接纳模块担任数据帧的接纳。当外部PHY将通讯信道的串行数据转换为半字节长的并行数据并发送给接纳模块后,接纳模块会将这些半字节数据 转换为字节数据,然后经过地址辨认、CRC校验、长度判别等操作后,再经过主机接口写入外部存储器,并在主机接口模块的接纳行列中记载帧的相关信息。此 外,接纳模块还担任前序码和CRC的移除。
接纳模块由CRC校验模块、地址辨认模块、接纳计数器模块和接纳状况机模块等四部分组成。
接纳模块中的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等六个状况组成。
体系复位后,状况机处于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。
MAC的其它模块
MAC状况模块
在接纳进程的状况信息中,接纳过错标明PHY在接纳进程中检测到了过错;接纳到无效符号则标明接纳到的帧中包括无效(PHY无法辨认)的符号; 滞后抵触标明接纳帧时检测到滞后抵触信号;超短帧标明接纳到的帧小于最短有用的长度;超长帧标明接纳到的帧大于最大有用帧的长度;半字节对齐过错标明接纳 到的半字节不是偶数(即帧的长度不是字节的整数倍);接纳溢出则标明接纳模块来不及处理接纳到的数据而导致接纳FIFO溢出。
在发送进程的状况信息中,超越重试约束标明因为抵触导致的重试次数超越了额外值;滞后抵触标明发送帧的进程中检测到的抵触信号超越了规则的抵触时刻窗;推迟,标明在发送帧之前检测到信道忙。
MAC操控模块
MAC操控模块供给有全双工操作中的流量操控功用,流量操控可经过发送和接纳PAUSE的MAC操控帧来完成。当接纳站点的接纳缓冲区(Rx FIFO)快溢出而主机接口义来不及取走数据时,体系就会宣布流量操控恳求。MAC在接纳到流量操控恳求之后,即发送PAUSE操控帧,以使数据发送站点 在指定的时刻内暂停发送数据。
数据发送站点接纳到PAUSE操控帧后,便可依据帧中的参数设置PAUSE定时器。PAUSE定时器在减到0之前,发送模块将暂停发送数据(PAUSE操控帧在外)。PAUSE定时器减到0之后,发送模块将康复发送数据。
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过错、接纳的进程中发生滞后抵触、帧是否接纳完、行列中是否还有其它已接纳到的帧以及帧存储在外部存储器中的地址等。该位一起队 列中还有针对每个帧的设置位,用来设置是否在接纳到帧时发生中止。
发送行列和接纳行列的长度都能够在操控寄存器中进行设置。