跳到主要内容

06. 错误处理与重传机制

三层错误保护体系

SUE2.0技术栈提供三层错误保护:

层级机制位置说明
L1FEC (RSFEC)CESOC CEFEC前向纠错, 自动纠正小错误, 错误率 < 10^-12
L2E2E RetryRC Link端到端Go-Back-N重传, 替代旧版MAC L2 Retry
L3PAXI Error HandlingPAXI Core端到端错误处理, DA级隔离与恢复

[推导] 与旧版的变化:

  • L2层从MAC Retry升级为RC Link E2E Retry, 提供端到端可靠性
  • Go-Back-N重传由RC Link的TYPE1数据类型实现, 支持最多1024个QP

L1: FEC (RSFEC)

[DOC] CESOC Features:

"Ethernet error rate lower than 10e-12"

  • 使用Reed-Solomon FEC (RSFEC)算法
  • 自动纠正链路中的少量误码
  • 纠错后错误率低于10^-12
  • 无法纠正的错误传递给L2层处理

[DOC] PAXI SUE2.0 Features:

"Support error free transmission with RC LINK E2E retry enabled"

Go-Back-N重传

[DOC] 来自RCLINK Spec 4.1:

RC Link的TYPE1数据类型支持端到端保护和Go-Back-N重传:

  • 最多1024个队列 (QP)
  • 512 outstanding
  • 最大报文4KB
  • 检测到PSN(数据包序列号)错误时触发重传

重传计数器

[DOC] 每个 QP 的 RETRY_CNT_MEM 包含两个独立的 4-bit 计数器:

计数器位域触发条件说明
retry_counter[3:0]PSN 错误触发的 Go-Back-N 重传常规链路错误重传
rnr_retry_counter[7:4]RNR (Receiver Not Ready) 条件触发接收方 Buffer 不足时的重传

[推导] 两种重传的区分: retry 由链路错误 (CRC/FCS 失败导致 PSN 缺口) 触发; RNR retry 由接收方资源不足 (Buffer 满, 通过 ACK 中的 Aeth_syndrom 字段 RNR Time 指示) 触发。建模时需要区分这两种场景, 因为 RNR 重传通常意味着流控机制未及时生效, 对延迟影响更大。

TYPE1 ACK机制

[DOC] 来自RCLINK Spec RH结构:

RH字段Bits说明
Dest_QP[12:0]QP序列号
PSN[24:13]数据包序列号
Pkt_len[31:25]RH+payload长度
P_key[39:32]Partition Key, 隔离机制
Timestamp[55:40]时间戳, RTT测量
Opcode[63:62]00:SEND Req, 01:ACK/NAK, 10:CNP

ACK MERGE

[DOC] 来自RCLINK Spec 5.8:

ACK MERGE模块合并多个ACK, 减少ACK报文数量, 提高效率。使用深度为2^QP_AW的寄存器Buffer, 以4组为单位轮询检查并发出合并的ACK。

ACK 完整发送路径

[DOC] 来自 RCLINK_AFH_SPEC_v2.4 §4.2 逻辑框图、§5.8 ACK MERGE、§5.10 TYPE1 报文发送仲裁。

ACK 从接收到发出经历完整的芯片 TX 路径,不是独立旁路

关键事实(来自 spec §4.2 框图):

  • ACK 经过 ackcnp_buff → ack_proc → rc_pkt_ctrl,与数据包共用同一个 rc_pkt_ctrl 的 Arbiter
  • ACK 对应 slot buffer 中的粉色高亮槽位(get_ack/nak 输入),与数据包槽位(get_pkt)有区分
  • 两者通过同一个 Arbiter 输出 tx_req,最终经 rc_pkt_gen → ip_pkt_gen → MAC TX 发出

rc_pkt_ctrl 仲裁器内部结构

[DOC] 来自 RCLINK_AFH_SPEC_v2.4 §4.2 rc_pkt_ctrl 框图。

[推导] ACK 槽位(粉色)在 slot buffer 顶部,推测 Arbiter 对 ACK 赋予更高优先级。§5.10 明确说数据包按"进入队列先后顺序仲裁",ACK 的优先级规则 spec 未明文说明,但从工程常识判断(ACK 延迟直接影响 Go-Back-N 重传速率),ACK 有严格优先级于数据包。

