以太网Flow Control相关

以太网folw control,分全双工和半双工应用情形,在full duplex mode下通过PAUSE packet进行流控。在半双工下通过背压(back pressure)进行流控。(Carrier sense 或者jam)

一、Full duplex with pause pkt.

(一) pause pkt 帧格式


time-unit 是暂停传送时间参数,单位是当前速率下传输512bit的时间,即slot time;
如果是pause_on pkt,则time_unit不为0,eg,如果是0xffff,则暂停时间是0xffff * slot_time(实际上这个时间很长,而一般值设为0xfff0~0xffff)比较合适;
如果是pause_off pkt,则time_unit为0,当收到pause_off pkt时,则说明流控已经关掉,可以正常tx pkt了, 即具有唤醒功能。

(二)pause pkt工作原理

情形1、自身来不及处理pkt,需要向对方发送pause pkt暂停对方的TX.


MAC0 为self-station, MAC1为link-partner station
flow 如下
step 1~2:  MAC1 向MAC0 TX pkt,MAC0 RX 到pkt后送给后续module A处理。
step 3: MAC0 来不及处理源源不断的MAC1送来的pkt,此时拉高FC_start(一般有RX ctrl相关module起)信号,表明此时需要进行flow control;
step 4: MAC0 TX端看到FC_start信号后,开始向对端MAC1 TX pause pkt,(TX_pause_on).间隔时间可以由register配置,只要FC_start为高期间,MAC0 TX端每隔一段时间发送一个pause pkt,其他时间发送normal pkt。Pause pkt的发送不会影响到MAC1正常TX的data pkt。
step 5: MAC1 RX到pause pkt后,会解析pause pkt里面相关的filed,让TX端暂停发送pkt,暂停时间是slot time * pause filed;
step 6~7~8: MAC1 暂停TX pkt,等到MAC0处理完之前收到的pkt,能够再有能力RX新的pkt后,会将FC_start拉低。
step9: MAC0 发送一个pause off pkt,告诉MAC1可以不用等,可以开始发pkt了。

情形2、对方来不及收pkt,想要停掉自己的tx,即自身收到pause pkt.

step1: 对方发送 pause_on pkt, 想要暂停MAC0的TX;
step2~3: MAC0 RX到pause_on pkt后,根据DA=0180c2000001,len/type, op_code filed判断当前是一笔pause_on pkt,则会assert pause_on信号,同时解析time_unit字段供TX 端进行暂停时间计算。
step4: MAC0 根据time_unit的值,以back_off的方式实现暂停,即有一个bkoff_cnt,一个初始的bkoff_init值,在半双工时bkoff_init值是通过二进制回退算法得到,在全双工pause时,bkoff_init是(~time_unit)。每过一个slot_time,bkoff_cnt自加1,当bkof_cnt=‘hffff时,表示时间结束,即bkoff_done,此时就可以TX pkt;(假设time_unit值为0xFFFF,则需要等待个slot_time,时间会很长,可以将bkoff_ini的初始值设高一点)
step5: MAC1 RX端能够处理pkt后,有两种做法,1)通过TX端发送pause_off pkt, 让MAC0能够立即TX pkt。 2)不tx pause_off pkt,此时MAC0需要等暂停时间结束后才能TX pkt;
step5~9: MAC1 TX pause off pkt 立即唤醒MAC0 tx。
ps:实质上MAC0 在等待pause time期间,MAC1可能会一直发送pause pkt, MAC0 收到新的pause pkt后,会更新bkoff_cnt,当收到pause_off pkt时,bkoff_cnt立马更新为~16'h0=16'hffff,即bkoff_done了

二、Half Duplex mode下通过back pressure 方式进行流控

有两种方式,1,通过发送jam来撞掉包. 2,通过发送carrier_sense 来占用medium。

(一)、jam

    jam signal,是一种拥塞信号,一般是"Preamble+SFD+JAM_DATA",JAM_DATA长度为4byte,具体value不用care,一般为‘ha,主要目的是撞掉pkt,
在以太网半双工时,因为medium只能要么被TX占用,要么被RX占用。假设正在RX pkt,MAC TX端此时需要发送pkt,TX端会检测medium是否idle,如果发现midium busy,就会起coll_detect信号(coll_dect会在能发下一笔pkt时de-assert),表明产生了collision,此时TX会发送jam pkt ,撞掉medium的pkt,这样TX和RX都没传送成功,各自根据二进制回退算法进行backoff。
   当MAC0来不及处理pkt,需要暂停对方MAC1 TX时,MAC0就会发送jam来撞掉MAC1 TX的pkt,然后MAC1进行backoff,起到flow control效果。

(二)、carrier_sense

   可以理解为加长版的jam,比最大pkt 1536长度还长,(长度可以自定义,取决于designer想让carrier_sense占据多长时间的medium),但carrier_sens不是为了简单撞掉pkt,而是为了长时间占用medium。
   比如当MAC0来不及处理pkt,需要暂停MAC1发送pkt,那MAC0可以在midium idle时发送carriier_sense来长时间占用mediuem,这样对方在TX pkt时,就会始终检测到collision,然后backoff,这样也间接暂停了对方发送pkt,起到flow control效果。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值