用FPGA实现MAC核所要完成的功能

网友投稿 266 2022-11-19

用FPGA实现MAC核所要完成的功能

MAC发送模块

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)

MAC接收模块

MAC的其它模块

MAC状态模块

在接收过程的状态信息中,接收错误表明PHY在接收过程中检测到了错误;接收到无效符号则表明接收到的帧中包括无效(PHY无法识别)的符号; 滞后冲突表明接收帧时检测到滞后冲突信号;超短帧表明接收到的帧小于最短有效的长度;超长帧表明接收到的帧大于最大有效帧的长度;半字节对齐错误表明接收 到的半字节不是偶数(即帧的长度不是字节的整数倍);接收溢出则表明接收模块来不及处理接收到的数据而导致接收FIFO溢出。   在发送过程的状态信息中,超过重试限制表示由于冲突导致的重试次数超过了额定值;滞后冲突表示发送帧的过程中检测到的冲突信号超过了规定的冲突时间窗;延迟,表明在发送帧之前检测到信道忙。

MAC控制模块

MII管理模块

主机接口模块

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis映射和实际类型不一致的问题
下一篇:#Word文档导入#大数据presto+Alluxio​
相关文章

 发表评论

暂时没有评论,来抢沙发吧~