时钟补偿
1.什么是时钟补偿?
时钟补偿序列由6组时钟补偿指令/CC/组成,至少每隔10000个字码组发送一次,而不顾当前是否有其他的数据包或者码组在传输。当发送时钟补偿序列时,Aurora核将自动中断数据传输。每发送10000个字节,时钟补偿序列在每个线路(lane)上加12个字节的额外开销。时钟补偿应用于系统收发端使用独立的参考时钟资源的情况,它允许收发端使用的参考时钟频率的不同最大为100PPM。在收发端使用同一的参考时钟频率的时候,不需要使用时钟补偿功能。此时,WARN_CC和DO_CC都应该接低。另外,CLK_CORRECT_USE属性应该被设为false。
2.时钟补偿接口
所有的aurora8B/10B核上都有一个时钟补偿接口,这个接口用于控制时钟补偿序列的发送。
两个重要的端口:
DO_CC:当DO_CC为高电平时,aurora核在所有的线路上发送CC序列;
WARN_CC:当WARN_CC为高电平时,aurora核将不应答UFC(用户流控)请求。
DO_CC需要每隔一个时钟补偿周期置为高电平。DO_CC高电平持续时间和间隔时间与GTP/GTX收发器数据接口Lane的宽度有关。
WARN_CC用于aurora核使用了UFC或者NFC的情形。在DO_CC置位为高之前使WARN_CC置位,阻止UFC信息离CC序列太近,以免UFC信息与CC序列重叠而导致数据损坏。需要提前预置WARN_CC的时钟周期数与通道的线路数目和线路的宽度有关。
在WARN_CC和DO_CC为高电平期间,NFC信息将不会被应答。
3.时钟补偿功能常见用法:
(1)将时钟补偿事件发生时刻安排在数据帧的外边。
(2)将时钟补偿事件安排在数据流的特殊时刻,以避免干扰数据流。
一般情况下,不建议用户自己编写时钟补偿逻辑。使用CORE Generator software生成aurora核时会伴随产生一个标准的时钟补偿模块standard_cc_module_i。
4.时钟补偿对数据传输的影响
由于需要进行时钟补偿,需要在发送10000个字节后插入时钟补偿序列(对于2bytes的线路,每隔5000个时钟周期,对于4bytes的线路,每隔2500个时钟周期),用户不能够连续发送和接收数据,因为在时钟补偿过程中,数据线路将被挂起6个时钟周期。
5. 标准时钟补偿模块standard_cc_module_i分析
输入端口:
RESET-->rst_cc_module_i-->!lane_up_reduce_i-->&tx_lane_up_i-->
(aurora_module_i模块输出管脚).TX_LANE_UP(tx_lane_up_i)
TX_LANE_UP为高电平,则表示线路准备好,可以开始数据传输;为低电平,则表示线路尚未准备好。
这里可以认为,RESET用来指示TX_LANE_UP的状态。
输出端口:
WARN_CC:直接与aurora核的WARN_CC端口相连;
DO_CC:直接与aurora核的DO_CC端口相连;
参考文档:
aurora_8b10b_ug353-5.2-userguide
aurora_8b10b_protocol_spec_sp002