在KeyStone 器件实现IEEE1588 时钟方案
的高16 位需要软件维护。上层软件在发送一个1588 报文的时候,时间戳中秒计数的高16 位由软件设置的,低32 位设置为0。
报文解析模块用来匹配解析PTP 报文。83640 支持1588 Annex D E 和Annex F 格式的报文。当PTP 报文送至PHY 时,报文解析硬件检测到这个PTP 报文的时钟,在报文发出时,把本地的时间戳写到PTP 报文里面,并修改相关的CRC 和CHKSUM 值。83640 支持1588 single step 模式的时钟源。在报文接收方向,同样有报文解析硬件。在解析到PTP 报文以后,接收报文的准确时间戳可以插入在报文里,或者通过控制接口上报。
83640 的1588 时钟模块对外提供频率控制接口,软件通过控制寄存器可以调整输出的时钟频率。1588 时钟模块根据上层软件的配置,对1588 时钟模块的输入时钟信号微调,然后分频输出。时钟调整是通过调整每个时钟周期的时间来实现的。在每个时钟周期调整的单位是2-32ns。在正常模式下,这个调整机制用来补偿本地时钟和时钟源的差距。在长期工作以后产生累积同步误差时,软件可以调整寄存器的值,在一定时间内,对频率向上或者向下微调,以补偿相位差距。当在相位补偿以后,恢复正常频率补偿模式。
软件协议栈通过协议处理以后获得本地的时钟与时钟源的绝对时间差值,然后通过寄存器调整本地绝对时间戳。在修改时,软件把绝对时间差值写入寄存器,然后使能修改。这种方法适用初始同步时单次校正本地绝对时间戳。如在正常工作中出现累积相位偏差,应该使用前面介绍的微调方法,避免输出时钟抖动。
应用层通过设置83640 的trigger control 模块来控制输出PPS 或者其他同步信号。应用可以设置在timestamp 的哪些具体时刻某个GPIO 管脚可以发生反转。trigger 的输出可以线与并输出到GPIO 管脚,通过线与可以是输出复杂的周期波形。
83640 方案实现简单,直接输出矫正时钟及相位信号,但是对于复杂传输场景支持困难;而且相比不包含IEEE1588 功能的PHY 芯片,83640 的成本要高出许多。
3.2 KeyStone1 1588 方案
KeyStone 架构是TI 推出的高性能多核架构,现在已经有KeyStone1 和KeyStone2 两种架构。KeyStone 架构中也包含了对IEEE1588 功能的支持。
KeyStone1 系列芯片的1588 方案包括两个硬件部分:记录时间戳,发送同步脉冲。KeyStone1 支持two step 的时间戳模式,同时也能支持1588 协议中Annex D E 和Annex F规定的PTP 报文解析。
对于记录时间戳,KeyStone1 对于Annex D E 和Annex F 采用不同的硬件来支持。Annex D E 使用以太网协处理(NetCP)里面的包加速器(PA)来支持;Annex F 报文使用以太网交换机(GE Switch)里面的CPTS 模块来支持 [12-13] 。
对于同步信号的输出,KeyStone1 里面需要通过Timer64[14]来完成。
软件通过CPTS 或者PA 获取到时间戳后,计算需要调整的频率和相位,然后通过配置Timer64 的周期寄存器来更改Timer64 的输出周期,调整输出的相位信息;通过SPI 接口调整外部的VCXO 的输出频率,矫正本地时钟频率。
3.2.1 Annex D E PTP 报文处理
PA 内部会维护一个48bit 的计时器,该计时器的频率与PA 的频率一致(一般是
350MHz)。由于Annex D E 报文的承载方式为IP/UDP 承载(报文模式为IPv4 和IPv6),当用户收到或者发送一个 IPv4 或 IPv6 的 PTP 报文时,在 PA 侧会记录一个报文接收(或发送)的时间戳,这个时间戳只有32bit(为48bit 中的低32bit)。这个时间戳保存在用户指定的QMSS 的某个Queue 的描述符里面。
用户从Queue 中提取出该描述符:如果是接收,用户可根据描述符信息解析报文类型,获取报文内容,同时读取32bit 时间戳并换算成绝对时间。如果是发送,用户只需读取时间戳,转换为1588 48bit 绝对时间后按照1588 two step 的规则再做报文发送。
3.2.2 Annex F PTP 报文处理
GE Switch 模块上的CPTS 模块支持对1588 Annex F(以太网封装)的PTP 报文解析,
支持VLAN。在CPSW 逻辑匹配到PTP 报文时,会触发一个硬件信号给CPTS 模块用来触发时间戳获取。
CPTS 的时间戳模块维护一个32bit 的timer,根据配置,这个timer 可以工作在二分之一CPU 主频上。这个timer 是一个free run timer。软件通过这个timer 换算得到1588 的32bit 纳秒时钟和48bit 秒时钟。因为timer 只有32bit,所以软件需要处理timer 反转事件,用来维护秒信息。CPTS 得到时间事件以后,会将PTP 报文的消息类型和Sequence ID 等信息压入EVENT FIFO 中,并触发中断让用户处理。
3.2.3 同步信号的产生
同步信号需要通过Timer64 来产生。由于Timer64,PA 以及CPTS 都是共
- HyperLink编程和性能考量(01-15)
- 基于KeyStone 器件建立鲁棒性系统(10-29)
- 基于多核处理器的弹载嵌入式系统设计研究(02-18)
- Navigator Runtime 最大限度提高多内核效率(05-08)
- 基于KeyStone DSP的多核视频处理技术(09-15)
- KeyStone多核SoC工具套件: 单个平台满足所有需求(09-07)