当前位置:   article > 正文

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第四章 GTP的复位逻辑_gtx失锁

gtx失锁

目录在这哦~

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


第四章 GTP的复位逻辑


总的来说,GTP的复位就是你想怎么复位都可以,支持整体复位,单个组件复位。我们也可以不复位,核不会因为我们没有进行软复位就不对核进行复位,在上电之后会自动进行一系列的复位,不随你的意志而转移。可以说GTP核复位做得非常的灵活、全面,但也因此多了非常多的复位相关信号。

本章节不会按照《GTP的时钟结构》那般细说每个信号了,因为涉及到了单个组件,而单个组件的介绍会在后文进行,所以复位相关的逻辑也会随组件的介绍来阐述,本文主要介绍GTP核上电后必须进行的复位逻辑,在核内部主要设计如下两个模块的内容,其实这两个模块的内容差别不大,了解一个另外一个也大概清楚了。

         涉及到的对外接口信号如下所示,一共六个,分别对应发送模块和接收模块的复位输入与输出。              

         首先来说第一部分,发送部分的复位逻辑。也就是“gtp_core_TX_STARTUP_FSM.v”这个模块。如下图所示,有用的信号很少,才12个,我们先看下每个信号的含义,在来分析模块内部的逻辑。

我对接口信号进行了简单的分类,可分如下7类

1、STABLE_CLOCK和TXUSERCLK:

两个时钟,第一个是系统时钟,第二个是“gtp_core_GT_USRCLK_SOURCE”产生的用户时钟,对该时钟的描述详见第三章,也可以简单的理解为两个时钟。

2、SOFT_RESET:

用户接口的软复位,高电平有效,我们可以再任何时刻将其拉高,对整个发送模块进行复位。

3、PLL0_RESET、PLL0REFCLKLOST和PLL0LOCK

第一个是对“gtp_core_common”模块的复位信号,第二、三分别是该模块的状态,也就是我们上文说的非常重要的“GTPE2_COMMON”这个原语的复位。

4、GTTXRESET和TXRESETDONE

第一个是对“GTPE2_CHANNEL”发送通道的复位,第二个是复位完成信号。

5、MMCM_RESET和MMCM_LOCK

第一个是对“gtp_core_GT_USRCLK_SOURCE”模块的发送部分PLL的复位,第二个自然是复位完成锁相信号。

6、TX_FSM_RESET_DONE

本模块的复位状态机执行完成,复位完成。

7、TXUSERRDY

拉高表示TXUSRCLK和TXUSRCLK2稳定,复位完成,是告知“GTPE2_CHANNEL”发送模块的。

有没有发现什么呢?这些接口就是对GTP核主要模块的复位以及相应的复位完成信号,由此,也大致了解该模块干什么了,就是对各个模块进行逐个复位。由下图所示,在FPGA上电后,首先是对PLL进行复位,也就是“GTPE2_COMMON”,然后对“GTPE2_CHANNEL”复位,完成后既可以正常运行。

然后我们打开该模块翻一番,内容还真不是,但看到有下面一段注释,优秀啊!!复位状态机每部干什么都写得清清楚楚,所以我们就应该多看别人的代码,多看优秀的代码,会对自己水平的提升大有裨益,这点我深有体会。

这个模块主要内容就是状态机,当我们把这个状态机搞懂了,也就明白这个模块的工作逻辑了。好了,接下来看看人家说了什么吧。

0、“INIT

在上电500ns后启动复位如下图 ,如果有软复位,就一直是0,当释放软复位就开始计数,直到计数到“WAIT_MAX”,将init_wait_done拉高,随后复位状态机开始工作,从INIT状态跳转到“ASSERT_ALL_RESETS”状态。

         我们看下仿真,确实,如上述代码

1、“ASSERT_ALL_RESETS

从这个状态机的名字也能看出来,是置复位,也就是给“GTPE2_COMMON”、“GTPE2_CHANNEL”和“MMCM 置复位信号。如下代码红色框图中,对“GTPE2_CHANNEL”和“MMCM”的复位信号是直接置一,而对“GTPE2_COMMON”的复位需要满足一定条件,就是“refclk_lost==0”,refclk_lost”为高电平表示PLL失锁。所谓的失锁就是PLL的相位频率检测器的参考时钟丢失,这时候复位时没有意义的,故须检测到该信号为低电平,才可对其进行复位。

我们看下跳转条件,当检测到pll0lock_sync为低电平时,且对PLL置复位了才进行跳转,首先来了解下pll0lock_sync信号的作用,实际上就是PLL0LOCK,此信号表示PLL频率锁定信号,高电平有效,表示PLL频率在预定容差范围内。满足此条件,收发器及其时钟输出才可靠。而置复位后,这个信号理应为低电平。

此时时序图如下图所示,在此我们也应该注意到,对PLL的复位只时一个时钟周期。

2、WAIT_FOR_PLL_LOCK

这个状态机就是等待一段时间,1000个时钟周期,10us

3、RELEASE_PLL_RESET

等待pll0lock_sync信号,也就是完成PLL锁存,如果超过2ms则重新复位,而且会通过“retry_counter_int”这个信号对超时的次数进行限制。

4、WAIT_FOR_TXOUTCLK

将对“GTPE2_CHANNEL”的置位信号取消,并等待10us

5、RELEASE_MMCM_RESET

         该状态有两个目的,一是释放对MMCM的复位,二是检测“MMCM_LOCK”信号,也就是PLL频率是否在预定容差范围内,如果是则该信号为1,否则为0。如果超过一定时间未检测到锁定信号,则回到“ASSERT_ALL_RESETS”状态。

6、WAIT_FOR_TXUSRCLK

等待,同4

7、WAIT_RESET_DONE

GTP复位完成,逻辑同复位“MMCM”差不多,这里等待的是“txresetdone_s3”这个对“GTPE2_CHANNEL”的复位完成信号。

8、DO_PHASE_ALIGNMENT

         忽略,对外接口的信号都没有引出。

9、RESET_FSM_DONE

复位完成,我们可以发现这个是锁存的,不会跳转到IDLE状态,所以这个模块可以说是上电初始化,也就是为什么叫“gtp_core_TX_STARTUP_FSM”的原因了。

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/931675
推荐阅读
相关标签
  

闽ICP备14008679号