欢迎来到天天文库
浏览记录
ID:28109737
大小:34.00 KB
页数:11页
时间:2018-12-08
《用FPGA实现MAC核所要完成的功能.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、用FPGA实现MAC核所要完成的功能MAC发送模块 MAC发送模块可将上层协议提供的数据封装之后通过MII接口发送给PHY。发送模块可接收主机接口模块的数据帧开始和数据帧结束标志,并通过主机接口从外部存储器中读取要发送的数据,然后对数据进行封装,然后通过PHY提供的载波侦听和冲突检测信号,在信道空闲时通过MII接口将数据以4位的宽度发送给PHY,最后由PHY将数据发送到网络上。 发送模块由CRC生成模块(crc_gen)、随机数生成模块(random_gen)、发送计数模块(tx_cnt)和发送状态机(tx_
2、statem_模块等四个子模块组成。CRC生成模块(crc_gen) 该模块用于计算发送数据的CRC值,并将CRC值添加到数据帧的帧校验序列字段(FCS)内。为了提高效率,并考虑到MAC与PHY的数据通道为4位,设计时可采用4位并行CRC计算方法,算法中可使用一个次态函数,并通过循环迭代来模拟移位操作。这样,发送模块就可以在边发送数据到PHY的同时,一边计算CRC,这样当数据发送完时,CRC值也计算完成了。随机数生成模块(random_gen) 如在发送过程中检测到冲突,发送模块就先发送拥塞码(jam),随后
3、停止发送。在下次重新发送之前,发送模块会先执行一个后退(backoff)操作,即发送模块等待一个半随机(生成的随机数有范围限制)的时间之后再开始发送。该随机数就是由随机数生成模块产生的,它采用经典的截断二元指数后退算法,后退的时间是一个与发生冲突次数有关的随机数,随着冲突的次数增多,用于生成该随机数的范同也将逐渐增大,以减少冲突的概率。发送计数模块(tx_cnt) 发送计数模块由半字节计数器(nibcnt)、字节计数器和重试次数计数器(retrycnt)三个计数器组成。其中重试次数计数器(retrycnt)可对
4、发送某个帧时产生冲突次数进行计数。当计数器的值达到最大重试次数时,它将放弃重试,并丢弃发送缓冲器内的数据。同时,重试计数器的值还被随机数生成模块用于计算下次重试之前需要后退(backoff)的时隙的个数。 半字节计数器和字节计数器分别用于对发送过程中的半字节(bibble)和字节进行计数。 信道忙时,发送模块会一直等待,半字节计算器一直计数。当计数到额定等待时间时(最大帧长度的两倍,即3036字节时间),系统会根据设置放弃发送或是一直等待(可选功能)。一旦信道空闲再进入帧间间隙周期(≥96个比特时间),南半字
5、节计数器从零开始计数。帧间间隙分为两个部分,在前2/3个周期中,如果检测到信道忙信号,则半字节计数器复位,发送模块重新开始等待;在后l/3周期中,即使检测到信道忙信号,半字节计数器也不会复位,而是继续计数,以保证每个站点公平的竞争信道。而当半字节计数器的值达到帧问间隙周期时,此时如果有数据等待发送,发送模块就开始发送数据。此外,半字节计算器还用于前序码的生成和短帧的判断,在数据帧的长度小于最小帧时,发送模块必须根据系统设置进行填充或不填充。 字节计算器还可用于滞后冲突(latecollision)和超长帧的判断
6、。当滞后冲突发生时,正在发送的数据将被丢弃。超长帧的判断则是从对帧内容(包括FCS)进行字节计数,如果字节计数器的值大于最大有效帧的长度(1518个字节),发送模块就根据系统设置(是否支持超长帧)丢弃或发送。发送状态机模块(tx_statem) 发送状态机模块是整个发送模块的核心,主要用于控制整个发送过程。发送状态机由I-die_State、Preamble_State、Data0_State、Da-tal_State、PAD_State、FCS_State、IPG_State、Jam_State、BackOf
7、f_State、Defer_State等十个状态组成。 系统复位后,发送模块即进入Defer_State状态,并一直检测载波侦听(CarrierSense)信号。当载波侦听信号变成无效(表示信道空闲)时,状态机进人IPG_State状态。尔后,在等待一个帧间间隙之后,状态机则进入Idle_State状态。如果在帧间间隙的前2/3个周期检测到信道忙信号,状态机将重新回到Defer_State状态。 状态机进入Idle_State状态之后,发送模块将检测载波侦听信号和主机接口的发送请求。若主机模块请求发送,状态机
8、将进入Preamble_State状态,发送模块即通知PHY发送开始,同时开始发送前序码(7个0x5),然后发送帧起始定界符(SFD,0xd)。状态机进入Data0_State后,发送模块将发送一个数据字节的低4位(LSBnibble),将当其进入Data1_State状态后,发送模块则发送数据字节的高4位(MSBnibble)。随后,状态机一直在data0和data1之
此文档下载收益归作者所有