沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第三章 GTP的时钟结构

目录在这哦~

https://blog.csdn.net/z123canghai/article/details/107700878


第三章   GTP的时钟结构


理解各个时钟在GTP核内部的关联

每个功能模块,缺啥都不能缺时钟,对于高速串行接口,更是如此,而且它还需要专用时钟,如下图白框所标注的就是输入时钟,剩余17个时钟则是根据输入时钟及IP核的配置产生的输出时钟,很多吧。我们可以简单的分为两大类五小类,两大类自然是三个输入,17个输出,五小类就包括一是板卡系统时钟、二是高速串行接口专业时钟、三是共享时钟源、四是高速串行发送模块产生的时钟、五是高速串行接收模块产生的时钟。

我们先看输入时钟,我们在IP核配置时候就要选择与我们板卡所用时钟相适应的频率。差分时钟配置如下125MHZ。

 在原理图的位置如下

另外我们看IP核的另外一个选项卡还有一个输入时钟选项,用于系统时钟和动态配置,这个时钟并不是专用时钟,它的来源是任意的,甚至你可以使用与此处配置不一致的时钟,嗯,我试过,最起码没问题,具体问我为什么我要试这个,因为起初不知道这是干啥的o(╥﹏╥)o

 

下面我们就根据这两个输入时钟,来看下这个IP核内部的时钟架构是什么样子的,如下图所示。下面简单的分析一下

  1. 高速串行接口专用时钟进“IBUFDS_GTE2”模块转单时钟,这个模块位置在这,如图右所示。

         这个原语是专门提供给高速接口用的,而且还进行了阉割,有兴趣可以看下他本来样子,还可以对内部端接电阻进行配置,以更好的消除信号反射,我就不展开阐述了。

2、这个是用来产生关闭“GTPE2_COMMON”以及对该硬核或者说原语的复位信号的,产生方式很简单,上电打拍。其位置和逻辑如下图所示。

   这个模块输入到“gtp_core_common”模块的时钟就是上图111行和112行这两个,先给“GTPE2_COMMON”做断电操作96个时钟周期,并在延时120个时钟后复位8个时钟周期,其实目的就是复位这个核,如下图。红框是本模块产生的信号,我们看对“gtp_core_common”模块复位还有个毛刺,说明还有其它模块对其进行复位,这个我们在下个章节进行阐述。

3、系统时钟输入到“gtp_core_common”模块和接收端以及发送端的初始化模块。由此可见该信号的引入的目的就是初始化的。

4、是“gtp_core_common”模块产生的时钟输出,这个模块就是对“GTPE2_COMMON”原语的封装,主要目的是产生“GTPE2_CHANNEL”所用的时钟。

         对核内部就不去做过多的分析了,没有必要,而且我也说不清。我们看下对外接口信号。我们大致的把输入信号分为五个部分,我们倒着看,下面对此进行依次解释。

(5)是高速串行接口的专用输入时钟转单端后接入的。我们看到有两个,CLK1和CLK0。这无论是和原理图还是IP核的配置都是吻合的,如下图是我的配置,之所以用REFCLK1_Q0是因为原理图已经设计好了。

         也正因此,可以看到“GTREFCLK0_IN”是没有时钟输入的。

(4)这是给“GTPE2_CHANNEL”的时钟,一个是用于处理并行数据的时钟,一个是用于处理串行数据的时钟,具体这两个时钟是如何应用的,会在下面章节阐述。根据上图IP核的配置可以看出,我用的是PLL0,所以PLL0有相关的输出有时钟,PLL1的没有。

(3)“PLL0REFCLKSEL_IN”这个信号还是挺有讲头的,表示输入时钟的选择。这涉及到了GT系列的时钟架构,也是GTP和TGX的一大区别所在。这个GTP的输入时钟选择示意图,GTX与之有区别,在下文描述。这两组GTP分别来自X0Y0和X1Y0两个BANK。他们的时钟是可以共用的。

         首先,红色部分是晶振输入时钟,每个Quad有两个选择,这个在已经说过多次了,随后这个两个时钟会经过上文所说的“IBUFDS_GTE2”转单时钟,随后会进行路由到相邻的BANK,这就是xilinx所说的“东西”路由,两个不同BANK的时钟可以共享如下图所示

这样PLL可以有四个时钟输入源可供选择了,但我们看实际上有七个时钟可供选择呢?那剩下三个呢? 其中一个是“GTGREFCLK*”,这个参考时钟由内部FPGA逻辑生成,此输入仅供内部测试之用。还有两个,是空下的,也就是GTP只能从5个里面选1个,这是由GTP结构决定的。空下那两个是给GTX用的,因为GTX不是“东西”路由,而是“南北路由”如下示意图,这样的三个BANK的高速串行接口时钟共享,这样就有7个时钟可供选择了(下图只是示意图,所以没有看到高速串行接口模块)

(2)这就是在“2”中描述的内容,也就是“gtp_core_cpll_railing”模块产生的复位信号,当然还有其它模块的复位,这个就不在重复叙述了

(1)这里面就是“GTPE2_COMMON”模块输出的时钟及状态。当然,还有一个碍事的“sysclk_in_i”,这个时钟是用于检测到PLL的反馈和参考时钟信号的。除此之外,PLL0OUTCLK_OUT、PLL0OUTREFCLK_OUT如上文,给“GTPE2_CHANNEL”的。“PLL0LOCK_OUT”是PLL锁定信号,“PLL0REFCLKLOST_OUT”是PLL失锁信号。以上即为本模块所有信号。

我们继续下面这个图的分析

5、6、7这三个是可以合起来说的。

是“gtp_core_GT”模块的输出时钟,这个模块主要是对“GTPE2_CHANNEL”的封装,我们从如下图可以看到上文介绍的输入时钟、和输入与输出相关的时钟。

         我们看RX和TX相关时钟很有特点哈,都是三个输出两个输入,其中那两个输入就是根据各自的输出得来的,在“gtp_core_GT_USRCLK_SOURCE”模块经过PLL,得到的。

 


欢迎关注沧小海的fpga微信公众号,回复“GTP”获取A7 GTP仿真例程,开发软软件为vivado2017.4

点击“Flow”选择“open static simulation”打开静态仿真可直接查看信号波形

  • 19
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值