文章目录
前言
上篇介绍每个QUAD中的GT Transceiver通道有6个可用的参考时钟输入:
两个外部参考时钟输入对,GTREFCLK0和GTREFCLK1
来自于QUAD上部的两个参考时钟引脚对,GTSOUTHREFCLK0和GTSOUTHREFCLK1
来自于QUAD下部的两个参考时钟引脚对,GTNORTHREFCLK0和GTNORTHREFCLK1
GT Transceiver通道的参考时钟首先来自于上面所说的6个可用时钟来源,之后,这些参考时钟进入QPLL或者CPLL。
尽管QUAD的参考时钟来源有多种选择,但是在一个独立的设计中,总需要一个或多个外部参考时钟,也就是说必须使用外部参考时钟
一、单个外部时钟情况
1、单个外部参考时钟驱动单个QUAD中的多个transceiver
每个QUAD有两个专用的差分时钟输入引脚(MGTREFCLK0[P/N]或 MGTREFCLK1[P/N]) ,可以连接到外部时钟源。在单个外部参考时钟使用模型中, IBUFDS_GTE2必须实例化以使用专用的差分参考时钟源之一。
这种情况很简单,一个Quad共用一个外部参考时钟,或者一个参考时钟(不一定是外部)是很常见的情况,4个transceiver一组共用一个参考时钟。
下图为VIVADO使用IP核图形化界面,这里采用QPLL也是一样的。
2、单个外部参考时钟驱动多个QUAD中的多个transceiver
单个外部参考时钟也可以驱动多个QUAD中的多个Transceiver,例如:
尽管如此,但需遵守一定的规则:
源QUAD上方的QUAD数量不能超过1个;
源QUAD下方的QUAD数量不能超过1个;
1个外部参考时钟所驱动的QUAD总数不超过3个,或驱动的Transceiver不超过12个。所谓的源QUAD,指的是直接连接到外部参考时钟的QUAD。
概括就是:1个外部参考时钟驱动的源QUAD上下相邻的QUAD分别不能超过1个
这种情况是上篇文章说到的6中参考时钟来源之南北参考时钟引脚对实现的:
GTSOUTHREFCLK0和GTSOUTHREFCLK1
GTNORTHREFCLK0和GTNORTHREFCLK1
Xilinx 实现工具对南北布线进行必要的调整,并在需要时进行必要的引脚交换,以便将参考时钟从一个 Quad 转到另一个 Quad。
这是原理,设计时定制好IP,工具帮你完成一切。
二、多个外部时钟情况
1、同一个QUAD中,多个GTX Transceiver使用多个参考时钟
每个QUAD有两个专用的差分时钟输入引脚(MGTREFCLK0[P/N]或 MGTREFCLK1[P/N]) ,可以连接到外部时钟源。在多个外部参考时钟使用模型中, 每个专用的参考时钟引脚对必须例化它们对应IBUFDS_GTE2,以使用这些专用的参考时钟资源。
如下图所示:
在同一个QUAD中,多个GTX Transceiver使用多个参考时钟。
第一个外部参考时钟MGTREFCLK0[P/N],用户设计将其IBUFDS_GTE2的输出连接到GTXE2_COMMON 和GTX transceiver的 GTXE2_CHANNEL 原语以及的GTHE2_COMMON 和 GTH transceiver 的GTHE2_CHANNEL 原语的GTREFCLK0管脚。
同理,将MGTREFCLK1[P/N]连接到GTREFCLK1管脚上。
用户设计需要根据设计需求设置 QPLLREFCLKSEL[2:0]和CPLLREFCLKSEL[2:0]
2、不同QUAD中,多个GTX Transceiver 使用多个参考时钟
参考时钟选择结构的灵活性允许QUAD中的每个Transceiver都可以访问上下QUAD中的专用参考时钟。
一个QUAD的Transceiver如何通过使用 NORTHREFCLK 和 SOUTHREFCLK管脚从另一个QUAD访问专用参考时钟。
在每个GTX或 GTH Transceiver PLL 有多个参考时钟选项的情况下,用户设计需要根据设计需求设置 QPLLREFCLKSEL[2:0]和CPLLREFCLKSEL[2:0]。
尽管在上面这种情况中,共用参考时钟的规则也是必须遵守的:
源QUAD上方的QUAD数量不能超过1个;
源QUAD下方的QUAD数量不能超过1个;
1个外部参考时钟所驱动的QUAD总数不超过3个,或驱动的Transceiver不超过12个。
一个时钟针对可以驱动的Transceiver的最大数量是12个。超过12个Transceiver的设计需要使用多个外部时钟引脚,以确保控制抖动的规则得到遵守。 当使用多个时钟引脚时,可以用一个外部缓冲器从同一个振荡器驱动它们。
对于需要动态改变参考时钟源的多速率设计。 QPLLREFCLKSEL 和 CPLLREFCLKSEL 端口用于动态选择参考时钟源。在选择之后,用户设计要负责 通过高电平有效的CPLLRESET和QPLLRESET端口重置CPLL和QPLL,并负责后续的初始化过程。