三类 TX 流量的路径对比

[推导] 基于 §4.2 框图和 §5.5 CBFC:

流量类型是否经过 rc_pkt_ctrl是否占用数据 VC与数据竞争
数据包(TYPE1_REQ)是(REQ VC)自身竞争 WRR
ACK/NAK(TYPE1_ACK)是(RSP VC)共用 Arbiter,推测有优先级
Credit Return(PFC)否(MAC 信号)完全不竞争

G5 建模近似

[推导] 基于上述 spec 分析:

  • Credit Return:已正确建模为 propagation_delay,完全跳过 busy_until_ns。依据:MAC 层 PFC 信号,不经过 rc_pkt_ctrl。

  • ACK:硬件中经过 rc_pkt_ctrl Arbiter,有优先级,实际等待时间不超过当前正在传输的 1 个数据帧(~18 ns)。G5 使用独立的 busy_until_ns_rsp 建模,ACK 只与其他 ACK 竞争,不等待数据包队列。这是可接受的近似——误差约 18 ns,远小于链路传播延迟(~150 ns)。

L3: PAXI Error Handling

[DOC] 来自SUE2.0 2.6 Error Handle:

"When a DA's retry fails, rc-link reports an error indication. Upon receiving it, paxi initiates its internal error-handling procedure."

单播错误处理

[DOC] 恢复步骤:

  1. 检测: DA重传失败时, PAXI上报retry fail中断

  2. 诊断: 用户读取 Int Indicator Register (0x008) 和 Retry Error Register (0x300~0x37C) 确定错误DA和详情

  3. 隔离: [DOC]: "After the user-side TX logic receives the error indication, it must complete the burst transmission for any AWDATA/WDATA pair and RDATA burst that has already been sent to PAXI TX, and subsequently stop sending data to the faulty DA."

    [DOC]: "On the RX direction, PAXI will complete any AWDATA/WDATA and RDATA currently in-transit, after which no new requests or responses related to error DA will be sent."

  4. 错误处理: [DOC]: "Defaultly, PAXI initiates its internal error-handling and discards the packets of the error DA automatically. However, user can set Ctrl Register to manually control paxi's entry into error handling flow."

  5. 确认完成: 用户读取PAXI STATUS Register (0x01C) 的TX_ERR_STAT (bit13) 和 RX_ERR_STAT (bit14) 确认错误位已清除

  6. 恢复: 清除Int Indicator Register和Retry Error Register, 恢复AXI数据传输

自动 vs 手动错误处理

[DOC] Ctrl Register (0x00C):

Bit字段说明
14Error Handle Trigger写1触发错误处理流程 (RW1C)
13Self-retry err clr en1: PAXI自动进入错误处理; 0: 软件介入控制

[推导] 两种模式:

  • 自动模式 (bit13=1): PAXI检测到retry fail后自动进入错误处理, 丢弃错误DA的数据包
  • 手动模式 (bit13=0): 软件决定是否触发错误处理, 通过写bit14=1手动触发

多播错误处理

[DOC] 来自SUE2.0 2.6:

"When PAXI receives a multicast error indication reported by the MAC or when no response is received within the timeout period after PAXI has sent a multicast request, multicast error handling is triggered."

两种多播错误

错误类型PAXI STATUS位Int Indicator位
MULTI-CAST RETRY ERRbit17bit11
MULTI-CAST TIMEOUTbit18bit12

恢复步骤

[DOC]:

  1. 多播重传失败时, PAXI上报retry fail中断
  2. 用户读取Int Indicator Register和PAXI STATUS Register的MULTI-CAST RETRY ERR/TIMEOUT位
  3. TX侧必须完成当前burst的AW+W数据传输
  4. 默认TX和RX内部自动清除多播数据, 也可通过Ctrl Register手动控制
  5. PAXI错误处理完成后上报中断
  6. 用户确认PAXI STATUS的multi-cast错误状态位清除
  7. 清除相关寄存器, 恢复传输

