将使用简单的握手协议来告知您,已使用 ctl_rx_pause_enable[8:0]
、stat_rx_pause_req[8:0]
和 ctl_rx_pause_ack[8:0]
总线接收到暂停包。对于这些总线,位 [8] 对应于全局暂停包,位 [7:0] 对应于优先暂停包。
收到暂停包时,会发生以下步骤:
- 如果
ctl_rx_pause_enable[8:0]
的对应位为 0,那么将忽略暂停量并且 40G/50G High Speed Ethernet 子系统保持处于步骤 1 不变。否则,stat_rx_pause_req[8:0]
总线的对应位将设置为 1,并且接收到的暂停量将加载到定时器中。注释: 如果当暂停处理处于步骤 2 或后续阶段时,ctl_rx_pause_enable[8:0]
的任一位设置为 0(即禁用),那么 40G/50G High Speed Ethernet 子系统会照常完成这些步骤,然后返回步骤 1。 - 如果
ctl_rx_check_ack
输入为 1,那么 40G/50G High Speed Ethernet 子系统会等待您将ctl_rx_pause_ack[8:0]
总线的相应位设置为 1。 - 当您将
ctl_rx_pause_ack[8:0]
的适当位设置为 1 之后或者如果ctl_rx_check_ack
为 0,那么 40G/50G High Speed Ethernet 子系统会开始对定时器进行倒计时。 - 当定时器超时时,40G/50G High Speed Ethernet 子系统会将
stat_rx_pause_req[8:0]
的相应位重新设置为 0。 - 如果
ctl_rx_check_ack
输入为 1,则当您将ctl_rx_pause_ack[8:0]
的相应位重新设为 0 时,此操作即告完成。
如果您不将 ctl_rx_pause_ack[8:0]
的相应位重新设为 0,那么 40G/50G High Speed Ethernet 子系统会在 32 个时钟周期后将此操作视为完成。
下图中演示了前述步骤,每个步骤均显示在波形上。
图 1. RX 暂停接口示例
如果步骤 2 到 5 期间任意时间收到新的暂停包,那么定时器将加载新获取的暂停量值,并且此进程继续运行。