一、M、N、N'、F、K
M:204B接口中转换器的数量,双通道(数据)ADC就是M=2,两个单通道(数据)ADC也是M=2.连接几个204B接口。
N:ADC的分辨率,12bit =ADC,N=12;16bit ADC ,N=16;
N’:以半字节为单位(4bit)的分辨率,如12bit 的ADC ,N’=12bit / 4=3;常用的有14bit、16bit,此时的N’=4,14bit也是用16bit来传输,空出来的2bit使用CS、T补位,CS是控制位,T是结束位;
F:每一帧中的字节数
K:多帧中包含多少个帧
下图就是配置IP过程的F和K参数:
二、关于几个时钟信号的仿真验证
1、drpclk
需要提供频率稳定的时钟信号,用于GT物理层的启动
2、tx_core_clk/rx_core_clk
204B PHY的核时钟,用于产生内部高速接口工作的txusrclk2,频率是线速率的1/40,手册中说明只有Ultra和ULtra+系列的FPGA该时钟可以由txoutclk/rxoutclk提供,而7系列中txoutclk/rxoutclk经过BUFG驱动之后也可以提供给核时钟,经上板验证时钟工作不正常,无法支持ILA的识别
3、sysref
tx与rx的仿真需要提供正确的sysref,才能保证rx与txlink
三、关于IP的AXI4-Lite初始化配置
不进行初始化配置的情况下,仿真IP无法正常工作。但实际板卡测试的条件下,只需要提供稳定的AXI时钟信号和aresetn复位信号即可保证IP完成正常初始化,如果不提供相关逻辑则IP无法正常启动。
四、关于204B链路建立的各个阶段和调试方法
1、代码组同步(Code Group Sunc,CGS)
这个阶段高速的每个lane必须能够接收到K28.5的K码,且这些lane必须是对齐的并且逗号对齐(comma alignment)用于确保对齐
GT物理层的调试端口gt_rxcommadet[(LANES-1):0]将会拉高标志逗号对齐模块检测到有效的逗号(comma)当该信号拉低之后,逗号对齐操作完成,同时调试状态寄存器的bit 0会拉高
代码组同步完成需要每个lane连续接收到4个K28.5的K码,完成后sync信号拉高,调试状态寄存器bit 1拉高。
对于子类0:一旦接收到4个连续的K码后会进入ILA阶段
对于子类1和2 :会一直接收K码直到下一个LMFC开始的边界,之后开始ILA,同时sync拉高用来标志这个阶段的结束
【调试CGS阶段的思路】
(1)GT部分
判断GT是否正常锁定,检查CPLL和QPLL的lock状态,这是导致CGS失败的主要原因
其他GT的调试可参考 Xilinx Answer37181
(2)Lane数据
判断是否有一路缺少数据,判断收发两侧的Lane数量是否设置一致且正常连接
(3)抖动
链路的抖动可能导致无法通过CGS
(4)供电
(5)信号完整性
检查K码接收有误的链路信号完整性,检查GT数据和char_is_k信号,判断具体故障的lane
(6)逗号对齐(Comma Alignment)
不同步的时候204B核会触发逗号对齐,这是因为单个错误的字节可能成为跨越字节边界的逗号,这反过来可能导致GT重新对齐并坚持错误的对齐方式。
结果是所有后续的数据字节都将成为错误。
例如:
2字节的编码后10bit数据,1100110000和1110100010
如果第一个字节有2bit误码变成了1100110011和1110100010。由此第一个字节的后4bit和第二个字节的前6bit会组成0011111010,这是一个没对齐的comma,但是与一个K28.5的编码一致。禁用逗号对齐意味着不会发生这种情况-只有在同步期间才需要执行逗号对齐。
(7)对齐字符
对齐字符替换只应该发生在多帧的最后一个字节,并且只有当数据与前一个多帧的最后一个字节中的数据匹配时才应该发生——这应该总是落在多帧边界上。
如果这种情况发生在数据中的其他位置,RX将放弃同步。