TX 暂停生成 - 2.3 简体中文

Versal Adaptive SoC 600G Channelized Multirate Ethernet Subsystem (DCMAC) LogiCORE IP 产品指南 (PG369)

Document ID
PG369
Release Date
2023-11-08
Version
2.3 简体中文
您可使用 tx_pause_req_{0..5}[8:0] 和 c{0..5}_ctl_tx_pause_enable[8:0] 输入总线来请求发射暂停包。位 [8] 对应于全局暂停包,位 [7:0] 对应于优先暂停包。此总线的每个位都必须保持稳定状态达至少 16 个周期,随后才能执行下一次转换。
警告:
同时请求全局和优先暂停包会导致不可预测的行为,必须避免。

暂停包的内容可使用逐端口 C{0..5}_CONFIGURATION_TX_FLOW_CONTROL_* 寄存器来确定,其中包含以下字段:

  • 全局暂停包 (N = 0..5):
    • cN_ctl_tx_da_gpp[47:0]
    • cN_ctl_tx_sa_gpp[47:0]
    • cN_ctl_tx_ethertype_gpp[15:0]
    • cN_ctl_tx_opcode_gpp[15:0]
    • cN_ctl_tx_pause_quanta8[15:0]
  • 优先暂停包 (N = 0..5)
    • cN_ctl_tx_da_ppp[47:0]
    • cN_ctl_tx_sa_ppp[47:0]
    • cN_ctl_tx_ethertype_ppp[15:0]
    • cN_ctl_tx_opcode_ppp[15:0]
    • cN_ctl_tx_pause_quanta0[15:0]
    • cN_ctl_tx_pause_quanta1[15:0]
    • cN_ctl_tx_pause_quanta2[15:0]
    • cN_ctl_tx_pause_quanta3[15:0]
    • cN_ctl_tx_pause_quanta4[15:0]
    • cN_ctl_tx_pause_quanta5[15:0]
    • cN_ctl_tx_pause_quanta6[15:0]
    • cN_ctl_tx_pause_quanta7[15:0]
DCMAC Subsystem 会自动计算 FCS 并将其添加到包中。对于优先暂停包,DCMAC Subsystem 还会根据请求的优先级来自动生成使能矢量。要请求暂停包,您必须在配置时将 c{0..5}_ctl_tx_pause_enable[8:0] 位所需的位数设为 1,随后在所需的发射点处,将 tx_pause_req_{0..5}[8:0] 总线的对应位数设为 1,并在暂停请求持续期间保持为 1 不变(即,如果这些输入设为 0,则取消所有挂起的暂停包)。由于来自 AXI 接口的延迟,导致无法保证 AXI‑S 包中继与暂停插入之间的精确关联,因此,DCMAC Subsystem 会在当前进行中的包完成后,在 MAC 核级别发射暂停包。
重要: 此总线的每个位都必须保持稳定状态达至少 16 个周期,随后才能执行下一次转换。
要重新发射暂停包,DCMAC Subsystem 会为每个端口保留一个独立定时器。该定时器是根据对应寄存器控制的值来设置的。为给定端口发射暂停包之后,每个端口的定时器中都会加载 c{0..5}_ctl_tx_pause_refresh_timer[8:0] 字段的值,该字段位于 C{0..5}_CONFIGURATION_TX_FLOW_CONTROL_TIMER 寄存器中。当定时器超时后,一旦当前进行中的包完成后就会立即发射对应该优先级的另一个包(或全局包)。此外,您可针对某一时钟周期将 tx_resend_pause_{0..5} 输入设置为 1 来手动强制重新发射。这样多个并发暂停帧发射事件会合并为单个已发射的暂停帧。这里“并发”表示在同一周期内发生的事件(例如,同时将多个优先请求断言有效或无效),或者在等待下一个暂停帧插入机会(当前进行中的包结束)的同时发生的事件。此外,新的暂停帧事件(新的 tx_pause_req 断言)将覆盖并复位刷新倒计时定时器。例如,如果刷新定时器正在对 2 个活动的优先包进行倒计时,而您针对第 3 个优先暂停包发送请求,那么前 2 个优先包刷新会强制超时,并且发射当前进行中的包(如有)后就会立即发送一个对应全部 3 个优先级的暂停包。

您可通过将 tx_pause_req_{0..5}[8:0] 的相应位设置为 0 来停止生成暂停包。当 tx_pause_req_{0..5}[8:0] 的某个位从 1 转换为 0 时,将触发相应的暂停帧发射事件,该事件会导致针对被取消激活的优先(或全局)暂停包发送暂停量 0。