多播超时配置

[DOC] RX Multicast Timeout Register (0x080):

默认值: 0x03d0_9000

中断系统

中断状态寄存器

[DOC] Int Indicator Register (0x008):

Bit字段说明类型
12MULTI_CAST TIMEOUT多播B响应超时RW1C
11MULTI_CAST RETRY ERR CLR多播重传错误清除完成RW1C
10RETRY ERR CLR单播重传错误清除完成RW1C
9PAT DATA ERRPattern Generator读/写数据不匹配RW1C
8PAT RD DONEPattern Generator读完成RW1C
7PAT WR DONEPattern Generator写完成RW1C
6RSVD保留RO
5APB_Linkup_MSG收到远端PCS link-up消息RW1C
4LM timeout延迟测量超时RW1C
3LM done延迟测量完成RW1C
2APB_ERR_MSGAPB消息错误RW1C
1E2E_RETRY_ERRRC Link E2E Retry错误RW1C
0OFLOW_INDFIFO溢出RW1C

中断屏蔽寄存器

[DOC] Interrupt Mask Register (0x004):

Bit字段说明
12MULTI_CAST Timeout MASK多播超时屏蔽
11MULTI_CAST RETRY ERR CLR MASK多播重传错误清除屏蔽
10RETRY ERR CLR MASK重传错误清除屏蔽
9PAT DATA ERR MASKPattern错误屏蔽
8PAT RD DONE MASKPattern读完成屏蔽
7PAT WR DONE MASKPattern写完成屏蔽
5APB_Linkup_MSG MASKPCS Linkup屏蔽
4LM timeout MASK延迟测量超时屏蔽
3LM done MASK延迟测量完成屏蔽
2APB_ERR_MSG MASKAPB消息错误屏蔽
1E2E_RETRY_ERR MASKE2E Retry错误屏蔽
0OFLOW_IND MASKFIFO溢出屏蔽

PAXI Status Register错误位

[DOC] PAXI Status Register (0x01C):

Bit字段说明类型
18MULTI-CAST TIMEOUT多播超时RW1C
17MULTI-CAST RETRY ERR多播重传失败RW1C
16RX_MULTI_CAST_ERR_STATRX多播错误处理状态 (1:未完成, 0:完成)RO
15TX_MULTI_CAST_ERR_STATTX多播错误处理状态 (1:未完成, 0:完成)RO
14RX_ERR_STATRX错误处理状态 (1:未完成, 0:完成)RO
13TX_ERR_STATTX错误处理状态 (1:未完成, 0:完成)RO

远端链路状态检测

[DOC] 来自SUE2.0 3.2.35:

Remote PCS Linkup Register 0~31

  • 地址: 0x280~0x2FC
  • 当远端芯片PCS重新Link-up时置位

Remote Error Status Register 0~31

  • 地址: 0x200~0x27C
  • 记录远端错误状态

Retry Error Register 0~31

  • 地址: 0x300~0x37C
  • 记录各DA的重传错误状态

RC Link异常处理

[DOC] 来自RCLINK Spec 第10章:

TX方向异常

异常类型说明处理方式
TX overcredit上游下发的 pkt ost 数量超过 TYPE1_OST_N (仅调试场景, 正常工作时上游通过 TX_S_CRD_O 令牌机制保证不会超限)丢弃超限包, 上报中断 (RC_INTR_O[1])
TX oversize报文长度超过TYPE1_PKT_LEN丢弃超长包, 上报中断
TX retry times overQP重传次数超过阈值上报中断

下游数据通路异常

[DOC]:

场景处理
短暂断路RC Link内部缓冲吸收, 恢复后继续传输
复位清除所有状态, 需要重新初始化
长时间断链重传超时, 上报中断, 等待软件处理

TYPE3异常

[DOC] TYPE3有独立的异常中断, 通过0x1170寄存器查询:

  • rx fifo overflow
  • tx fifo underflow
  • md axi wr/rd resp abnormal
  • data axi resp abnormal
  • tx get two sop / tx last eop
  • tx/rx buffer oversize
  • tx/rx get md size zero