ECRC

1.配置错误策略

  • 解屏蔽: 清除 UNCORR_ERR_MASK (AER_BASE + 0x08) 的 Bit 19(写 0),允许 ECRC 错误上报给系统。
  • 设置严重性 (Severity): 设置 UNCORR_ERR_SEV (AER_BASE + 0x0C) 的 Bit 19
    • 写 0 (Non-Fatal): 仅报告错误,链路可能不需要复位(默认推荐)。
    • 写 1 (Fatal): 触发系统级致命错误处理(可能导致链路复位)。

2.启用 ECRC 生成与检查 (Enable Logic)

执行“读-改-写”操作 ADV_ERR_CAP_CTRL (AER_BASE + 0x18):
  • 置位 Bit 6 (ECRC_GEN_EN): 启用发送端 ECRC 生成。
  • 置位 Bit 8 (ECRC_CHECK_EN): 启用接收端 ECRC 检查。

 

 

3. 注错实施方案 (Injection Scheme)

 

步骤 2:配置错误注入寄存器

  1. 解锁注入功能(如果被锁定):检查 CX_ERR_INJ_WIRE_WR_DISABLE 参数是否允许写操作。

  2. 设置注入参数 (EINJ0_CRC_REG)

    • 写入 RAS_DES_BASE + 0x34

      • EINJ0_CRC_TYPE = 0xB (RX Path ECRC Error) —— 核心步骤

      • EINJ0_COUNT = 0x1 (仅注入 1 次,避免错误风暴)

      • ECRC_FC_SEL = 0x0 (假设稍后通过发送 Memory Write 来触发)

      • ECRC_VC_SEL = 0x0 (Default VC)

    • 寄存器值示例0x00000B01 (假设 VC=0, FC=Posted, Type=RX ECRC, Count=1)

步骤 3:启用注入 (EINJ_ENABLE_REG)

  • 写入 RAS_DES_BASE + 0x30

    • 置位 Bit 0 (ERROR_INJECTION0_ENABLE = 1)。

步骤 4:触发数据流 (Traffic Generation)

  • 控制器需要实际“接收”到一个 TLP 才能触发注入逻辑。

  • 方法 A(通过对端):让 Link Partner 发送一个简单的 Memory Write TLP 给本端。

  • 方法 B(内部回环):如果处于 Loopback 模式,本端发送一个包给自己。

  • 注:当接收逻辑处理该 TLP 时,硬件会自动反转其 ECRC 位,导致校验失败。

posted @ 2020-06-27 20:41  qiuqiu95  阅读(517)  评论(0)    收藏  举报