目录
FEC是什么
FEC测试需要关注哪些内容
基础的 FEC 性能监测
需要测试和验证的 FEC 特性
FEC Error Injection / FEC误码压力测试
Codeword & Symbol Error Configuration
Errored Symbol Per CW Configuration
Bit Error Mask Configuration
Loop Mode
FEC 引擎
TX Error Injection Statistics
对应API的接口指令
PL1_PCS_VARIANTPL1_CWE_BIT_ERR_MASKPL1_CWE_CONTROLPL1_CWE_CYCLEPL1_CWE_ERR_SYM_INDICESPL1_CWE_FEC_ENGINEPL1_CWE_FEC_STATSPL1_CWE_FEC_STATS_CLEARPP_ALARMS_ERRORSPP_FECMODEPP_PHYAUTONEGPP_RXCLEARPP_RXFECSTATSPP_RXLANEERRORSPP_RXLANELOCKPP_RXLANESTATUSPP_RXTOTALSTATSPP_TXERRORRATEPP_TXINJECTONEPP_TXLANECONFIGPP_TXLANEINJECT
FEC是什么
Codeword, Symbol and Bit Errors
-
FEC 是一种用于检测和纠正比特流中一定数量错误的技术,方法是在传输前将冗余比特和纠错码附加到信息块中。
-
FEC 使用 n 个符号编码字(CW),由 k 个符号长的数据块和`n-k`符号长的奇偶校验块(编码和冗余比特)组成。我们用有序对 (n,k) 表示特定的FEC。
RS-FEC 符号
对于 RS-FEC KP (544,514) 和 RS-FEC-Int (544,514),10 个比特构成一个 FEC 符号,544 个符号构成一个 FEC 码元,其中 514 个是数据符号,30 个是奇偶校验符号,如下图所示。
FEC 码字、符号和比特
FEC测试需要关注哪些内容
基础的 FEC 性能监测
如今,大多数测试装置都在提供每个编解码字的错误符号表视图。下面的示例显示了一条 “坏 ”链路的输出(在这种情况下,链路被设计成会导致错误)。请注意,虽然编解码中的绝大多数符号都没有错误(0 个错误符号),但错误符号数迅速下降(每增加一个错误符号,错误符号数下降两个数量级以上),降至每个编解码 5 个错误符号。从 6 到 15 个错误符号计数的长尾以及每个码字仍有不可修正(>=16)的错误符号这一事实可以看出,这是一个坏链路。该链路可通过XenaManager“高级误码分析 ”套件工具进行进一步分析。
错误符号计数显示了系统在给定链路上的性能,但并不能验证或强调 FEC 的实现,而且对错误 “根源 ”的了解也很少。符号计数视图只显示使用测试集 FEC 块的链路测试集视图,而不是任何 DUT FEC 接收器的实现。
需要测试和验证的 FEC 特性
在研发和验证阶段,需要测试和验证柔性蚀刻电路的两个核心方面--柔性蚀刻电路的逻辑 “正确性 ”和实际实施的稳定性。虽然两者相互关联、相互交织,但都需要不同的测试方法来确保稳健性和可靠性。XENA通过其 FEC 测试应用集中的两个应用将这一概念体现出来:
FEC 压力测试
该测试重点关注 FEC 的逻辑验证,确保 FEC 在给定码字的错误计数和位置范围内具有现实的覆盖范围。鉴于潜在的组合不计其数,因此不可能涵盖所有组合,但这些应用足够 “智能”,能够提供可靠的覆盖范围。
XENA FEC 压力应用程序允许用户通过手动定位错误来精确探测 FEC,但它也支持全面的自动模式,该模式可扫描一个编解码中 1 到 15 个出错符号的巨大潜在错误位置范围,以提供可靠的覆盖范围,从而验证 FEC 的逻辑性能。虽然自动模式不可能覆盖所有出错符号位置和数量的组合,但该应用经过精心定制,可在合理的运行时间内提供最佳覆盖范围。用户可以调整测试的 “深度”,以匹配潜在的测试执行时间。如果自动测试显示出问题,则可以采用手动测试来调查逻辑的哪个区域以及在什么条件下没有按预期执行。
精准的 FEC 压力
即使 FEC 逻辑正确无误,被测硬件仍有可能因实施过程中的故障而失效,尤其是在电源完整性等方面。FEC 解码和检查块通常在宽并行总线结构中实施,其中包含许多基于与或非的逻辑门。错误检测和纠正会导致逻辑功率需求快速变化,这些快速的电流尖峰可能会导致电源完整性问题,尤其是在 FPGA 中。它们还可能暴露出负载点转换器输出阻抗动态、PCB 布局和去耦等问题。该应用可与示波器等工具结合使用,以跟踪集成电路封装周围的电源动态。
用户可以调节编解码器中的错误符号数量,但现在还可以通过错误注入速率进行额外控制,错误注入速率以频率表示,因为这是电源和电流脉冲的物理速率。以不同频率驱动功率脉冲(并在一定范围内扫描)的能力可用于对电源和与 FEC 接收机逻辑相关的元件施加压力。一个 “好 ”的实施方案在所有条件下都能达到预期性能,而一个不稳定的实施方案则会导致不可预测和不一致的结果,甚至可能锁定或崩溃。当然,这种应力突发错误频率的组合在现场可能极为罕见,但却无法排除故障或重复进行,因此在研发各阶段进行大量、全面的应力验证对于生产稳定、符合要求的产品至关重要。
FEC Error Injection / FEC误码压力测试
Codeword & Symbol Error Configuration
注入周期示意图
在编解码级别,可以配置注入周期的编解码个数。对于 112G SerDes,“每周期码字数/Codewords Per Cycle ”必须是偶数整数,如 2、4、6、8 等。在一个周期内,可以配置连续出错编解码字数,其中至少注入一个出错符号。如上图所示,出错码字被置于无错码字之前。
有两种预定义配置文件可以加载:
-
最大连续不纠错无链路损耗
加载最大连续不纠错(不含链路损耗)
-
带链路损耗的最小连续无法校正情况
加载有链路损耗的最小连续无法校正情况
加载配置文件后,仍可对其进行自定义,以满足特定测试要求。
Errored Symbol Per CW Configuration
每Codeword误码符号和误码符号列表
在符号级,可在 “每 CW 误码符号 ”中配置误码 CW 内的误码符号数量,以及每个误码符号在其下方列表中的位置。
对于 RS-FEC KP 和 RS-FEC-Int,错误符号超过 15 个的 CW 将无法纠正,可以在配置时看到这一点。
每次更改错误符号索引列表时,都需要单击 “应用 ”将更改提交到机箱。如果有许多索引要更改,可以使用键盘上的制表符键从一个索引转到下一个索引,或使用 shift + tab 键返回。
Bit Error Mask Configuration
位错误掩码配置 - 掩码配置
在位级别,可以配置错误符号内的错误位数量及其位置。使用位掩码模式复选框可选择在错误符号中哪些位会被误码。最重要位(位 9)放在左边,最不重要位(位 0)放在右边。
位错误屏蔽配置 - 模式
有三种模式可供选择:
-
静态:所有出错符号的位错误模式保持不变。
-
旋转:每个出错符号的位错误模式向最有效位移动一位。
-
递增:选择该模式时,位错误模式将被忽略。取而代之的是,位错误模式从 000000001、000000010、000000011 开始,一直到 111111111,并重复 000000001 的序列...
Loop Mode
循环模式
有三种循环模式供控制注入循环的次数:
-
单次:注入一个循环。
-
连续:连续注入循环,直到明确停止。
-
重复:注入特定次数的循环(最多 65535 次)
FEC 引擎
不同速度的 Z800 Freya 端口有不同数量的 FEC 引擎。
TX Error Injection Statistics
TX 错误注入统计
在 TX 统计中,提供以下计数器:
-
总传输 CW
-
可纠正 CW 总数(已错误但错误符号 <=15 个)
-
不可修正的 CW 总数(已误码且误码符号大于 15 个)
-
无错误化文总数
-
CW 误差比(1-总无误/总 CWs)
-
传输的错误符号总数
对应API的接口指令
PCS/FEC
Physical Coding Sublayer & Forward Error Correction
PL1_PCS_VARIANT
# set
<module-index>/<port-index> PL1_PCS_VARIANT <variant>
# get
<module-index>/<port-index> PL1_PCS_VARIANT ?
Description
PCS variant configuration.
Actions
set, get
Parameters
variant: byte, PCS variant
IEEE = 1
ETC = 2
Example
# set
input: 0/1 PL1_PCS_VARIANT IEEE
output: <OK>
# get
input: 0/1 PL1_PCS_VARIANT ?
output: 0/1 PL1_PCS_VARIANT IEEE
PL1_CWE_BIT_ERR_MASK
PL1_CWE_CONTROL
PL1_CWE_CYCLE
PL1_CWE_ERR_SYM_INDICES
PL1_CWE_FEC_ENGINE
# set
<module-index>/<port-index> PL1_CWE_FEC_ENGINE <engine_bitmask>
# get
<module-index>/<port-index> PL1_CWE_FEC_ENGINE ?
Description
Configure which FEC engines to use.
Actions
set, get
Parameters
engine_bitmask: hex, big endian.
the highest bit corresponds to FEC engine 4 (0x08)
the lowest bit corresponds to FEC engine 1 (0x01)
Note
For 800G, there are 4 engines. Default <engine_bitmask> = 0x0F.
For 400G and 200G, there are 2 engines. Default <engine_bitmask> = 0x03.
For 100G, there is 1 engin. Default <engine_bitmask> = 0x01.
Example
# set
input: 0/1 PL1_CWE_FEC_ENGINE 0x0F
output: <OK>
# get
input: 0/1 PL1_CWE_FEC_ENGINE ?
output: 0/1 PL1_CWE_FEC_ENGINE 0x0F
PL1_CWE_FEC_STATS
PL1_CWE_FEC_STATS_CLEAR
PP_ALARMS_ERRORS
PP_FECMODE
PP_PHYAUTONEG
PP_RXCLEAR
PP_RXFECSTATS
PP_RXLANEERRORS
PP_RXLANELOCK
PP_RXLANESTATUS
PP_RXTOTALSTATS
PP_TXERRORRATE
PP_TXINJECTONE
PP_TXINJECTONE
code: 284
# set
<module-index>/<port-index> PP_TXINJECTONE
Description
Inject a single bit-level error into the SerDes where injection has been enabled.
Actions
set
Parameters
Example
# set
input: 0/1 PP_TXINJECTONE
output: <OK>