4.2 GTP复位逻辑分析
有没有发现什么呢?这些接口就是对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”的原因了。
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我