目录
一、SRIO IP时钟结构
1、时钟内部结构
2、时钟直接的关系
3、时钟计算原理
二、SRIO DRP介绍
1、MMCM DRP配置(xapp888)
2、CPLL DRP配置(ug476)
关于CPLL DRP配置详细介绍:
GTX中CPLL、QPLL DRP动态配置方法(详解)-CSDN博客
关于MMCM DRP配置详细介绍:
MMCM DRP动态配置方法(超详细讲解)-CSDN博客
一、SRIO IP时钟结构
1、时钟内部结构
从下图可以看出IP的时钟结构主要分为3个部分:时钟分频模块、SRIO IP模块和GTX模块。其中主要由时钟分频模块产生时钟输出给SRIO IP模块和GTX模块。
2、时钟直接的关系
时钟分频模块主要产生4个时钟log_clk/cfg_clk 、 phy_clk 、gt_pcs_clk和gt_clk。在SRIO动态速率重配置(DRP)过程中需要log_clk/cfg_clk 、 phy_clk 、gt_pcs_clk和gt_clk和线速率line rate相匹配,时钟与线速率之间的关系如下:
在进行IP配置时,选择Shared Logic in Example Design ,将时钟分频模块放到外部模块,而不放在IP内部,这样方便我们进行时钟的更改。
3、时钟计算原理
从时钟结构中可以看出gt_pcs_clk和RXUSERCLK2/TXUSERCLK2相连,gt_clk和RXUSERCLK/TXUSERCLK相连,refclk与GTREFCLK0相连,refclk由外部时钟引脚经过IBUFDS(差分转单端)后产生,所以sys_clk_p/n需要连接到GTX专用参考时钟引脚上。
关于RXUSERCLK/TXUSERCLK的计算公式如下:
RXUSERCLK2/TXUSERCLK2和RXUSERCLK/TXUSERCLK关系如下:
影响RXUSERCLK/TXUSERCLK和RXUSERCLK2/TXUSERCLK2的几个参数分别为line rate、
Internal Data Width和RX_DATA_WIDTH。
使能8B10B编码时,RX_INT_DATAWIDTH =0时Internal Data Width为20bit;RX_INT_DATAWIDTH =1时Internal Data Width为40bit。
打开IP核里面的模块,可以看到最底层调用了 GTXE2_CHANNEL源语,使用了 GTXE2资源。
可以从模块代码中可以看到关于RX8B10BEN/TX8B10BEN、RX_DATA_WIDTH/TX_DATA_WIDTH、RX_INT_DATAWIDTH/TX_INT_DATAWIDTH的配置。
根据上面的公式和GTX配置的参数我们可以计算出RXUSERCLK/TXUSERCLK和RXUSERCLK2/TXUSERCLK2的值,以线速率1.25G为例:
RXUSERCLK=TXUSERCLK=1250M/20=62.5M;
RXUSERCLK2=TXUSERCLK2=62.5M/2=31.25M。
gt_clk和gt_pcs_clk的时钟分别等于RXUSERCLK/TXUSERCLK和RXUSERCLK2/TXUSERCLK2。下面分析log_clk和phy_clk的时钟计算原理。可以从顶层结构中看出,发送数据流动方向为LOG------>BUF-------->PHY------->GTX,接收数据流动方向为GTX------>PHY-------->BUF------->LOG。
LOG逻辑层主要和用户逻辑接口进行数据交换。逻辑层输入、输出数据位宽为64bit。
BUF缓冲层是对发送和接收的包进行缓冲,另一个作用是处理跨时钟域的问题。缓冲层输入、输出数据位宽也为64bit。
PHY物理层用来处理链路训练(Link Training), 初始化(Initialization) 和协议(Protocol),物理层接口与高速串行收发器相连。物理层和缓冲层数据交互数据位宽为64bit,物理层与高速串行收发器(GTX)数据交换位宽为32*LW(LW = link width)。
线速率line_rate=1.25G条件下:
链路位宽为X1模式:GTX接口数据位宽为32bit,log和phy数据位宽都为64bit,并且GTX接口数据是在RXUSERCLK2/TXUSERCLK2时钟下进行接收和发送。所以log_clk=phy_clk=TXUSERCLK2/2=15.625M。
链路位宽为X2模式,最大物理层训练链路为X2:GTX接口最大数据位宽为64bit,log和phy数据位宽都为64bit,log_clk=TXUSERCLK2=31.25M。若实际物理层训练链路为x2,GTX接口数据位宽为64bit,phy_clk=TXUSERCLK2=31.25M;若实际物理层训练链路为x1,GTX接口数据位宽为32bit,phy_clk=TXUSERCLK2/2=15.625M。
链路位宽为X4模式,最大物理层训练链路为X4:GTX接口最大数据位宽为128bit,log和phy数据位宽都为64bit,log_clk=TXUSERCLK2 * 2=62.5M。若实际物理层训练链路为x4,GTX接口数据位宽为128bit,phy_clk=TXUSERCLK2*2==62.5M;若实际物理层训练链路为x1,GTX接口数据位宽为32bit,phy_clk=TXUSERCLK2/2=15.625M。
这里为什么逻辑层的时钟log_clk不根据链路位宽变化而变化,而物理层的时钟phy_clk却要根据实际训练链路的宽度而改变。
从顶层结构中可以看出逻辑层LOG和物理层PHY直接有一个缓冲层BUF,而物理层到GTX之间没有缓冲。因为有了缓冲层BUF的原因,逻辑层就没有必要进行降速,可以按照最高速率进行数据传输,数据到了缓冲层BUF中由缓冲层BUF进行控制输出给物理层PHY的速率;物理层则需要根据GTX实际训练链路宽度来调整输出频率,否则会造成数据丢失。缓冲层BUF还具有跨时钟域处理作用,log_clk和phy_clk频率不同时就需要使用该功能。
二、SRIO DRP介绍
SRIO IP进行DRP时,需要进行MMCM DRP和CPLL DRP。MMCM DRP主要配置log_clk/cfg_clk 、 phy_clk 、gt_pcs_clk和gt_clk,CPLL DRP配置线速率Line Rate。配置顺序为先进行MMCM DRP配置,然后进行CPLL DRP配置。在配置过程中需要进行复位,配置完成后取消复位。
从手册提供的速率表中可以看出线速率Line Rate主要有5种:1.25Gb/s,2.5Gb/s,3.125Gb/s,5Gb/s,6.25Gb/s。不同线速率下gt_pcs_clk、gt_clk、phy_clk和log_clk也需要改变。输入参考时钟频率可以选择125M和156.25M。
1、MMCM DRP配置(xapp888)
相同线速率,不同链路位宽下gt_pcs_clk和gt_clk都相同。只有phy_clk和log_clk会根据链路位宽进行变化。使用MMCM输出3个时钟分别为clk_out0,clk_out1和clk_out2。
根据链路位宽不同gt_pcs_clk、gt_clk、phy_clk、log_clk和MMCM输出时钟对应关系如下:
生成IP时选择Shared Logic in Example Design,生成IP的 Example Design,双击打开srio_clk模块,将MMCM的DRP端口引出进行控制。
关于MMCM DRP配置参考官方文档xapp888.主要使用以下寄存器:
其中0x14,0x15,0x16用于配置VCO频率;0x08,0x09配置clk_out0输出频率;0x0A,0x0B配置clk_out1输出频率;0x0C,0x0D配置clk_out2输出频率。
所需时钟都能由1250MHz整数分频得到,第一步将VCO倍频到1250M,再分频输出所需时钟,寄存器配置如下:
关于MMCM DRP详细介绍可以看这篇文章:
MMCM DRP动态配置方法(超详细讲解)-CSDN博客
2、CPLL DRP配置(ug476)
IP配置时勾选Additional transceiver control and status ports功能,将DRP端口开放出来以便后续使用。
SRIO中默认使用CPLL时钟,CPLL DRP配置用于动态配置GTX线速率,计算公式为:
对应的寄存器如下:
线速率line rate和参数配置对应关系如下:
关于CPLL DRP详细介绍可以看这篇文章:
GTX中CPLL、QPLL DRP动态配置方法(详解)-CSDN博客