您可以使用 ctl_tx_pause_req[8:0]
和 ctl_tx_pause_enable[8:0]
输入总线请求发射暂停包。位 [8] 对应于全局暂停包,位 [7:0] 对应于优先暂停包。
暂停包的内容可使用下列输入管脚来确定。
-
ctl_tx_da_gpp[47:0]
-
ctl_tx_sa_gpp[47:0]
-
ctl_tx_ethertype_gpp[15:0]
-
ctl_tx_opcode_gpp[15:0]
-
ctl_tx_pause_quanta8[15:0]
-
ctl_tx_da_ppp[47:0]
-
ctl_tx_sa_ppp[47:0]
-
ctl_tx_ethertype_ppp[15:0]
-
ctl_tx_opcode_ppp[15:0]
-
ctl_tx_pause_quanta0[15:0]
-
ctl_tx_pause_quanta1[15:0]
-
ctl_tx_pause_quanta2[15:0]
-
ctl_tx_pause_quanta3[15:0]
-
ctl_tx_pause_quanta4[15:0]
-
ctl_tx_pause_quanta5[15:0]
-
ctl_tx_pause_quanta6[15:0]
-
ctl_tx_pause_quanta7[15:0]
40G/50G High Speed Ethernet 子系统会自动计算 FCS 并将其添加到包中。对于优先暂停包,40G/50G High Speed Ethernet 子系统还会根据请求的优先级来自动生成启用矢量。
要请求暂停包,必须将 ctl_tx_pause_req[8:0]
和 ctl_tx_pause_enable[8:0]
总线的对应位设置为 1,并在暂停请求期间使其保持为 1 不变(即,如果这些输入设置为 0,则取消所有挂起的暂停包)。40G/50G High Speed Ethernet 子系统将在当前进行中的包完成后立即发射暂停包。
为重新发射暂停包,40G/50G High Speed Ethernet 子系统包含总计 9 个独立定时器;对应每个优先暂停包 1 个定时器,对应全局暂停包 1 个定时器。这些定时器将加载对应输入总线的值。发射暂停包后,对应定时器将加载 ctl_tx_pause_refresh_timer[8:0]
输入总线的对应值。当定时器超时后,一旦当前进行中的包完成后就会立即发射对应该优先级的另一个包(或全局包)。此外,您可将定时器手动强制设为 0,因此,可针对某一时钟周期将 ctl_tx_resend_pause
输入强制设置为 1 来强制重新发射。
为了减少暂停包执行优先模式操作的次数,只要任一定时器超时,该暂停包对应的定时器就会被视为“已超时”。此外,等待当前进行中的包完成的过程中,只要任何新定时器发生超时,或者收到您的任何新请求,都将合并为单一暂停帧。例如,如有 2 个定时器正在倒计时,并且您针对第 3 个优先暂停包发送请求,则前 2 个定时器将被强制超时,并且发射当前进行中的包(如有)后就会立即发送一个对应全部 3 个优先级的暂停包。
同样,如果前 2 个定时器中的任何一个定时器超时且未收到您的其它请求,则这 2 个定时器都会被强制超时,并且发射当前进行中的包(如有)后就会立即发送一个对应这 2 个优先级的暂停包。
您可通过将 ctl_tx_pause_req[8:0]
或 ctl_tx_pause_enable[8:0]
的相应位设置为 0 来停止生成暂停包。